event_rec helper class introduced
This commit is contained in:
82
src/ETW.cpp
82
src/ETW.cpp
@@ -30,6 +30,88 @@
|
||||
const winstd::event_data winstd::event_data::blank;
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// winstd::event_rec
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
||||
winstd::event_rec::~event_rec()
|
||||
{
|
||||
if (ExtendedData)
|
||||
delete (unsigned char*)ExtendedData;
|
||||
|
||||
if (UserData)
|
||||
delete (unsigned char*)UserData;
|
||||
}
|
||||
|
||||
|
||||
void winstd::event_rec::set_extended_data(_In_ USHORT count, _In_count_(count) const EVENT_HEADER_EXTENDED_DATA_ITEM *data)
|
||||
{
|
||||
if (ExtendedData)
|
||||
delete (unsigned char*)ExtendedData;
|
||||
|
||||
set_extended_data_internal(count, data);
|
||||
}
|
||||
|
||||
|
||||
void winstd::event_rec::set_user_data(_In_ USHORT size, _In_bytecount_(size) LPCVOID data)
|
||||
{
|
||||
if (UserData)
|
||||
delete (unsigned char*)UserData;
|
||||
|
||||
set_user_data_internal(size, data);
|
||||
}
|
||||
|
||||
|
||||
void winstd::event_rec::set_extended_data_internal(_In_ USHORT count, _In_count_(count) const EVENT_HEADER_EXTENDED_DATA_ITEM *data)
|
||||
{
|
||||
if (count) {
|
||||
assert(data);
|
||||
|
||||
// Count the total required memory.
|
||||
size_t data_size = 0;
|
||||
for (size_t i = 0; i < count; i++)
|
||||
data_size += data[i].DataSize;
|
||||
|
||||
// Allocate memory for extended data.
|
||||
ExtendedData = (EVENT_HEADER_EXTENDED_DATA_ITEM*)(new unsigned char[sizeof(EVENT_HEADER_EXTENDED_DATA_ITEM)*count + data_size]);
|
||||
|
||||
// Bulk-copy extended data descriptors.
|
||||
memcpy(ExtendedData, data, sizeof(EVENT_HEADER_EXTENDED_DATA_ITEM) * count);
|
||||
|
||||
// Copy the data.
|
||||
unsigned char *ptr = (unsigned char*)(ExtendedData + count);
|
||||
for (size_t i = 0; i < count; i++) {
|
||||
if (data[i].DataSize) {
|
||||
memcpy(ptr, (void*)(data[i].DataPtr), data[i].DataSize);
|
||||
ExtendedData[i].DataPtr = (ULONGLONG)ptr;
|
||||
ptr += data[i].DataSize;
|
||||
} else
|
||||
ExtendedData[i].DataPtr = NULL;
|
||||
}
|
||||
} else
|
||||
ExtendedData = NULL;
|
||||
|
||||
ExtendedDataCount = count;
|
||||
}
|
||||
|
||||
|
||||
void winstd::event_rec::set_user_data_internal(_In_ USHORT size, _In_bytecount_(size) LPCVOID data)
|
||||
{
|
||||
if (size) {
|
||||
assert(data);
|
||||
|
||||
// Allocate memory for user data.
|
||||
UserData = new unsigned char[size];
|
||||
|
||||
// Copy user data.
|
||||
memcpy(UserData, data, size);
|
||||
} else
|
||||
UserData = NULL;
|
||||
|
||||
UserDataLength = size;
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
// winstd::event_provider
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
|
Reference in New Issue
Block a user