HalpReadGenericErrorInfo

NTSTATUS __stdcall HalpReadGenericErrorInfo(INT64 a1){
  _LARGE_INTEGER *v2; 
  _DWORD *v3; 
  _DWORD *v4; 

  v2 = *(_LARGE_INTEGER **)(a1 + 40);
  if( v2->QuadPart != -1 )
  {
    v3 = *(_DWORD **)(a1 + 56);
    if( v3
      || (v4 = MmMapIoSpaceEx(*v2, *(unsigned int *)(a1 + 48), 0x204ui64), *(_QWORD *)(a1 + 56) = v4, (v3 = v4) != 0i64) )
    {
      if( (*v3 & 2) != 0 )
      {
        HalpExtractGenericErrorData(a1);
        if( *(_DWORD *)(a1 + 96) != 12 )
        {
          *v3 &= ~2u;
          return 0;
        }
LABEL_9:
        *v3 = 0;
        return 0;
      }
      if( (*v3 & 1) != 0 )
      {
        HalpExtractGenericErrorData(a1);
        if( *(_DWORD *)(a1 + 96) != 12 )
        {
          *v3 &= ~1u;
          return 0;
        }
        goto LABEL_9;
      }
    }
  }
  return -1073741275;
}

Referenced by:

HalpCheckAndReportGhes