PopProcessorInformation
INT64 __fastcall PopProcessorInformation(INT64 a1, INT64 a2, UINT16 a3, _DWORD *a4){
unsigned int v4;
KAFFINITY GroupAffinity;
unsigned __int64 v9;
_ETHREAD *CurrentThread;
unsigned int v11;
__int64 v12;
__int64 v13;
__int64 v14;
int v15;
__int64 v16;
int v17;
unsigned __int16 *v19[2];
UINT16 v20;
int v21;
__int16 v22;
UINT64 ProcessorNumber;
v4 = 0;
v21 = 0;
v22 = 0;
LODWORD(ProcessorNumber) = 0;
GroupAffinity = KeQueryGroupAffinity(a3);
v9 = (0x101010101010101i64
* ((((GroupAffinity - ((GroupAffinity >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
+ (((GroupAffinity - ((GroupAffinity >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)
+ ((((GroupAffinity - ((GroupAffinity >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
+ (((GroupAffinity - ((GroupAffinity >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)) >> 4)) & 0xF0F0F0F0F0F0F0Fi64)) >> 56;
if( (unsigned int)(24 * v9) > 0x600 )
{
if( a4 )
*a4 = 0;
return(unsigned int)-1073741789;
}
else
{
if( (_DWORD)v9 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v11 = 0;
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockSharedEx((UINT64)&PpmIdlePolicyLock, 0i64);
v20 = a3;
v19[1] = (unsigned __int16 *)GroupAffinity;
v19[0] = 0i64;
while( !(unsigned int)KeEnumerateNextProcessor(&ProcessorNumber, v19) && v11 < (unsigned int)v9 )
{
KeGetPrcb((unsigned int)ProcessorNumber);
v13 = v12;
*(_DWORD *)(a1 + 24i64 * v11) = *(unsigned __int8 *)(v12 + 209);
PpmPerfGetCurrentState(
v12,
(_DWORD *)(a1 + 8 + 24i64 * v11),
(unsigned int *)(a1 + 12 + 24i64 * v11),
0i64,
0i64,
0i64);
v14 = *(_QWORD *)(v13 + 33128);
if( v14 )
v15 = *(_DWORD *)(v14 + 316);
else
v15 = *(_DWORD *)(v13 + 68);
*(_DWORD *)(a1 + 24i64 * v11 + 4) = v15;
v16 = *(_QWORD *)(v13 + 0x8000);
if( v16 )
{
*(_DWORD *)(a1 + 24i64 * v11 + 16) = *(_DWORD *)(v16 + 32);
v17 = *(_DWORD *)(v16 + 16) + 1;
}
else
{
*(_DWORD *)(a1 + 24i64 * v11 + 16) = 0;
v17 = 0;
}
*(_DWORD *)(a1 + 24i64 * v11++ + 20) = v17;
}
PopReleaseRwLock((UINT64)&PpmIdlePolicyLock);
}
*a4 = 24 * v9;
}
return v4;
}Referenced by:
NtPowerInformation