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