PpmEventTraceProcessorIdleAccounting
NTSTATUS __stdcall PpmEventTraceProcessorIdleAccounting(_KPRCB *Prcb, UINT64 Param1, UINT64 Param2){
int v3;
VOID **v5;
_PPM_IDLE_STATES *IdleStates;
_PROC_IDLE_ACCOUNTING *IdleAccounting;
unsigned int StateCount;
VOID **PoolWithTag;
_QWORD *v10;
unsigned __int64 *p_InterruptibleCount;
__int64 v12;
unsigned __int64 v13;
VOID **v14;
VOID **v15;
ULONG UserDataCount;
__int16 Group;
unsigned int v19;
UINT64 v20;
_EVENT_DATA_DESCRIPTOR UserData;
__int16 *p_Group;
__int64 v23;
unsigned __int8 *p_GroupIndex;
__int64 v25;
UINT64 *v26;
__int64 v27;
int *v28;
__int64 v29;
VOID **v30;
int v31;
int v32;
v3 = 0;
v5 = 0i64;
Group = 0;
v19 = 0;
v20 = 0i64;
if( PpmEtwRegistered )
{
if( EtwEventEnabled(PpmEtwHandle, &PPM_ETW_IDLE_ACCOUNTING_RUNDOWN) )
{
IdleStates = Prcb->PowerState.IdleStates;
if( IdleStates )
{
IdleAccounting = Prcb->PowerState.IdleAccounting;
if( IdleAccounting )
{
StateCount = IdleAccounting->StateCount;
if( IdleStates->InterfaceVersion == 1 )
{
v3 = 80 * StateCount;
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, 80 * StateCount, 1699565648i64);
v5 = PoolWithTag;
if( !PoolWithTag )
return 0;
memset(PoolWithTag, 0i64, 80 * StateCount);
if( StateCount )
{
v10 = v5 + 3;
p_InterruptibleCount = &IdleAccounting->State[0].SelectionStatistics.InterruptibleCount;
v12 = StateCount;
do
{
*(v10 - 3) = *(p_InterruptibleCount - 1);
v13 = *p_InterruptibleCount;
p_InterruptibleCount += 125;
*(v10 - 1) = v13;
*v10 = *(p_InterruptibleCount - 130);
v10 += 10;
*(v10 - 9) = *(p_InterruptibleCount - 129);
*(v10 - 6) = *(p_InterruptibleCount - 132);
*(v10 - 5) = *(p_InterruptibleCount - 133);
*(v10 - 4) = *(p_InterruptibleCount - 134);
*(v10 - 12) = *(p_InterruptibleCount - 124);
*(v10 - 8) = *(p_InterruptibleCount - 122);
*(v10 - 7) = *(p_InterruptibleCount - 123);
--v12;
}
while( v12 );
}
}
v14 = ExAllocatePoolWithTag(0x200ui64, 416 * StateCount + 24, 1699565648i64);
v15 = v14;
if( v14 )
{
memset(v14, 0i64, 416 * StateCount + 24);
PpmTranslateIdleAccounting(&Prcb->PowerState, (__int64)v15, &v20);
Group = Prcb->Group;
p_Group = &Group;
p_GroupIndex = &Prcb->GroupIndex;
v26 = &v20;
UserDataCount = 5;
UserData.Ptr = (unsigned __int64)v15;
UserData.Size = 416 * StateCount + 24;
UserData.Reserved = 0;
v23 = 2i64;
v25 = 1i64;
v27 = 8i64;
if( v5 )
{
UserDataCount = 6;
v30 = v5;
v31 = v3;
v32 = 0;
}
else
{
StateCount = 0;
}
v19 = StateCount;
v28 = (int *)&v19;
v29 = 4i64;
EtwWriteEx(PpmEtwHandle, &PPM_ETW_IDLE_ACCOUNTING_RUNDOWN, 0i64, 0, 0, 0, UserDataCount, &UserData);
ExFreePoolWithTag(v15, 0x654D5050u);
}
if( v5 )
ExFreePoolWithTag(v5, 0x654D5050u);
}
}
}
}
return 0;
}Referenced by:
No references.