WheaAddHwErrorReportSectionDeviceDriver
NTSTATUS __fastcall WheaAddHwErrorReportSectionDeviceDriver(INT64 a1, UINT64 a2, INT64 a3){
__int64 v4;
__int64 v5;
INT64 v6;
UINT64 v7;
NTSTATUS v8;
_WHEAP_ERROR_SOURCE *ErrorSource;
__int64 v10;
__int64 v11;
v4 = (unsigned int)a2;
if( !WheapErrorHandleIsValid((_DWORD *)a1) )
return -1073741816;
ErrorSource = WheapGetErrorSource(
(_WHEAP_ERROR_SOURCE_TABLE *)&WheapErrorSourceTable,
*(unsigned int *)(v5 + 12),
v6,
v7);
if( ((unsigned __int64)&ErrorSource->Descriptor & ((unsigned __int128)-(__int128)(unsigned __int64)ErrorSource >> 64)) == 0 )
return -1073741130;
if( *(_DWORD *)(v10 + 4) >= *(_DWORD *)(((unsigned __int64)&ErrorSource->Descriptor & ((unsigned __int128)-(__int128)(unsigned __int64)ErrorSource >> 64))
+ 0x8C)
|| (unsigned int)v4 > *(_DWORD *)(((unsigned __int64)&ErrorSource->Descriptor & ((unsigned __int128)-(__int128)(unsigned __int64)ErrorSource >> 64))
+ 0x88)
|| (unsigned int)(v4 + *(_DWORD *)(v10 + 8)) > *(_DWORD *)(((unsigned __int64)&ErrorSource->Descriptor & ((unsigned __int128)-(__int128)(unsigned __int64)ErrorSource >> 64))
+ 0x10) )
{
return -1073741670;
}
**(_DWORD **)(v10 + 16) ^= ((unsigned __int16)**(_DWORD **)(v10 + 16) ^ (unsigned __int16)(**(_DWORD **)(v10 + 16) + 16)) & 0x3FF0;
v11 = *(_QWORD *)(v10 + 24);
*(_DWORD *)(v11 + 16) = *(_DWORD *)(v10 + 52);
*(_DWORD *)(v11 + 24) = v4;
*(_WORD *)(v11 + 20) = 768;
*(_QWORD *)(a3 + 24) = v11 + 44;
*(_QWORD *)(a3 + 16) = v11;
*(_BYTE *)(v11 + 22) |= 2u;
++*(_DWORD *)(v10 + 4);
*(_QWORD *)(a3 + 32) = v11 + 23;
*(_QWORD *)(a3 + 4) = v11 + 72;
*(_DWORD *)(a3 + 12) = v4;
*(_QWORD *)(v10 + 24) = v11 + 72 + v4;
*(_DWORD *)(v10 + 8) += v4 + 72;
*(_DWORD *)a3 = 1;
return v8;
}Referenced by:
WheaReportFatalHwErrorDeviceDriverEx
WheaReportHwErrorDeviceDriverEx