MiInitializeWorkingSetList
CHAR __fastcall MiInitializeWorkingSetList(INT64 a1, INT64 a2, INT64 a3, INT64 a4){
char v5;
__int64 v6;
_MMPTE *PteBase;
UINT64 v8;
UINT64 v9;
UINT8 v10;
unsigned __int64 v11;
__int64 v13;
v5 = a3 ^ *(_BYTE *)(a1 + 184);
*(_QWORD *)(a1 + 16) = a2;
LOBYTE(v6) = *(_BYTE *)(a1 + 184) ^ v5 & 7;
*(_BYTE *)(a1 + 184) = v6;
if( (_DWORD)a3 )
{
*(_QWORD *)(a1 + 120) = 0i64;
*(_QWORD *)(a1 + 128) = 0i64;
*(_QWORD *)(a1 + 136) = 0i64;
*(_QWORD *)(a1 + 144) = 0i64;
if( (_DWORD)a3 == 1 )
{
*(_BYTE *)(a1 + 184) = v6 | 0x80;
v6 = *(_QWORD *)(a1 + 112) + 6i64;
*(_QWORD *)(a1 + 152) = v6;
}
else
{
*(_QWORD *)(a1 + 152) = a4;
}
}
else
{
*(_QWORD *)(a1 - 392) = 1i64;
PteBase = MmGetPteBase();
v8 = (UINT64)PteBase + (((unsigned __int64)MmGetPxeSelfRef() >> 9) & 0x7FFFFFFFF8i64);
v9 = (UINT64)PteBase + ((v8 >> 9) & 0x7FFFFFFFF8i64);
v10 = MiLockWorkingSetShared(a1);
MiLockPageTableInternal(a1, v9, 0i64);
v11 = *(_QWORD *)v8;
MiPteInShadowRange(v8);
LODWORD(v13) = 0;
MiAllocateWsle(a1, v8, (_QWORD *)MmGetPfnDb() + 6 * ((v11 >> 12) & 0xFFFFFFFFFi64), 0, ZeroPte, v13, 0i64);
MiUnlockPageTableInternal(a1, v9);
LOBYTE(v6) = MiUnlockWorkingSetShared(a1, v10);
}
return v6;
}Referenced by:
MiInitializeSystemWorkingSetList
MmInitializeProcessAddressSpace