PpmIdleCheckCoordinatedDependencies
INT64 __fastcall PpmIdleCheckCoordinatedDependencies(
_KPRCB *Prcb,
UINT64 PreselectState,
UINT64 EntryPriority,
UINT64 RemainingLatency,
UINT64 ExpectedIdle,
UINT64 Dependencies,
_PPM_SELECTION_DEPENDENCY *DependencyList,
UINT *ProcessorState,
_PPM_COORDINATED_SELECTION *CoordinatedSelection,
_KAFFINITY_EX *SecondaryMask){
unsigned int v10;
unsigned int v11;
unsigned int v12;
_PPM_SELECTION_MENU *Menu;
_KAFFINITY_EX *v15;
UINT64 Entries_low;
INT64 result;
INT64 v18;
INT64 v19;
UINT64 EntryPrioritya;
int v21;
v21 = EntryPriority;
v10 = 0;
v11 = RemainingLatency;
v12 = PreselectState;
if( !(_DWORD)Dependencies )
return 0i64;
Menu = &DependencyList->Menu;
v15 = SecondaryMask;
while( 1 )
{
Entries_low = LODWORD(Menu[-1].Entries);
if( (_DWORD)Entries_low == -1 )
{
LODWORD(EntryPrioritya) = EntryPriority;
result = PpmIdleCheckCoordinatedDependency(
Prcb,
v12,
v11,
ExpectedIdle,
EntryPrioritya,
Menu,
ProcessorState,
CoordinatedSelection,
v15);
}
else if( (_DWORD)Entries_low == *((_DWORD *)Prcb + 9) )
{
result = PpmIdleSelectCoordinatedProcessorDependency(
(__int64)Prcb,
v12,
v11,
ExpectedIdle,
(__int64)Menu,
ProcessorState);
}
else
{
KeGetPrcb(Entries_low);
v19 = v18;
if( (int)PpmTestAndLockProcessor(v18, SecondaryMask, (INT64)Menu) >= 0 )
result = *(_BYTE *)(PpmPlatformStates + 12)
&& *(_DWORD *)(248i64 * *(unsigned int *)(v19 + 32820) + *(_QWORD *)(v19 + 0x8000) + 1000) > v11 ? 2147483650i64 : 0i64;
else
result = 2147483653i64;
v15 = SecondaryMask;
}
if( result )
break;
LODWORD(EntryPriority) = v21;
++v10;
Menu = (_PPM_SELECTION_MENU *)((char *)Menu + 24);
if( v10 >= (unsigned int)Dependencies )
return 0i64;
}
return result;
}Referenced by:
PpmIdleCheckCoordinatedDependency
PpmIdleCheckCoordinatedStateEligibility