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