PpmEventTraceCoordinatedIdleStates
VOID __stdcall PpmEventTraceCoordinatedIdleStates(INT64 a1, INT64 a2, NPTEXTMETRIC *a3){
__int64 v3;
unsigned int v4;
ULONG v5;
UINT64 v6;
VOID **PoolWithTag;
_EVENT_DATA_DESCRIPTOR *UserData;
__int64 v9;
_EVENT_DATA_DESCRIPTOR *v10;
int v11;
_EVENT_DATA_DESCRIPTOR *v12;
const wchar_t *v13;
int v14;
unsigned int v15;
if( PpmEtwRegistered && EtwEventEnabled(PpmEtwHandle, &PPM_ETW_COORDINATED_IDLE_RUNDOWN) )
{
v3 = PpmPlatformStates;
v4 = PpmPlatformStates ? *(_DWORD *)PpmPlatformStates : 0;
v15 = v4;
v5 = 2 * v4 + 1;
v6 = 16 * v5 + 12 * v4;
PoolWithTag = ExAllocatePoolWithTag(1ui64, v6, 1699565648i64);
UserData = (_EVENT_DATA_DESCRIPTOR *)PoolWithTag;
if( PoolWithTag )
{
memset(PoolWithTag, 0i64, v6);
UserData->Reserved = 0;
v9 = 0i64;
v10 = &UserData[v5];
UserData->Ptr = (unsigned __int64)&v15;
for( UserData->Size = 4; (unsigned int)v9 < v15; UserData[v11 + 2].Reserved = 0 )
{
v11 = 2 * v9;
v12 = &UserData[(unsigned int)(2 * v9 + 1)];
LODWORD(v10->Ptr) = *(_DWORD *)(384 * v9 + v3 + 72);
HIDWORD(v10->Ptr) = *(_DWORD *)(384 * v9 + v3 + 76);
v10->Size = *(unsigned __int8 *)(384 * v9 + v3 + 121);
v12->Reserved = 0;
v12->Ptr = (unsigned __int64)v10;
v12->Size = 12;
v13 = *(const wchar_t **)(384 * v9 + v3 + 304);
if( v13 )
{
v14 = *(unsigned __int16 *)(384 * v9 + v3 + 298);
}
else
{
v14 = 28;
v13 = L"";
}
UserData[v11 + 2].Ptr = (unsigned __int64)v13;
v10 = (_EVENT_DATA_DESCRIPTOR *)((char *)v10 + 12);
UserData[v11 + 2].Size = v14;
v9 = (unsigned int)(v9 + 1);
}
EtwWrite(PpmEtwHandle, &PPM_ETW_COORDINATED_IDLE_RUNDOWN, 0, v5, UserData);
ExFreePoolWithTag(UserData, 0x654D5050u);
}
}
}Referenced by:
PpmEventTraceControlCallback