MiWaitForAvailablePages
NTSTATUS __fastcall MiWaitForAvailablePages(__int64 a1, _LARGE_INTEGER *a2, INT64 a3){
NTSTATUS result;
_KLOCK_QUEUE_HANDLE LockHandle;
memset(&LockHandle, 0, sizeof(LockHandle));
KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)(a1 + 4928), &LockHandle);
if( *(_QWORD *)(a1 + 7104) < 0x420ui64 )
{
KeResetEvent((_KEVENT *)(a1 + 5000));
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
return KeWaitForSingleObject(a1 + 5000, 8, 0, 0, (INT64)a2);
}
else
{
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
result = KiIrqlFlags;
__writecr8(LockHandle.OldIrql);
}
return result;
}Referenced by:
MiDelayFaultingThread