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