KiGetIptInfo

CHAR __fastcall KiGetIptInfo(UINT32 *a1, _DWORD *a2){
  unsigned __int32 CpuVendor; 
  __int64 v5; 
  __int64 v6; 
  __int32 v7; 
  char v8; 
  char v9; 
  __int64 v10; 
  char v11; 
  int v12; 
  __int128 v14; 
  INT32 v15[4]; 
  *a1 = 0;
  *a2 = 0;
  v14 = 0i64;
  *(_OWORD *)v15 = 0i64;
  CpuVendor = KiGetCpuVendor();
  if( CpuVendor == 2 )
  {
    v5 = __cpuid(0, 0);
    CpuVendor = EAX(v5);
    *(_QWORD *)((char *)&v14 + 4) = __PAIR64__(ECX(v5), EBX(v5));
    HIDWORD(v14) = EDX(v5);
    if( CpuVendor >= 0x14 )
    {
      v6 = __cpuid(7, 0);
      *(_QWORD *)((char *)&v14 + 4) = __PAIR64__(ECX(v6), EBX(v6));
      HIDWORD(v14) = EDX(v6);
      if( _bittest((const signed __int32 *)&v14 + 1, 0x19u)
        || (LOBYTE(CpuVendor) = HviGetIptFeatures(v15), (v15[0] & 0xFFFFF000) != 0) )
      {
        *a1 = 16;
        *a2 |= 9u;
        v10 = __cpuid(20, 0);
        v7 = EAX(v10);
        v9 = EBX(v10);
        v8 = ECX(v10);
        if( (v8 & 1) != 0 || (v8 & 4) != 0 )
        {
          *a1 += 16;
          *a2 |= 6u;
        }
        if( (v9 & 1) != 0 )
        {
          *a1 += 8;
          *a2 |= 0x10u;
        }
        if( (v9 & 4) != 0 && v7 )
        {
          v11 = EAX(__cpuid(20, 1));
          if( (v11 & 7u) > 4 )
            v11 = -4;
          v12 = v11 & 7;
          *a1 += 16 * v12;
          *a2 |= (32 << v12) - 32;
        }
        CpuVendor = (*a1 + 63) & 0xFFFFFFC0;
        *a1 = CpuVendor;
      }
    }
  }
  return CpuVendor;
}

Referenced by:

KiInitializeXSave