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