WheapAttemptArchitecturalErrorRecovery

NTSTATUS __stdcall WheapAttemptArchitecturalErrorRecovery(WHEA_ERROR_RECORD *Record){
  NTSTATUS v2; 
  _WHEA_ERROR_PACKET_V2 *ErrPacketFromErrRecord; 
  INT64 *ErrorSource; 
  __int64 v5; 
  INT64 *v6; 
  __int64(__fastcall *ErrorSourceFunction)(__int64, _WHEA_ERROR_SEVERITY *); 
  __int64 v8; 
  _WHEA_ERROR_SEVERITY v10; 
  v10 = WheaErrSevRecoverable;
  v2 = -1073741811;
  ErrPacketFromErrRecord = WheaGetErrPacketFromErrRecord(Record);
  if( ErrPacketFromErrRecord )
  {
    if( ErrPacketFromErrRecord->ErrorSourceType <= (unsigned int)WheaErrSrcTypeDeviceDriver )
    {
      ErrorSource = WheapGetErrorSource((INT64)&WheapErrorSourceTable, ErrPacketFromErrRecord->ErrorSourceId);
      v6 = ErrorSource;
      if( ErrorSource )
      {
        if( *(_QWORD *)(v5 + 48) )
        {
          ErrorSourceFunction = (__int64(__fastcall *)(__int64, _WHEA_ERROR_SEVERITY *))WheapGetErrorSourceFunction(
                                                                                           (INT64)ErrorSource,
                                                                                           3i64,
                                                                                           0);
          if( ErrorSourceFunction )
            v2 = ErrorSourceFunction(v8, &v10);
          else
            v2 = -1073741822;
          _InterlockedDecrement((volatile signed __int32 *)v6 + 23);
          Record->Header.Severity = v10;
        }
      }
    }
  }
  return v2;
}

Referenced by:

WheapAttemptErrorRecovery