EtwpBuildNotificationPacket
NTSTATUS __stdcall EtwpBuildNotificationPacket(
_ETW_GUID_ENTRY *GuidEntry,
_ETW_ENABLE_NOTIFICATION_PACKET *EnableNotification,
UINT8 EnableMask,
_ETWP_NOTIFICATION_HEADER **NotificationPacket){
int SchematizedFilterSize;
int v9;
int v10;
_ETWP_NOTIFICATION_HEADER *v12;
unsigned int v13;
_ETWP_NOTIFICATION_HEADER *v14;
_ETWP_NOTIFICATION_HEADER *OutDataBlock[5];
OutDataBlock[0] = 0i64;
SchematizedFilterSize = EtwpGetSchematizedFilterSize(GuidEntry, EnableMask);
v9 = SchematizedFilterSize;
if( SchematizedFilterSize )
{
v13 = SchematizedFilterSize + 136;
v10 = EtwpAllocDataBlock((unsigned int)(SchematizedFilterSize + 136), 0i64, OutDataBlock);
if( v10 >= 0 )
{
v14 = OutDataBlock[0];
if( EnableNotification )
{
*(_OWORD *)OutDataBlock[0] = *(_OWORD *)EnableNotification->gap0;
*(_OWORD *)&v14->ReplyIndex = *(_OWORD *)&EnableNotification->gap0[16];
*(_OWORD *)&v14->TargetPID = *(_OWORD *)&EnableNotification->gap0[32];
*(_OWORD *)v14->DestinationGuid.Data4 = *(_OWORD *)&EnableNotification->gap0[48];
*(_OWORD *)v14->SourceGuid[0].Data4 = *(_OWORD *)&EnableNotification->gap0[64];
*(_OWORD *)v14->SourceGuid[1].Data4 = *(_OWORD *)&EnableNotification->EnableInfo.EnableProperty;
*(_OWORD *)v14->SourceGuid[2].Data4 = *(_OWORD *)&EnableNotification->EnableInfo.MatchAllKeyword;
*(_QWORD *)v14->SourceGuid[3].Data4 = *(_QWORD *)&EnableNotification->LegacyProviderEnabled;
}
*(_DWORD *)&v14->SourceGuid[3].Data4[4] = 1;
v14->RefCount = 1;
v14->NotificationSize = v13;
*NotificationPacket = v14;
*(_QWORD *)&v14->SourceGuid[4].Data1 = 136i64;
*(_DWORD *)&v14->SourceGuid[4].Data4[4] = 0x80000000;
*(_DWORD *)v14->SourceGuid[4].Data4 = v9;
EtwpCopySchematizedFilters(&v14->SourceGuid[5], (__int64)GuidEntry, EnableMask);
}
}
else if( EnableNotification )
{
return EtwpAllocDataBlock(
*(unsigned int *)&EnableNotification->gap0[4],
(_ETWP_NOTIFICATION_HEADER *)EnableNotification,
NotificationPacket);
}
else
{
v10 = EtwpAllocDataBlock(0x78ui64, 0i64, OutDataBlock);
if( v10 >= 0 )
{
v12 = OutDataBlock[0];
*NotificationPacket = OutDataBlock[0];
v12->RefCount = 1;
v12->NotificationSize = 120;
}
}
return v10;
}Referenced by:
EtwpCalculateUpdateNotification
EtwpDisallowedGuidAddition
EtwpDisallowedGuidRemoval
EtwpEnableGuid
SendCaptureStateNotificationsWorker