MiAllocateVad

_MMVAD_SHORT *__stdcall MiAllocateVad(VOID *StartingVirtualAddress, VOID *EndingVirtualAddress){
  char v2; 
  char v4; 
  _MMVAD_SHORT *Pool; 
  _MMVAD_SHORT *v7; 
  union {unsigned int LongFlags;_MMVAD_FLAGS VadFlags;_MM_PRIVATE_VAD_FLAGS PrivateVadFlags;_MM_GRAPHICS_VAD_FLAGS GraphicsVadFlags;_MM_SHARED_VAD_FLAGS SharedVadFlags;volatile unsigned int VolatileVadLong;} v8; 
  unsigned int v9; 
  unsigned __int64 v10; 
  int v11; 

  v4 = v2;
  Pool = (_MMVAD_SHORT *)MiAllocatePool(64i64, 0x40ui64, 0x53646156ui64);
  v7 = Pool;
  if( Pool )
  {
    v8.LongFlags = (unsigned int)Pool->u;
    Pool->PushLock._bf_0 = 0i64;
    Pool->StartingVpn = (unsigned __int64)StartingVirtualAddress >> 12;
    v9 = v8.LongFlags & 0xFFFFF07F | 0x80;
    Pool->StartingVpnHigh = (unsigned __int64)StartingVirtualAddress >> 44;
    Pool->VadNode.ParentValue = -2i64;
    Pool->EndingVpn = (unsigned __int64)EndingVirtualAddress >> 12;
    Pool->EndingVpnHigh = (unsigned __int64)EndingVirtualAddress >> 44;
    if( (v4 & 1) != 0 )
    {
      v10 = ((unsigned int)((unsigned __int64)EndingVirtualAddress >> 12) | ((unsigned __int64)(unsigned __int8)((unsigned __int64)EndingVirtualAddress >> 44) << 32))
          - ((unsigned int)((unsigned __int64)StartingVirtualAddress >> 12) | ((unsigned __int64)(unsigned __int8)((unsigned __int64)StartingVirtualAddress >> 44) << 32))
          + 1;
      Pool->u1.LongFlags1 |= 0x80000000;
    }
    else if( (v4 & 2) != 0 )
    {
      v10 = 0x7FFFFFFFDi64;
      v9 = v9 & 0xFFFFF07F | 0xC00;
    }
    else
    {
      v10 = 0x7FFFFFFFFi64;
    }
    v11 = v10 ^ Pool->u1.LongFlags1;
    v7->u.LongFlags = v9 | 0x100000;
    v7->u1.LongFlags1 ^= v11 & 0x7FFFFFFF;
    v7->CommitChargeHigh = v10 >> 31;
    if( (v4 & 2) != 0
      || MiAddSecureEntry(
           (_MI_PARTITION *)v7,
           (__int64)StartingVirtualAddress,
           (__int64)EndingVirtualAddress,
           -2147483647,
           0) )
    {
      return v7;
    }
    ExFreePoolWithTag(v7, 0);
  }
  return 0i64;
}

Referenced by:

MiAllocateProcessVads
MiCreatePlaceholderStorage
MiFreeVadRange