MiGetPerfectColorHeadPage

__int64 __fastcall MiGetPerfectColorHeadPage(_MI_PARTITION *a1, _MMPFNLIST *a2, int a3, _MMLISTS a4, UINT8 *Flags){
  unsigned __int64 Flink; 
  _MMLISTS v6; 
  int v9; 
  _MMPFN *v10; 
  unsigned __int8 CurrentIrql; 
  volatile signed __int32 *p_u2; 
  signed __int8 v13; 
  unsigned __int64 *p_Lock; 
  UINT64 v15; 
  _KLOCK_QUEUE_HANDLE LockQueue; 
  UINT64 SpinCount; 
  UINT64 Color; 
  _MMLISTS PageType; 

  PageType = a4;
  LODWORD(Color) = a3;
  Flink = a2->Flink;
  v6 = a4;
  memset(&LockQueue, 0, sizeof(LockQueue));
  if( Flink != 0xFFFFFFFFFi64 )
  {
    v9 = (unsigned __int8)Flags & 1;
    while( 1 )
    {
      v10 = &MmGetPfnDb()[Flink];
      if( v9 )
      {
        p_u2 = (volatile signed __int32 *)&v10->u2;
        if( _interlockedbittestandset64((volatile signed __int32 *)&v10->u2, 0x3Fui64) )
          return 0i64;
        CurrentIrql = 17;
      }
      else
      {
        CurrentIrql = KeGetCurrentIrql();
        __writecr8(2ui64);
        p_u2 = (volatile signed __int32 *)&v10->u2;
        v13 = _interlockedbittestandset64((volatile signed __int32 *)&v10->u2, 0x3Fui64);
        if( ((unsigned __int16)Flags & 0x4000) != 0 )
        {
          LODWORD(SpinCount) = 0;
          if( v13 )
          {
            do
            {
              do
                KeYieldProcessorEx(&SpinCount);
              while( *(__int64 *)p_u2 < 0 );
            }
            while( _interlockedbittestandset64(p_u2, 0x3Fui64) );
            v6 = PageType;
          }
        }
        else if( v13 )
        {
          goto LABEL_24;
        }
      }
      if( (*(_BYTE *)(&v10->u3 + 1) & 7) != v6 )
        break;
      LockQueue.LockQueue.Next = 0i64;
      p_Lock = &a2->Lock;
      LockQueue.LockQueue.Lock = &a2->Lock;
      if( ((unsigned __int16)Flags & 0x4000) != 0 )
      {
        KxAcquireQueuedSpinLock(&LockQueue.LockQueue, p_Lock);
      }
      else if( !KxTryToAcquireQueuedSpinLock(&LockQueue.LockQueue, p_Lock) )
      {
        _InterlockedAnd64((volatile signed __int64 *)p_u2, 0x7FFFFFFFFFFFFFFFui64);
        if( CurrentIrql != 17 )
        {
LABEL_24:
          __writecr8(CurrentIrql);
          return 0i64;
        }
        return 0i64;
      }
      if( Flink == a2->Flink )
      {
        if( MiUnlinkFreeOrZeroedPage(Flink, a2, (UINT8 *)(unsigned int)Flags) )
        {
          _InterlockedAnd64((volatile signed __int64 *)p_u2, 0x7FFFFFFFFFFFFFFFui64);
          if( !v9 && a2->Flink != 0xFFFFFFFFFi64 )
            MiReplenishPageSlist(a1, PageType, (unsigned int)Color, v15);
          KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockQueue);
          if( CurrentIrql != 17 )
            __writecr8(CurrentIrql);
          return(__int64)v10;
        }
        else
        {
          KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockQueue);
          MiReturnFreeZeroPage((INT64)v10);
          _InterlockedAnd64((volatile signed __int64 *)p_u2, 0x7FFFFFFFFFFFFFFFui64);
          if( CurrentIrql != 17 )
            __writecr8(CurrentIrql);
          return 1i64;
        }
      }
      KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockQueue);
      _InterlockedAnd64((volatile signed __int64 *)p_u2, 0x7FFFFFFFFFFFFFFFui64);
      if( CurrentIrql != 17 )
        goto LABEL_21;
LABEL_22:
      Flink = a2->Flink;
      if( Flink == 0xFFFFFFFFFi64 )
        return 0i64;
      v6 = PageType;
    }
    _InterlockedAnd64((volatile signed __int64 *)p_u2, 0x7FFFFFFFFFFFFFFFui64);
    if( CurrentIrql == 17 )
      goto LABEL_22;
LABEL_21:
    __writecr8(CurrentIrql);
    goto LABEL_22;
  }
  return 0i64;
}

Referenced by:

MiGetPage
MiRemovePageAnyColor