MiMakeSystemRangeAvailable

NTSTATUS __stdcall MiMakeSystemRangeAvailable(PVOID BugCheckParameter2, PVOID BugCheckParameter3){
  unsigned int v2; 
  void *BugCheckParameter4; 
  unsigned __int64 v4; 
  INT64 *v7; 
  _RTL_BITMAP_EX *v8; 
  unsigned __int64 v9; 
  unsigned __int8 v10; 
  NTSTATUS result; 
  unsigned __int64 *Buffer; 
  unsigned __int64 *v13; 
  unsigned __int64 v14; 
  unsigned __int64 *v15; 
  INT64 v16; 
  bool i; 
  __int128 v18; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  BugCheckParameter4 = (void *)(int)v2;
  v4 = (unsigned __int64)BugCheckParameter3 >> 21;
  memset(&LockHandle, 0, sizeof(LockHandle));
  v18 = 0i64;
  if( v2 == 1 )
  {
    MiReleaseSessionVa(BugCheckParameter2, (unsigned int)v4);
    return result;
  }
  if( v2 == 5 )
    v7 = (INT64 *)(*(&stru_140C4DB30 + 22) + 176i64 * (unsigned int)MiNonPagedPoolToNode(BugCheckParameter2) + 64);
  else
    v7 = MiSystemVaToDynamicBitmap(v2);
  v8 = (_RTL_BITMAP_EX *)v7;
  v9 = ((unsigned __int64)BugCheckParameter2 - v7[4]) >> 21;
  if( (_DWORD)BugCheckParameter4 == 13 )
  {
    v8 = (_RTL_BITMAP_EX *)&v18;
    v16 = v7[2];
    *((_QWORD *)&v18 + 1) = v7[1];
    *(_QWORD *)&v18 = v16;
  }
  KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)v7 + 8, &LockHandle);
  if( v9 >= v8->SizeOfBitMap )
    goto LABEL_31;
  if( v4 > 1 )
  {
    if( v8->SizeOfBitMap - v9 >= v4 )
    {
      Buffer = v8->Buffer;
      v13 = &Buffer[v9 >> 6];
      v14 = *v13;
      v15 = &Buffer[(v9 + v4 - 1) >> 6];
      if( v13 != v15 )
      {
        for( i = ((-1i64 << v9) & v14) == -1i64 << v9; ; i = *v13 == -1i64 )
        {
          if( !i )
            goto LABEL_31;
          if( ++v13 == v15 )
            break;
        }
        if( ((0xFFFFFFFFFFFFFFFFui64 >> ~((unsigned __int8)v9 + (unsigned __int8)v4 - 1)) & *v13) == 0xFFFFFFFFFFFFFFFFui64 >> ~((unsigned __int8)v9 + (unsigned __int8)v4 - 1) )
          goto LABEL_11;
        v10 = 0;
        goto LABEL_10;
      }
      if( ((0xFFFFFFFFFFFFFFFFui64 >> (64 - (unsigned __int8)v4) << v9) & v14) == 0xFFFFFFFFFFFFFFFFui64 >> (64 - (unsigned __int8)v4) << v9 )
        goto LABEL_11;
    }
LABEL_31:
    KeBugCheckEx(0x1Au, (PVOID)0x2104, BugCheckParameter2, BugCheckParameter3, BugCheckParameter4);
  }
  if( v4 != 1 )
    goto LABEL_31;
  v10 = _bittest64((const signed __int64 *)v8->Buffer, v9);
LABEL_10:
  if( !v10 )
    goto LABEL_31;
LABEL_11:
  RtlClearBitsEx(v8, v9, v4);
  if( (_DWORD)BugCheckParameter4 == 13 )
  {
    LODWORD(BugCheckParameter4) = 9;
    if( v9 < v7[6] )
      v7[6] = v9;
  }
  else if( v9 < v7[3] )
  {
    v7[3] = v9;
  }
  _InterlockedExchangeAdd64((volatile signed __int64 *)&stru_140C4DB30 + (int)BugCheckParameter4 + 875, -(__int64)v4);
  if( (_DWORD)BugCheckParameter4 == 8 )
    *(&stru_140C4DB30 + 75) += BugCheckParameter3;
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  result = KiIrqlFlags;
  __writecr8(LockHandle.OldIrql);
  return result;
}

Referenced by:

MiReturnSystemVa