MmGetPageBadStatus
NTSTATUS __stdcall MmGetPageBadStatus(
PVOID DataBlockObject,
_DEVICE_OBJECT *DeviceObject,
_UNICODE_STRING *InstanceName){
unsigned __int64 v3;
volatile signed __int64 *v4;
unsigned __int64 v5;
NTSTATUS v6;
v3 = *(_QWORD *)DataBlockObject >> 12;
if( v3 > 0xFFFFFFFFFi64 || (*((_QWORD *)MmGetPfnDb() + 6 * v3 + 5) & 0x4000000000000i64) == 0 )
return -1073741585;
v4 = (volatile signed __int64 *)((char *)MmGetPfnDb() + 48 * v3);
v5 = (unsigned __int8)MiLockPageInline((INT64)v4);
if( MiIsPageOnBadList((INT64)v4) )
{
v6 = -1073740023;
}
else
{
v6 = 0;
if( (*((_BYTE *)v4 + 35) & 0x40) != 0 )
v6 = 259;
}
_InterlockedAnd64(v4 + 3, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v5);
return v6;
}Referenced by:
HalpPmemErrorDeferredHandler
WheapPersistPageForMemoryError
WheapPfaMemoryCheck