MiEmptyWorkingSetInitiate
NTSTATUS __fastcall MiEmptyWorkingSetInitiate(INT64 rcx0, INT8 a2, INT64 a3, INT64 a4){
int v8;
int v9;
UINT64 v10;
bool v11;
char v12;
NTSTATUS v13;
INT64 v15[22];
__int64 v16[24];
memset(v16, 0i64, sizeof(v16));
memset(v15, 0i64, sizeof(v15));
v8 = 0;
LODWORD(v16[1]) = MiTbFlushType((_MMSUPPORT_INSTANCE *)rcx0);
v15[21] = (INT64)v16;
LOWORD(v15[0]) = 6;
v15[19] = (INT64)MiEmptyPte;
v15[20] = (INT64)MiEmptyWorkingSetTail;
v9 = v16[0];
WORD2(v16[1]) = 4;
v16[3] = 0i64;
LODWORD(v16[2]) = 20;
v16[4] = 0i64;
v15[3] = rcx0;
if( (a2 & 1) != 0 )
{
v9 = LODWORD(v16[0]) | 1;
}
else
{
if( (a2 & 2) == 0 )
goto LABEL_5;
v9 = LODWORD(v16[0]) | 2;
}
LODWORD(v16[0]) = v9;
LABEL_5:
if( (a2 & 4) != 0 )
LODWORD(v16[0]) = v9 | 4;
v15[4] = a3;
v15[5] = a4;
MiLockWorkingSetShared();
v11 = (*(_BYTE *)(rcx0 + 184) & 7) == 0;
BYTE6(v15[0]) = v12;
if( v11 && (KeGetCurrentThread()->ApcState.Process->Flags & 0x20) != 0 )
{
v13 = -1073741558;
}
else
{
if( MiWalkPageTables((INT64)v15) == 4 )
v8 = -1073741558;
v13 = v8;
}
LOBYTE(v10) = BYTE6(v15[0]);
MiUnlockWorkingSetShared((_MMSUPPORT_INSTANCE *)rcx0, v10);
return v13;
}Referenced by:
MiEmptyTargetedWorkingSet
MiEmptyWorkingSet
MiEmptyWorkingSetPrivatePagesByVa
MiTrimOrAgeWorkingSet
MmAdjustWorkingSetSizeEx