PpmIdleTransitionStall
NTSTATUS __stdcall PpmIdleTransitionStall(
_LIST_ENTRY *LoadOrderListHead,
_RTL_PROCESS_MODULES *ModuleInformation,
UINT64 ModuleInformationLength,
UINT64 *ReturnLength){
LARGE_INTEGER PerformanceCounter;
_LIST_ENTRY *Flink;
if( LoadOrderListHead->Flink )
{
if( ++LODWORD(LoadOrderListHead[1].Blink) == 1000 )
{
LODWORD(LoadOrderListHead[1].Blink) = 0;
PerformanceCounter = (LARGE_INTEGER)(*(_QWORD *)&KeQueryPerformanceCounter(0i64)
- (unsigned __int64)LoadOrderListHead->Flink);
if( (_LIST_ENTRY *)PerformanceCounter.QuadPart > LoadOrderListHead->Blink )
{
Flink = LoadOrderListHead[1].Flink;
if( Flink )
KeBugCheckEx(0xA0u, 0x701ui64, HIDWORD(Flink[2051].Flink), (ULONG_PTR)Flink, HIDWORD(Flink[2].Flink));
KeBugCheckEx(0xA0u, 0x704ui64, 0i64, 0i64, 0i64);
}
}
}
else
{
PerformanceCounter = KeQueryPerformanceCounter(0i64);
LoadOrderListHead->Flink = (_LIST_ENTRY *)PerformanceCounter.QuadPart;
}
if( BYTE4(LoadOrderListHead[1].Blink) )
_mm_pause();
_mm_pause();
return PerformanceCounter.LowPart;
}Referenced by:
PoInitiateProcessorWake
PpmExitCoordinatedIdleState
PpmIdleCheckCoordinatedDependency
PpmIdleExecuteTransition
PpmIdleWaitForDependentTransitions
PpmTestAndLockProcessor