HalpPmemErrorDeferredHandler

VOID *__fastcall HalpPmemErrorDeferredHandler(_DWORD **a1, _DEVICE_OBJECT *a2, _UNICODE_STRING *a3){
  _DWORD *v3; 
  __int64 i; 
  unsigned __int64 v6; 
  unsigned int v7; 
  UINT64 v8; 
  char v9; 
  _LARGE_INTEGER DataBlockObject; 

  v3 = *a1;
  for( i = 0i64; (unsigned int)i < v3[21]; i = (unsigned int)(i + 1) )
  {
    v6 = *(_QWORD *)&v3[6 * i + 24];
    if( v6 > 0x32 )
    {
      *(_QWORD *)&v3[6 * i + 24] = 50i64;
      v6 = 50i64;
    }
    *(_QWORD *)&v3[6 * i + 26] = 0i64;
    v7 = 0;
    v8 = *(_QWORD *)&v3[6 * i + 22];
    if( v6 )
    {
      v9 = 0;
      do
      {
        DataBlockObject.QuadPart = v8 << 12;
        if( MmGetPageBadStatus(&DataBlockObject) || !WheaAttemptPhysicalPageOffline(v8, 0, 1u) )
          *(_QWORD *)&v3[6 * i + 26] |= 1i64 << v9;
        ++v7;
        ++v8;
        v9 = v7;
      }
      while( (unsigned __int64)v7 < *(_QWORD *)&v3[6 * i + 24] );
    }
  }
  if( byte_140C4A110 && qword_140C4A1D8 )
  {
    LOBYTE(a3) = 1;
    qword_140C4A1D8(a1, 0i64, a3);
  }
  return ExFreePoolWithTag(v3, 0x206C6148u);
}

Referenced by:

HalpErrorDeferredHandler