HalHandleNMI

CHAR __stdcall HalHandleNMI(){
  INT64 *v0; 
  char v1; 
  CHAR result; 
  CHAR v3; 
  INT64 *ErrorSource; 
  dword_140C50698 = 1;
  HalpProcessorInNmiHandler = *((_DWORD *)KeGetPcr() + 105);
  if( !HalpGenericNmiInitDone )
    goto LABEL_7;
  v0 = (INT64 *)HalpGenericNmiErrorSourceListHead;
  v1 = 0;
  if( (INT64 *)HalpGenericNmiErrorSourceListHead == &HalpGenericNmiErrorSourceListHead )
    goto LABEL_7;
  do
  {
    result = HalpCheckAndReportGhes((INT64)v0);
    v0 = (INT64 *)*v0;
    if( result )
      v1 = 1;
  }
  while( v0 != &HalpGenericNmiErrorSourceListHead );
  if( v1 != 1 )
  {
LABEL_7:
    result = __inbyte(0x61u);
    v3 = result;
    if( dword_140C50694 == 1 )
    {
      memset((INT64)&qword_140C506A0, 0i64);
      qword_140C506A0 = 0x341454857i64;
      dword_140C506B0 = 3;
      dword_140C506BC = 3;
      dword_140C506F8 = ((unsigned int)dword_140C506AC >> 2) & 1;
      dword_140C506A8 = 92;
      dword_140C506B4 = 1;
      dword_140C506B8 = HalpNmiInfo;
      xmmword_140C506C0 = (__int128)NMI_NOTIFY_TYPE_GUID;
      dword_140C506D8 = 4;
      dword_140C506E0 = 80;
      dword_140C506E4 = 12;
      byte_140C506F0 = v3;
      ErrorSource = WheapGetErrorSource((INT64)&WheapErrorSourceTable, (unsigned int)HalpNmiInfo);
      PshedRetrieveErrorInfo(
        &qword_140C506A0,
        (unsigned __int64)(ErrorSource + 12) & ((unsigned __int128)-(__int128)(unsigned __int64)ErrorSource >> 64));
      result = WheaReportHwError((_WHEA_ERROR_PACKET_V2 *)&qword_140C506A0);
    }
  }
  HalpProcessorInNmiHandler = 1280;
  return result;
}

Referenced by:

KiProcessNMI