WheapReportBootError
UINT8 __stdcall WheapReportBootError(_WHEA_ERROR_PACKET_V2 *BootPacket){
INT64 v1;
UINT64 v2;
void *WheaInfo;
_WHEAP_ERROR_SOURCE *ErrorSource;
INT64 v6;
_WHEAP_ERROR_RECORD_WRAPPER *v7;
void(__fastcall *v8)(INT64, _WHEA_ERROR_PACKET_V2 *, _WHEA_ERROR_RECORD *, _QWORD, _QWORD);
UINT64 RecordLength;
WheaInfo = KeGetPcr()->Prcb.WheaInfo;
if( !WheaInfo )
return 0;
ErrorSource = WheapGetErrorSource(*((_WHEAP_ERROR_SOURCE_TABLE **)WheaInfo + 1), BootPacket->ErrorSourceId, v1, v2);
v6 = (INT64)ErrorSource;
if( !ErrorSource )
return 0;
_InterlockedIncrement(&ErrorSource->ErrorCount);
LODWORD(RecordLength) = 0;
v7 = WheapAllocErrorRecord(ErrorSource, &RecordLength);
if( !v7 )
return 0;
LODWORD(v8) = WheapGetErrorSourceFunction(v6, 2i64, 0);
if( v8 )
v8(v6 + 96, BootPacket, &v7->ErrorRecord, (unsigned int)(RecordLength - 40), *(_QWORD *)(v6 + 56));
_InterlockedDecrement((volatile signed __int32 *)(v6 + 92));
WheapCompressErrorRecord(3ui64, &v7->ErrorRecord);
WheapWorkQueueAddItem(*((_WHEAP_WORK_QUEUE **)WheaInfo + 2), &v7->WorkEntry);
return 1;
}Referenced by:
WheapCheckForAndReportErrorsFromPreviousSession