MiGetHugeRangeFromNode

INT64 __fastcall MiGetHugeRangeFromNode(_QWORD *a1, UINT64 a2, INT64 a3){
  __int64 v3; 
  INT64 v4; 
  __int64 v6; 
  unsigned int v7; 
  __int64 v8; 
  _QWORD *v9; 
  __int64 v10; 
  _QWORD *v11; 
  int v12; 
  _QWORD *v13; 
  __int64 v14; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  UINT64 *SpinLock; 
  int v18; 
  v18 = a3;
  v3 = a1[770];
  v4 = 0i64;
  memset(&LockHandle, 0, sizeof(LockHandle));
  v6 = a1[2] + 4544i64 * (unsigned int)a2;
  if( v3 )
  {
    v7 = dword_140C4DCC0[0];
    v8 = (unsigned int)dword_140C4DCC0[0];
    v9 = (_QWORD *)(v3 + 8i64 * (unsigned int)(2 * a2 * dword_140C4DCC0[0]));
    if( (_DWORD)a3 )
    {
      v10 = 0i64;
    }
    else
    {
      v9 += (unsigned int)dword_140C4DCC0[0];
      v10 = 1i64;
    }
    v11 = 0i64;
    SpinLock = a1 + 516;
    KeAcquireInStackQueuedSpinLock(a1 + 516, &LockHandle);
    while( 1 )
    {
      if( *(_QWORD *)(v6 + 8 * v10 + 4192) )
      {
        v4 &= 0xFFFFFFFFFFFC0000ui64;
        v12 = 0;
        v11 = &v9[*(_DWORD *)(v6 + 4184) % v7];
        if( v7 )
        {
          while( 1 )
          {
            v4 ^= (v4 ^ *v11) & 0x3FFFF;
            if( (v4 & 0x3FFFF) != 0 )
              break;
            v13 = v11 + 1;
            v11 = v9;
            if( v13 != &v9[v8] )
              v11 = v13;
            if( ++v12 >= v7 )
              goto LABEL_14;
          }
          MiUnlinkHugeRange((INT64)a1, v4);
        }
      }
LABEL_14:
      v14 = v4 & 0x3FFFF;
      if( (v4 & 0x3FFFF) != 0 )
        break;
      if( v18 )
      {
        if( v10 )
          goto LABEL_22;
        v9 += v8;
        v10 = 1i64;
      }
      else
      {
        if( v10 != 1 )
          goto LABEL_22;
        v10 = 0i64;
        v9 -= v8;
      }
      v7 = v8;
    }
    *(_DWORD *)(v6 + 4184) = v11 - v9 + 1;
LABEL_22:
    KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
    __writecr8(LockHandle.OldIrql);
    if( v14 && v18 && (*(_DWORD *)(qword_140C4E3B0 + 8 * v14) & 0x3FFFF) == 1i64 )
    {
      MiHugePageOperation(v4);
      KeAcquireInStackQueuedSpinLock(SpinLock, &LockHandle);
      *(_QWORD *)(qword_140C4E3B0 + 8 * v14) &= 0xFFFFFFFFFFFC0000ui64;
      KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
      __writecr8(LockHandle.OldIrql);
    }
  }
  return v4;
}

Referenced by:

MiAllocatePartitionPhysicalPages