MiMarkFileOnlyPfnBad
NTSTATUS __stdcall MiMarkFileOnlyPfnBad(ULONG_PTR Pfn1, UINT64 Flags){
unsigned int v2;
INT64 v3;
UINT8 v4;
int v5;
_UNICODE_STRING *v6;
UINT8 v7;
wchar_t *v8;
int v9;
_MMPFN *v10;
char v11;
char v13;
UINT8 v14;
v2 = Flags;
v3 = *(_QWORD *)&Pfn1;
v4 = MiLockPageInline(*(_MMPFN **)&Pfn1);
if( (*(_QWORD *)(v3 + 40) & 0x2000000000000i64) != 0
&& (LOBYTE(v5) = MiIsPfnFileOnly(v3), v5)
&& (LOBYTE(v9) = MI_PFN_IS_PROTO((_UNICODE_STRING *)v3, v6, v7, v8), v9)
&& (*(_DWORD *)(v3 + 16) & 0x400i64) != 0 )
{
if( (v2 & 0x10000000) != 0 )
{
v11 = *(_BYTE *)(v3 + 35);
if( v11 >= 0 )
*(_BYTE *)(v3 + 35) = v11 | 0x80;
}
if( (*(_BYTE *)(v3 + 35) & 0x40) == 0 )
{
if( *(_WORD *)(v3 + 32) || (*(_BYTE *)(v3 + 34) & 7u) - 2 > 1 )
{
MiSetPfnRemovalRequested((INT64)v10, 1i64);
if( (*(_BYTE *)(v3 + 34) & 7) == 6 )
MiTrimSharedPage((_MMPFN *)v3, v4, v2);
}
else
{
MiUnlinkPageFromList(v10, 0i64);
v13 = *(_BYTE *)(v3 + 34);
if( (v13 & 0x10) != 0 )
{
if( *(char *)(v3 + 35) >= 0 )
{
MiPersistPage((v3 - (__int64)MmGetPfnDb()) / 48);
v13 = *(_BYTE *)(v3 + 34);
}
*(_BYTE *)(v3 + 34) = v13 & 0xEF;
}
MiSetPfnRemovalRequested(v3, 1i64);
MiInsertPageInList((_MMPFN *)v3, 4ui64, v14);
}
v10 = (_MMPFN *)v3;
}
MiUnlockPage(v10, v4);
return 259;
}
else
{
MiUnlockPage((_MMPFN *)v3, v4);
return -1073740748;
}
}Referenced by:
MmMarkPhysicalMemoryAsBad