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