WheapReportBootError
UINT8 __stdcall WheapReportBootError(_WHEA_ERROR_PACKET_V2 *BootPacket){
__int64 v2;
INT64 *ErrorSource;
INT64 v4;
INT64 v5;
void(__fastcall *ErrorSourceFunction)(INT64, _WHEA_ERROR_PACKET_V2 *, INT64, _QWORD, _QWORD);
UINT64 v8;
v2 = *((_QWORD *)KeGetPcr() + 4244);
if( !v2 )
return 0;
ErrorSource = WheapGetErrorSource(*(_QWORD *)(v2 + 8), BootPacket->ErrorSourceId);
v4 = (INT64)ErrorSource;
if( !ErrorSource )
return 0;
_InterlockedIncrement((volatile signed __int32 *)ErrorSource + 6);
LODWORD(v8) = 0;
v5 = WheapAllocErrorRecord((INT64)ErrorSource, &v8);
if( !v5 )
return 0;
ErrorSourceFunction = (void(__fastcall *)(INT64, _WHEA_ERROR_PACKET_V2 *, INT64, _QWORD, _QWORD))WheapGetErrorSourceFunction(v4, 2i64, 0);
if( ErrorSourceFunction )
ErrorSourceFunction(v4 + 96, BootPacket, v5 + 40, (unsigned int)(v8 - 40), *(_QWORD *)(v4 + 56));
_InterlockedDecrement((volatile signed __int32 *)(v4 + 92));
WheapCompressErrorRecord(3ui64, (WHEA_ERROR_RECORD *)(v5 + 40));
WheapWorkQueueAddItem(*(_QWORD *)(v2 + 16), (LIST_ENTRY *)v5);
return 1;
}Referenced by:
WheapCheckForAndReportErrorsFromPreviousSession