WheapAttemptArchitecturalErrorRecovery

NTSTATUS __stdcall WheapAttemptArchitecturalErrorRecovery(_WHEA_ERROR_RECORD *Record){
  NTSTATUS v2; 
  _WHEA_ERROR_PACKET_V2 *ErrPacketFromErrRecord; 
  INT64 v4; 
  UINT64 v5; 
  _WHEAP_ERROR_SOURCE *ErrorSource; 
  __int64 v7; 
  _WHEAP_ERROR_SOURCE *v8; 
  __int64(__fastcall *v9)(__int64, _WHEA_ERROR_SEVERITY *); 
  __int64 v10; 
  _WHEA_ERROR_SEVERITY v12; 

  v12 = WheaErrSevRecoverable;
  v2 = -1073741811;
  ErrPacketFromErrRecord = WheaGetErrPacketFromErrRecord(Record);
  if( ErrPacketFromErrRecord )
  {
    if( ErrPacketFromErrRecord->ErrorSourceType <= (unsigned int)WheaErrSrcTypeDeviceDriver )
    {
      ErrorSource = WheapGetErrorSource(
                      (_WHEAP_ERROR_SOURCE_TABLE *)&WheapErrorSourceTable,
                      ErrPacketFromErrRecord->ErrorSourceId,
                      v4,
                      v5);
      v8 = ErrorSource;
      if( ErrorSource )
      {
        if( *(_QWORD *)(v7 + 48) )
        {
          LODWORD(v9) = WheapGetErrorSourceFunction((INT64)ErrorSource, 3i64, 0);
          if( v9 )
            v2 = v9(v10, &v12);
          else
            v2 = -1073741822;
          _InterlockedDecrement(&v8->Busy);
          Record->Header.Severity = v12;
        }
      }
    }
  }
  return v2;
}

Referenced by:

WheapAttemptErrorRecovery