KiDetectKvaLeakage

CHAR __fastcall KiDetectKvaLeakage(INT64 a1){
  __int64 v2; 
  __int64 v3; 
  char v4; 
  __int64 v5; 
  char v6; 
  char v7; 
  bool v8; 
  __int64 v9; 
  int v10; 
  INT64 v12[3]; 
  LODWORD(v12[0]) = 0;
  LODWORD(v2) = KiIsKvaShadowNeededForBranchConfusion(a1);
  if( (_DWORD)v2 )
    goto LABEL_19;
  LODWORD(v2) = *(unsigned __int8 *)(a1 + 141);
  if( (_BYTE)v2 == 2 )
  {
    if( *(_BYTE *)(a1 + 64) == 6 )
    {
      v2 = *(unsigned __int8 *)(a1 + 67);
      if( (unsigned __int8)v2 <= 0x36u )
      {
        v3 = 0x6000C010000000i64;
        if( _bittest64(&v3, v2) )
          return v2;
      }
    }
  }
  else if( (_BYTE)v2 != 3 || *(_BYTE *)(a1 + 64) == 6 && *(_BYTE *)(a1 + 67) == 13 )
  {
    return v2;
  }
  LODWORD(v2) = EAX(__cpuid(0, 0));
  v4 = 0;
  if( (unsigned int)v2 < 7 )
    goto LABEL_18;
  v5 = __cpuid(7, 0);
  LOBYTE(v2) = EAX(v5);
  if( (EDX(v5) & 0x20000000) != 0 )
  {
    v2 = __readmsr(0x10Au);
    v4 = v2;
  }
  if( (v4 & 1) == 0 )
    goto LABEL_18;
  KiMicrocodeTrackerEnabled = 1;
  LOBYTE(v2) = 0;
  v6 = (KeFeatureBits2 & 0x28) == 8;
  if( (KeFeatureBits2 & 0x380000) != 3670016 )
  {
    LOBYTE(v2) = KiIsFbClearSupported();
    v6 = v2 | v7;
  }
  if( v6 )
  {
LABEL_18:
    if( *(_DWORD *)(a1 + 36) && !KiKvaLeakage )
      KeBugCheckEx(0x5Du, 0x4B56414Cui64, 0i64, 0i64, 0i64);
LABEL_19:
    v8 = *(_BYTE *)(a1 + 141) == 2;
    KiKvaLeakage = 1;
    if( !v8 || (KeFeatureBits2 & 0x10) != 0 )
    {
      if( !*(_DWORD *)(a1 + 36) )
        KiImplementedPhysicalBits = -1;
    }
    else
    {
      LOBYTE(v2) = HvlGetImplementedPhysicalBits(v12);
      if( (_BYTE)v2 )
      {
        v10 = v12[0];
      }
      else
      {
        v9 = 0i64;
        v2 = 0i64;
        v10 = 46;
        while( *(int *)((char *)KiCpuTable + v2) != *(unsigned __int8 *)(a1 + 141)
             || *(int *)((char *)&KiCpuTable[1] + v2) != *(_DWORD *)(a1 + 1736) )
        {
          ++v9;
          v2 = 20 * v9;
          if( KiCpuTable[5 * v9 + 2] == 19 )
            goto LABEL_33;
        }
        LOBYTE(v2) = 5 * v9;
        v10 = KiCpuTable[5 * v9 + 3];
        if( !v10 )
        {
          if( (unsigned int)EAX(__cpuid(0x80000000, 0)) < 0x80000008 )
            LOBYTE(v2) = 36;
          else
            LOBYTE(v2) = EAX(__cpuid(-2147483640, 0));
          v10 = (unsigned __int8)v2;
        }
      }
LABEL_33:
      if( *(_DWORD *)(a1 + 36) )
      {
        LOBYTE(v2) = KiImplementedPhysicalBits;
        if( v10 != KiImplementedPhysicalBits && !KiKvaLeakageSimulate )
          KeBugCheckEx(0x5Du, 0x4C315446ui64, *(unsigned int *)(a1 + 36), v10, KiImplementedPhysicalBits);
      }
      else
      {
        KiImplementedPhysicalBits = v10;
      }
    }
  }
  return v2;
}

Referenced by:

KiSetFeatureBits