MiInitializeProcessBottomUpEntropy
VOID __stdcall MiInitializeProcessBottomUpEntropy(_EPROCESS *NewProcess){
unsigned int MitigationFlags;
unsigned int v2;
_MMWSL_INSTANCE *VmWorkingSetList;
char v5;
unsigned __int64 v6;
int v7;
__int64 v8;
unsigned __int64 v9;
__int64 v10;
__int64 v11;
unsigned __int64 v12;
unsigned __int64 v13;
__int64 v14;
__int64 v15;
UINT64 v16;
MitigationFlags = NewProcess->MitigationFlags;
v2 = 0;
VmWorkingSetList = NewProcess->Vm.Instance.VmWorkingSetList;
v16 = 0i64;
v5 = 0;
v15 = 1i64;
v6 = 2i64;
if( (MitigationFlags & 0x40) != 0 )
goto LABEL_20;
v7 = ExGenRandom(ExGenRandomDomainUserVisible);
v8 = (unsigned __int8)v7;
if( !(_DWORD)InitializationPhase )
NewProcess->MitigationFlags |= 0x20u;
if( NewProcess->HighestUserAddress > (void *)0x100000000i64 && (NewProcess->MitigationFlags & 0x20) != 0 )
{
v9 = *(_QWORD *)&v7 & 0xFFFFFFi64;
v8 = 0x10000i64;
v5 = 1;
if( v9 > 0x10000 )
v8 = v9;
}
if( !v8 )
v8 = 1i64;
v15 = v8;
if( !v5 )
{
LABEL_20:
_InterlockedAnd((volatile signed __int32 *)&NewProcess->2512, 0xFFFFFFDF);
v8 = v15;
}
if( v5 == 1 )
v14 = v8 + (ExGenRandom(ExGenRandomDomainUserVisible) & 0xFFFFFF) + 0x1000000;
else
v14 = v8;
if( NewProcess->HighestUserAddress <= (void *)0x100000000i64 )
{
v6 = 3i64;
v16 = (ExGenRandom(ExGenRandomDomainUserVisible) & 0xFFFFFF) + 0x10000;
}
*(_QWORD *)&VmWorkingSetList[6].LastAccessClearingRemainder = v6;
v10 = 0i64;
do
{
v11 = 9 * v10;
v12 = (unsigned __int64)NewProcess->HighestUserAddress - 1;
if( v2 == 2 )
v12 = 0x7FFFFFFEFFFFi64;
++v2;
(&VmWorkingSetList[2].NextPteToAge)[9 * v10] = (_MMPTE *)(v12 >> 16);
v13 = *(&v14 + v10);
*(&VmWorkingSetList[2].LockedEntries + 9 * v10) = v13;
v10 = v2;
*((_QWORD *)&VmWorkingSetList[2].LastAccessClearingRemainder + v11) = v13 << 16;
}
while( v2 < v6 );
}Referenced by:
MmInitializeProcessAddressSpace