PpmEventTraceProcessorIdle
VOID __stdcall PpmEventTraceProcessorIdle(_KPRCB *Prcb){
EVENT_DESCRIPTOR *v1;
__int64 v3;
int v4;
unsigned int v5;
unsigned int v6;
EVENT_DATA_DESCRIPTOR *PoolWithTag;
EVENT_DATA_DESCRIPTOR *UserData;
unsigned int v9;
EVENT_DATA_DESCRIPTOR *v10;
__int64 v11;
EVENT_DATA_DESCRIPTOR *v12;
const wchar_t *v13;
__int64 v14;
int v15;
__int16 v16;
unsigned int v17;
int v18;
if( PpmEtwRegistered && EtwEventEnabled(PpmEtwHandle, (EVENT_DESCRIPTOR *)&PPM_ETW_CURRENT_IDLE_RUNDOWN, v1) )
{
v3 = *((_QWORD *)Prcb + 4096);
if( v3 )
{
v5 = *(_DWORD *)(v3 + 32);
v17 = v5;
v4 = *(_DWORD *)(v3 + 36);
}
else
{
v17 = 0;
v4 = 0;
v5 = 0;
}
v18 = v4;
v6 = 2 * v5 + 4;
PoolWithTag = (EVENT_DATA_DESCRIPTOR *)ExAllocatePoolWithTag(PagedPool, 16 * v6 + 37 * v5, 0x654D5050ui64);
UserData = PoolWithTag;
if( PoolWithTag )
{
memset((INT64)PoolWithTag, 0i64);
v16 = *((unsigned __int8 *)Prcb + 208);
v9 = 0;
UserData->Reserved = 0;
UserData[1].Reserved = 0;
UserData[2].Reserved = 0;
UserData[3].Reserved = 0;
UserData->Ptr = (unsigned __int64)&v16;
UserData[1].Ptr = (unsigned __int64)Prcb + 209;
UserData[2].Ptr = (unsigned __int64)&v18;
v10 = &UserData[v6];
UserData[3].Ptr = (unsigned __int64)&v17;
UserData->Size = 2;
UserData[1].Size = 1;
UserData[2].Size = 4;
for( UserData[3].Size = 4; v9 < v17; UserData[v14].Reserved = 0 )
{
v11 = 248i64 * v9;
v12 = &UserData[2 * v9 + 4];
LODWORD(v10->Ptr) = *(_DWORD *)(v11 + v3 + 1000);
HIDWORD(v10->Ptr) = *(_DWORD *)(v11 + v3 + 1004);
LOBYTE(v10->Size) = *(_BYTE *)(v11 + v3 + 1056);
*(unsigned int *)((char *)&v10->Size + 1) = *(unsigned __int8 *)(v11 + v3 + 1057);
*(unsigned int *)((char *)&v10->Reserved + 1) = *(unsigned __int8 *)(v11 + v3 + 1058);
*(_DWORD *)((char *)&v10[1].Ptr + 1) = *(unsigned __int8 *)(v11 + v3 + 1059);
*(_DWORD *)((char *)&v10[1].Ptr + 5) = *(unsigned __int8 *)(v11 + v3 + 1060);
*(unsigned int *)((char *)&v10[1].Size + 1) = *(unsigned __int8 *)(v11 + v3 + 1061);
*(unsigned int *)((char *)&v10[1].Reserved + 1) = *(unsigned __int8 *)(v11 + v3 + 1062);
*(_DWORD *)((char *)&v10[2].Ptr + 1) = *(unsigned __int8 *)(v11 + v3 + 1063);
v12->Reserved = 0;
v12->Ptr = (unsigned __int64)v10;
v12->Size = 37;
v13 = *(const wchar_t **)(v11 + v3 + 992);
v14 = 2 * v9 + 5;
if( v13 )
{
v15 = *(unsigned __int16 *)(v11 + v3 + 986);
}
else
{
v15 = 28;
v13 = L"";
}
UserData[2 * v9 + 5].Ptr = (unsigned __int64)v13;
v10 = (EVENT_DATA_DESCRIPTOR *)((char *)v10 + 37);
UserData[2 * v9++ + 5].Size = v15;
}
EtwWrite(PpmEtwHandle, (EVENT_DESCRIPTOR *)&PPM_ETW_CURRENT_IDLE_RUNDOWN, 0i64, v6, UserData);
ExFreePoolWithTag(UserData, 0x654D5050u);
}
}
}Referenced by:
PpmEventTraceControlCallback