MiComputeProcessUserVa

INT64 __fastcall MiComputeProcessUserVa(
        _EPROCESS *ProcessToInitialize,
        _EPROCESS *ProcessToClone,
        _SECTION *Section,
        _MMVAD_SHORT **VadList,
        VOID **NoAccessVa){
  __int64 v5; 
  _QWORD *v8; 
  unsigned __int64 v11; 
  __int64 v12; 
  __int64 v13; 
  INT64 result; 
  __int16 v15; 
  v5 = *((_QWORD *)ProcessToInitialize + 210);
  *VadList = 0i64;
  v8 = (_QWORD *)(v5 + 320);
  v11 = 0x7FFFFFFF0000i64;
  v12 = 2i64;
  do
  {
    v8[1] = v8;
    *v8 = v8;
    v8 += 2;
    --v12;
  }
  while( v12 );
  if( !(unsigned int)MiCreateSystemWsles() && (*((_DWORD *)ProcessToInitialize + 543) & 1) == 0 )
  {
    result = MiChargeFullProcessCommitment((ULONG_PTR)ProcessToInitialize, 4ui64);
    if( (int)result < 0 )
      return result;
    MiUpdateChargedWsles((INT64)ProcessToInitialize + 1664);
  }
  if( !ProcessToClone
    && Section
    && (*((_DWORD *)Section + 14) & 0x20) != 0
    && (*((_DWORD *)ProcessToInitialize + 281) & 0x20000) == 0 )
  {
    if( (*(_BYTE *)(*(_QWORD *)(*(_QWORD *)MiSectionControlArea(Section) + 56i64) + 44i64) & 0x20) != 0 )
    {
      v13 = *((_QWORD *)ProcessToInitialize + 176);
      if( v13 )
      {
        v15 = *(_WORD *)(v13 + 8);
        if( v15 == 332 || v15 == 452 )
        {
          v11 = 4294901760i64;
          *VadList = (_MMVAD_SHORT *)0x100000000i64;
          _InterlockedOr((volatile signed __int32 *)ProcessToInitialize + 281, 0x200u);
        }
      }
    }
    else
    {
      v11 = 2147418112i64;
      *VadList = (_MMVAD_SHORT *)0x100000000i64;
    }
  }
  if( dword_140CFA190 )
  {
    if( v11 > 0x80000000 )
      _InterlockedOr((volatile signed __int32 *)ProcessToInitialize + 281, 0x200000u);
  }
  *((_QWORD *)ProcessToInitialize + 187) = v11;
  return 0i64;
}

Referenced by:

MmInitializeProcessAddressSpace