MiReleaseInPageRefs
VOID __stdcall MiReleaseInPageRefs(_MMPFN *Pfn1){
unsigned __int64 v2;
_UNICODE_STRING *v3;
UINT8 v4;
PWCHAR v5;
int v6;
UINT64 v7;
union {unsigned __int64 Long;volatile unsigned __int64 VolatileLong;_MMPTE_HARDWARE Hard;_MMPTE_PROTOTYPE Proto;_MMPTE_SOFTWARE Soft;_MMPTE_TIMESTAMP TimeStamp;_MMPTE_TRANSITION Trans;_MMPTE_SUBSECTION Subsect;_MMPTE_LIST List;} v8;
MiLockAndDecrementShareCount(&MmGetPfnDb()[Pfn1->u4._bf_0 & 0xFFFFFFFFFi64], 0i64);
v2 = MiLockPageInline(Pfn1);
Pfn1->u2._bf_0 |= 0x4000000000000000ui64;
LOBYTE(v6) = MI_PFN_IS_PROTO((_UNICODE_STRING *)Pfn1, v3, v4, v5);
if( v6 && (*(_DWORD *)(&Pfn1->3 + 1) & 0x400i64) != 0 )
{
_InterlockedAnd64(&Pfn1->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v2);
v8.Long = (unsigned __int64)Pfn1->OriginalPte.u;
if( *(&stru_140C4DB30 + 42) )
{
if( (v8.Long & 0x10) == 0 )
v8.Long &= ~*(&stru_140C4DB30 + 42);
}
MiDereferenceControlAreaPfnList(
*(_CONTROL_AREA **)(v8.Hard._bf_0 >> 16),
(_SUBSECTION *)(v8.Hard._bf_0 >> 16),
v7,
3ui64);
}
else
{
Pfn1->OriginalPte.u.Long &= 0xFFFFFFFFFFFFFFF9ui64;
_InterlockedAnd64(&Pfn1->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v2);
}
}Referenced by:
MiInvalidateCollidedIos