MiGetPerfectColorHeadPage

_MMPFN *__fastcall MiGetPerfectColorHeadPage(INT64 a1, _QWORD *a2, INT64 a3, INT64 a4, INT16 a5){
  UINT64 v5; 
  int v6; 
  int v9; 
  volatile signed __int32 *v10; 
  unsigned __int8 CurrentIrql; 
  volatile signed __int32 *v12; 
  signed __int8 v13; 
  IO_WORKITEM_ROUTINE *v14; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  UINT64 SpinCount; 
  UINT64 v18; 
  INT64 v19; 
  LODWORD(v19) = a4;
  LODWORD(v18) = a3;
  v5 = a2[2];
  v6 = a4;
  memset(&LockHandle, 0, sizeof(LockHandle));
  if( v5 != 0xFFFFFFFFFi64 )
  {
    v9 = a5 & 1;
    while( 1 )
    {
      v10 = (volatile signed __int32 *)((char *)MmGetPfnDb() + 48 * v5);
      if( v9 )
      {
        v12 = v10 + 6;
        if( _interlockedbittestandset64(v10 + 6, 0x3Fui64) )
          return 0i64;
        CurrentIrql = 17;
      }
      else
      {
        CurrentIrql = KeGetCurrentIrql();
        __writecr8(2ui64);
        v12 = v10 + 6;
        v13 = _interlockedbittestandset64(v10 + 6, 0x3Fui64);
        if( (a5 & 0x4000) != 0 )
        {
          LODWORD(SpinCount) = 0;
          if( v13 )
          {
            do
            {
              do
                KeYieldProcessorEx(&SpinCount);
              while( *(__int64 *)v12 < 0 );
            }
            while( _interlockedbittestandset64(v12, 0x3Fui64) );
            v6 = v19;
          }
        }
        else if( v13 )
        {
          goto LABEL_24;
        }
      }
      if( (*((_BYTE *)v10 + 34) & 7) != v6 )
        break;
      LockHandle.LockQueue.Next = 0i64;
      v14 = (IO_WORKITEM_ROUTINE *)(a2 + 4);
      LockHandle.LockQueue.Lock = a2 + 4;
      if( (a5 & 0x4000) != 0 )
      {
        KxAcquireQueuedSpinLock((PIO_WORKITEM)&LockHandle, v14, (WORK_QUEUE_TYPE)a3, (PVOID)a4);
      }
      else if( !(unsigned int)KxTryToAcquireQueuedSpinLock(&LockHandle.LockQueue, (UINT64 *)v14) )
      {
        _InterlockedAnd64((volatile signed __int64 *)v12, 0x7FFFFFFFFFFFFFFFui64);
        if( CurrentIrql != 17 )
        {
LABEL_24:
          __writecr8(CurrentIrql);
          return 0i64;
        }
        return 0i64;
      }
      if( v5 == a2[2] )
      {
        if( MiUnlinkFreeOrZeroedPage(v5, (_MMPFNLIST *)a2, (UINT8 *)(unsigned int)a5) )
        {
          _InterlockedAnd64((volatile signed __int64 *)v12, 0x7FFFFFFFFFFFFFFFui64);
          if( !v9 && a2[2] != 0xFFFFFFFFFi64 )
            MiReplenishPageSlist(a1, (unsigned int)v19, (unsigned int)v18);
          KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
          if( CurrentIrql != 17 )
            __writecr8(CurrentIrql);
          return(_MMPFN *)v10;
        }
        else
        {
          KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
          MiReturnFreeZeroPage((INT64)v10);
          _InterlockedAnd64((volatile signed __int64 *)v12, 0x7FFFFFFFFFFFFFFFui64);
          if( CurrentIrql != 17 )
            __writecr8(CurrentIrql);
          return(_MMPFN *)1;
        }
      }
      KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
      _InterlockedAnd64((volatile signed __int64 *)v12, 0x7FFFFFFFFFFFFFFFui64);
      if( CurrentIrql != 17 )
        goto LABEL_21;
LABEL_22:
      v5 = a2[2];
      if( v5 == 0xFFFFFFFFFi64 )
        return 0i64;
      v6 = v19;
    }
    _InterlockedAnd64((volatile signed __int64 *)v12, 0x7FFFFFFFFFFFFFFFui64);
    if( CurrentIrql == 17 )
      goto LABEL_22;
LABEL_21:
    __writecr8(CurrentIrql);
    goto LABEL_22;
  }
  return 0i64;
}

Referenced by:

MiGetPage
MiRemovePageAnyColor