MiSelectUserAddress

NTSTATUS __stdcall MiSelectUserAddress(
        UINT64 AllocationType,
        UINT64 ZeroBits,
        UINT64 CapturedViewSize,
        UINT64 Alignment,
        UINT64 ProtectionMask,
        UINT64 InternalFlags,
        UINT64 *HINTHonored,
        PVOID *StartingAddress){
  int v8; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  _ETHREAD *CurrentThread; 
  unsigned int v13; 
  __int64 v14; 
  unsigned __int64 v15; 
  __int64 v16; 
  unsigned __int64 v17; 
  int v18; 
  NTSTATUS result; 
  UINT64 *v20; 
  int v21; 
  _QWORD *v24; 
  unsigned __int64 *v25; 
  v8 = AllocationType;
  v21 = 0;
  v10 = ZeroBits;
  *v25 = 0i64;
  v11 = Alignment;
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  *v24 = 0i64;
  v13 = (unsigned int)StartingAddress >> 31;
  v14 = *((_QWORD *)CurrentThread + 23);
  v15 = *(_QWORD *)(v14 + 1496);
  if( CapturedViewSize > v15 - 1 && v15 <= 0x100000000i64 )
    v13 = 2;
  v16 = *(_QWORD *)(v14 + 1680) + 8 * (9i64 * v13 + 6);
  if( (v8 & 0x20400000) != 541065216 && (v8 & 0x20000000) != 0 && Alignment >= 0x40000000 )
  {
    v17 = ProtectionMask;
    if( ProtectionMask == 0x200000 )
    {
      v17 = 0x40000000i64;
      v21 = 1;
    }
  }
  else
  {
    v17 = ProtectionMask;
  }
  v18 = v8 & 0x100000;
  while( 1 )
  {
    if( v18 || (*(_DWORD *)(v14 + 1124) & 0x200000) != 0 )
    {
      result = MiFindEmptyAddressRangeDown(v16, v11, v17, InternalFlags, v10, CapturedViewSize, (char)HINTHonored, v25);
    }
    else
    {
      LODWORD(v20) = (_DWORD)HINTHonored;
      result = MiFindEmptyAddressRange(v16, v11, (PVOID)v17, InternalFlags, v10, (PVOID *)CapturedViewSize, v20);
    }
    if( result >= 0 || v21 != 1 )
      break;
    v11 = Alignment;
    v17 = 0x200000i64;
    v10 = ZeroBits;
    v21 = 0;
  }
  return result;
}

Referenced by:

MiAllocateEnclaveVad
MiAllocateNewSubAllocatedRegion
MiMapLockedPagesInUserSpace
MiMapViewOfDataSection
MiMapViewOfImageSection
MiMapViewOfPhysicalSection
MiReserveUserMemory