WheaHwErrorReportSubmitDeviceDriver
NTSTATUS __stdcall WheaHwErrorReportSubmitDeviceDriver(INT64 BugCheckParameter2){
__int64 v2;
NTSTATUS v3;
INT64 *ErrorSource;
__int64 v5;
int v6;
unsigned __int64 v7;
if( !WheapErrorHandleIsValid((_DWORD *)BugCheckParameter2) )
return -1073741816;
*(_DWORD *)(*(_QWORD *)(v2 + 40) + 8i64) = *(_DWORD *)(BugCheckParameter2 + 8);
ErrorSource = WheapGetErrorSource((INT64)&WheapErrorSourceTable, *(unsigned int *)(BugCheckParameter2 + 12));
v5 = (unsigned __int64)(ErrorSource + 12) & -(__int64)(ErrorSource != 0i64);
if( !v5 )
return -1073741130;
if( (**(_DWORD **)(BugCheckParameter2 + 16) & 0x3FF0u) < 0x10 )
return -1073741789;
v6 = *(_DWORD *)(BugCheckParameter2 + 100);
v7 = (*(_QWORD *)(BugCheckParameter2 + 24) + 7i64) & 0xFFFFFFFFFFFFFFF8ui64;
if( (unsigned int)(v6 + *(_DWORD *)(BugCheckParameter2 + 8)) > *(_DWORD *)(((unsigned __int64)(ErrorSource + 12) & -(__int64)(ErrorSource != 0i64))
+ 0x10) )
return -1073741670;
if( (unsigned int)(v6 - 1) > 0x22 )
{
*(_DWORD *)(v7 + 88) = 0;
}
else
{
memmove(
(UINT8 *)((*(_QWORD *)(BugCheckParameter2 + 24) + 7i64) & 0xFFFFFFFFFFFFFFF8ui64),
(UINT8 *)(BugCheckParameter2 + 64),
*(unsigned int *)(BugCheckParameter2 + 100));
*(_DWORD *)(v7 + 88) = *(_DWORD *)(BugCheckParameter2 + 100);
*(_WORD *)(v7 + 92) = *(_WORD *)(v5 + 60);
}
*(_QWORD *)(v7 + 72) = v5 + 44;
*(_QWORD *)(v7 + 80) = *(_QWORD *)(BugCheckParameter2 + 56);
PshedRetrieveErrorInfo(*(_QWORD *)(BugCheckParameter2 + 40), v5);
v3 = WheaReportHwError(*(_WHEA_ERROR_PACKET_V2 **)(BugCheckParameter2 + 40));
WheapFreeDriverPacketBuffer((PVOID)BugCheckParameter2);
return v3;
}Referenced by:
WheaReportFatalHwErrorDeviceDriverEx
WheaReportHwErrorDeviceDriverEx