MmUpdateOldWorkingSetPages
VOID __fastcall MmUpdateOldWorkingSetPages(_EPROCESS *Process, UINT64 Priority, UINT64 Flags){
char v3;
int v4;
int v6;
int v7;
_KTBFLUSH_TYPE v8;
bool v9;
char v10;
UINT64 v11;
__int64 v12[28];
INT64 v13[22];
_KAPC_STATE ApcState;
int v15[68];
v3 = Flags;
v4 = Priority;
memset(&ApcState, 0, sizeof(ApcState));
memset(v12, 0i64, 0xD8u);
memset(v13, 0i64, sizeof(v13));
memset(v15, 0i64, 0x108u);
if( KeGetCurrentThread()->ApcState.Process == Process )
{
v6 = 0;
}
else
{
v6 = 1;
KiStackAttachProcess(Process, 0i64, &ApcState);
}
v7 = v12[0];
if( (v3 & 2) != 0 )
{
v7 = LODWORD(v12[0]) | 1;
LODWORD(v12[0]) |= 1u;
}
if( (v3 & 1) != 0 )
LODWORD(v12[0]) = v7 | 2;
HIDWORD(v12[0]) = v4;
v12[4] = 20i64;
v8 = MiTbFlushType(&Process->Vm.Instance);
v9 = (Process->Vm.Instance.Flags._bf_0 & 7) == 0;
LODWORD(v12[3]) = v8;
WORD2(v12[3]) = 4;
v12[5] = 0i64;
v12[6] = 0i64;
if( v9 && Process->VmContext )
{
v15[1] = 32;
v12[26] = (__int64)v15;
}
v13[5] = -1i64;
v13[21] = (INT64)v12;
LOWORD(v13[0]) = 6;
v13[19] = (INT64)MiUpdateOldPte;
BYTE4(v13[0]) = 6;
v13[20] = (INT64)MiUpdateOldWorkingSetPagesTail;
v13[3] = (INT64)&Process->Vm;
MiLockWorkingSetShared();
LOBYTE(v11) = v10;
BYTE6(v13[0]) = v10;
if( (Process->Flags & 0x20) == 0 )
{
v12[1] = Process->Vm.Instance.AgeDistribution[6];
if( v12[1] )
{
MiWalkPageTables((INT64)v13);
LOBYTE(v11) = BYTE6(v13[0]);
}
}
MiUnlockWorkingSetShared(&Process->Vm.Instance, v11);
if( v6 == 1 )
KiUnstackDetachProcess(&ApcState, 0i64);
}Referenced by:
PfpDeprioritizeOldPagesInWs