HalBugCheckSystem

VOID __stdcall __noreturn HalBugCheckSystem(PWHEA_ERROR_SOURCE_DESCRIPTOR ErrorSource, PWHEA_ERROR_RECORD ErrorRecord){
  unsigned int SectionCount; 
  void *v3; 
  unsigned __int64 BugCheckParameter4; 
  _WHEA_ERROR_RECORD_SECTION_DESCRIPTOR *SectionDescriptor; 
  unsigned int v7; 
  _GUID *p_SectionType; 
  __int64 v9; 
  __int64 v10; 
  unsigned __int64 v11; 

  SectionCount = ErrorRecord->Header.SectionCount;
  v3 = 0i64;
  BugCheckParameter4 = 0i64;
  SectionDescriptor = ErrorRecord->SectionDescriptor;
  v7 = 0;
  if( SectionCount )
  {
    p_SectionType = &SectionDescriptor->SectionType;
    do
    {
      v9 = *(_QWORD *)&p_SectionType->Data1 - *(_QWORD *)&NMI_SECTION_GUID.Data1;
      if( *(_QWORD *)&p_SectionType->Data1 == *(_QWORD *)&NMI_SECTION_GUID.Data1 )
        v9 = *(_QWORD *)p_SectionType->Data4 - *(_QWORD *)NMI_SECTION_GUID.Data4;
      if( v9 )
      {
        v10 = *(_QWORD *)&p_SectionType->Data1 - *(_QWORD *)&XPF_MCA_SECTION_GUID.Data1;
        if( *(_QWORD *)&p_SectionType->Data1 == *(_QWORD *)&XPF_MCA_SECTION_GUID.Data1 )
          v10 = *(_QWORD *)p_SectionType->Data4 - *(_QWORD *)XPF_MCA_SECTION_GUID.Data4;
        if( !v10 )
        {
          v11 = *(_QWORD *)&ErrorRecord->Header.PlatformId.Data4[SectionDescriptor->SectionOffset];
          BugCheckParameter4 = (unsigned int)v11;
          v3 = (void *)HIDWORD(v11);
          break;
        }
      }
      else if( (*((_BYTE *)&ErrorRecord->Header.SignatureEnd + SectionDescriptor->SectionOffset + 2) & 1) == 0 )
      {
        byte_140C49C90 = 1;
        byte_140C4A111 = 1;
        KeBugCheckEx(0x80u, (PVOID)0x4F4454, 0i64, 0i64, 0i64);
      }
      ++SectionDescriptor;
      p_SectionType = (_GUID *)((char *)p_SectionType + 72);
      ++v7;
    }
    while( v7 < SectionCount );
  }
  KeBugCheckEx(0x124u, (PVOID)(int)ErrorSource->Type, ErrorRecord, v3, (PVOID)BugCheckParameter4);
}

Referenced by:

No references.