MmGetPageBadStatus
NTSTATUS __stdcall MmGetPageBadStatus(_LARGE_INTEGER *PhysicalAddress){
unsigned __int64 v1;
_MMPFN *v2;
unsigned __int64 v3;
int v4;
NTSTATUS v5;
v1 = (unsigned __int64)PhysicalAddress->QuadPart >> 12;
if( v1 > 0xFFFFFFFFFi64 || (MmGetPfnDb()[v1].u4._bf_0 & 0x4000000000000i64) == 0 )
return -1073741585;
v2 = &MmGetPfnDb()[v1];
v3 = MiLockPageInline(v2);
LOBYTE(v4) = MiIsPageOnBadList((INT64)v2);
if( v4 )
{
v5 = -1073740023;
}
else
{
v5 = 0;
if( (*((_BYTE *)&v2->u3 + 3) & 0x40) != 0 )
v5 = 259;
}
_InterlockedAnd64(&v2->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v3);
return v5;
}Referenced by:
HalpPmemErrorDeferredHandler
WheapPersistPageForMemoryError
WheapPfaMemoryCheck