MiRetryNonPagedAllocation

VOID __fastcall MiRetryNonPagedAllocation(){
  _BYTE *v0; 
  CHAR v1; 
  char v2; 
  const _LARGE_INTEGER *v3; 
  NTSTATUS i; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  memset(&LockHandle, 0, sizeof(LockHandle));
  if( KeGetCurrentIrql() <= 1u && (KeGetPcr()->Prcb._bf_0 & 0x10001) == 0 )
  {
    KeAreInterruptsEnabled(v1, v0);
    if( v2 )
    {
      if( (*(_DWORD *)&KeGetCurrentThread()[1].gapD8[12] & 2) == 0
        && !MiSufficientAvailablePages((INT64)&Irp, 0xA0ui64) )
      {
        v3 = &Mi30Milliseconds;
        for( i = 1; ; i = KeWaitForSingleObject((UINT64)&stru_140C50B28 + 4864, 8, 0, 0, (INT64)v3) )
        {
          KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&stru_140C50B28 + 603, &LockHandle);
          if( MiSufficientAvailablePages((INT64)&Irp, 0xA0ui64) )
            break;
          if( i == 1 )
          {
            if( byte_140C4C624 == 1 )
            {
              if( dword_140C4C620 == *(&stru_140C50B28 + 1222) )
                goto LABEL_21;
              byte_140C4C624 = 0;
            }
          }
          else
          {
            if( i == 258 )
            {
              if( !byte_140C4C624 )
              {
                dword_140C4C620 = *(&stru_140C50B28 + 1222);
                byte_140C4C624 = 1;
              }
              goto LABEL_21;
            }
            v3 = &Mi10Milliseconds;
          }
          KeResetEvent((_KEVENT *)((char *)&stru_140C50B28 + 4864));
          KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
          __writecr8(LockHandle.OldIrql);
        }
        if( byte_140C4C624 == 1 )
          byte_140C4C624 = 0;
LABEL_21:
        KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
        __writecr8(LockHandle.OldIrql);
      }
    }
  }
}

Referenced by:

MiGetPoolPages