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