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