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