MiAllocateNewSubAllocatedRegion

INT64 __fastcall MiAllocateNewSubAllocatedRegion(INT64 a1, UINT64 a2){
  int v2; 
  unsigned __int64 v3; 
  ULONG_PTR v4; 
  __int64 v5; 
  __int64 v6; 
  INT64 v7; 
  unsigned int v8; 
  INT64 ***v9; 
  UINT64 UserReservationHighestAddress; 
  UINT64 ProtectionMask; 
  unsigned __int64 v12; 
  int VadEventBitmap; 
  int v14; 
  unsigned int v15; 
  INT64 *v16; 
  _DWORD *v17; 
  INT64 **v18; 
  INT64 *v19; 
  UINT64 *HINTHonored; 
  PVOID *StartingAddress; 
  unsigned __int64 v23; 
  _ETHREAD *Thread; 
  __int64 v25; 
  int v26; 
  UINT64 v27; 
  INT64 ***v28; 
  v26 = a1;
  v2 = a1;
  Thread = (_ETHREAD *)KeGetCurrentThread();
  v3 = 512i64;
  v4 = *((_QWORD *)Thread + 23);
  v25 = *(_QWORD *)(v4 + 1680);
  if( a2 <= 0x10 )
  {
    LODWORD(v5) = MiAllocatePool((struct _SLIST_ENTRY *)0x40);
    v6 = v5;
    if( v5 )
    {
      v7 = 32i64;
      v8 = *(_DWORD *)(v5 + 48) & 0xFFFFF27F;
      *(_QWORD *)(v5 + 16) = -2i64;
      *(_QWORD *)(v5 + 40) = 0i64;
      *(_DWORD *)(v5 + 48) = v8 | 0x100200;
      if( v2 != 1 )
        v7 = 0i64;
      v9 = 0i64;
      UserReservationHighestAddress = MiGetUserReservationHighestAddress(v4, v7);
      ProtectionMask = 0x200000i64;
      do
      {
        LODWORD(StartingAddress) = 0x80000000;
        LODWORD(HINTHonored) = (*(_DWORD *)(v6 + 48) >> 7) & 0x1F;
        v12 = v3 << 12;
        v23 = v3;
        v27 = ProtectionMask;
        VadEventBitmap = MiSelectUserAddress(
                           0i64,
                           0i64,
                           UserReservationHighestAddress,
                           v3 << 12,
                           ProtectionMask,
                           0i64,
                           HINTHonored,
                           StartingAddress);
        if( VadEventBitmap >= 0 )
          break;
        if( ProtectionMask != 0x10000 )
          ProtectionMask = 0x10000i64;
        v3 >>= 1;
        if( v27 != 0x10000 )
          v3 = v23;
      }
      while( v3 >= 0x10 );
      if( v3 >= 0x10 )
      {
        *(_BYTE *)(v6 + 32) = 0;
        *(_BYTE *)(v6 + 33) = (v12 - 1) >> 44;
        *(_DWORD *)(v6 + 24) = 0;
        *(_DWORD *)(v6 + 28) = (v12 - 1) >> 12;
        VadEventBitmap = MiCreateVadEventBitmap(v4, v6, v3, 64);
        if( VadEventBitmap < 0 )
        {
LABEL_28:
          ExFreePoolWithTag((PVOID)v6, 0);
          return(unsigned int)VadEventBitmap;
        }
        v28 = MiLocateVadEvent(v6, 64i64) + 1;
        v15 = ExGenRandom((unsigned int)(v14 - 63));
        v16 = (INT64 *)(v28 + 2);
        v28[4] = (INT64 **)v6;
        v28[2] = 0i64;
        *((_DWORD *)v28 + 12) = v26 & 3 ^ (4 * (v15 % v3));
        v28[3] = 0i64;
        *((_DWORD *)v28 + 10) = 0;
        *((_DWORD *)v28 + 11) = v3;
        v17 = MiAddSecureEntry(v6, 0i64, v12 - 1, -2147483647, 0);
        if( v17 )
        {
          VadEventBitmap = MiInsertVadCharges(v6, v4);
          if( VadEventBitmap >= 0 )
          {
            MiLockVad((__int64)Thread, v6);
            MiInsertPrivateVad(v6, v4);
            MiUnlockVad((__int64)Thread, v6);
            LOCK_PAGE_TABLE_COMMITMENT(Thread, (_EPROCESS *)v4);
            v18 = (INT64 **)(v25 + 16 * (v26 + 20i64));
            v19 = *v18;
            if( (INT64 **)(*v18)[1] != v18 )
              __fastfail(3u);
            *v16 = (INT64)v19;
            v28[3] = v18;
            v19[1] = (INT64)v16;
            *v18 = v16;
            UNLOCK_PAGE_TABLE_COMMITMENT((__int64)Thread, v4);
            v9 = v28;
LABEL_13:
            if( VadEventBitmap >= 0 )
              return(unsigned int)VadEventBitmap;
            goto LABEL_24;
          }
        }
        else
        {
          VadEventBitmap = -1073741670;
        }
        v9 = v28;
LABEL_24:
        if( v9 )
          MiFreeVadEventBitmap((_EPROCESS *)v4, (_MMVAD_SHORT *)v6, 0x40ui64);
        if( v17 )
          ExFreePoolWithTag(v17, 0);
        goto LABEL_28;
      }
      v17 = 0i64;
      goto LABEL_13;
    }
  }
  return 3221225495i64;
}

Referenced by:

MiAllocateFromSubAllocatedRegion