KiGetXSaveSupportedFeatures

VOID __stdcall KiGetXSaveSupportedFeatures(_XSTATE_CONFIGURATION *Configuration){
  __int64 v2; 
  unsigned __int32 v3; 
  unsigned int v4; 
  char v5; 
  unsigned __int32 v6; 
  unsigned __int32 v7; 
  __int64 v8; 
  int v9; 
  unsigned int v10; 
  unsigned __int64 v11; 
  unsigned int *p_Size; 
  unsigned int *v13; 
  unsigned int v14; 
  unsigned int i; 
  unsigned int v16; 
  unsigned int ControlFlags; 
  __int32 v18; 
  char v19; 
  __int32 v20; 
  __int64 v21; 
  __int64 v22; 
  __int64 v23; 

  if( (ECX(__cpuid(1, 0)) & 0x4000000) != 0
    && (v2 = __cpuid(13, 0),
        v3 = EAX(v2),
        Configuration->EnabledFeatures = v3 | ((unsigned __int64)(unsigned int)EDX(v2) << 32),
        (v3 & 3) == 3) )
  {
    v4 = 0;
    v8 = __cpuid(13, 1);
    v5 = EAX(v8);
    v7 = ECX(v8);
    v6 = EDX(v8);
    v9 = 0;
    if( (v5 & 0xA) == 10 )
      v9 = 2;
    v10 = Configuration->ControlFlags & 0xFFFFFFFC | v5 & 1 | v9;
    Configuration->ControlFlags = v10;
    if( (v10 & 2) != 0 )
      v11 = v7 | ((unsigned __int64)v6 << 32);
    else
      v11 = 0i64;
    Configuration->EnabledSupervisorFeatures = v11;
    p_Size = &Configuration->Features[0].Size;
    Configuration->Features[0].Offset = 0;
    Configuration->Features[0].Size = 160;
    v13 = &Configuration->Features[2].Size;
    Configuration->Features[1].Offset = 160;
    v14 = 576;
    Configuration->Features[1].Size = 256;
    for( i = 2; i < 0x40; ++i )
    {
      v16 = v14;
      if( ((1i64 << i) & Configuration->EnabledFeatures) != 0 )
      {
        v21 = __cpuid(13, i);
        v18 = EAX(v21);
        v20 = EBX(v21);
        v19 = ECX(v21);
        *(v13 - 1) = v20;
        *v13 = v18;
        v14 = v20 + v18;
        if( v16 >= v20 + v18 )
          v14 = v16;
        if( (v19 & 2) != 0 )
          Configuration->AlignedFeatures |= 1i64 << i;
      }
      v13 += 2;
    }
    ControlFlags = Configuration->ControlFlags;
    Configuration->Size = v14;
    if( (ControlFlags & 2) != 0 )
    {
      v22 = 556i64;
      do
      {
        if( ((1i64 << v4) & Configuration->EnabledSupervisorFeatures) != 0 )
        {
          v23 = __cpuid(13, v4);
          *(_DWORD *)((char *)&Configuration->EnabledFeatures + v22) = EAX(v23);
          if( (ECX(v23) & 2) != 0 )
            Configuration->AlignedFeatures |= 1i64 << v4;
        }
        else
        {
          *(_DWORD *)((char *)&Configuration->EnabledFeatures + v22) = *p_Size;
        }
        ++v4;
        v22 += 4i64;
        p_Size += 2;
      }
      while( v4 < 0x40 );
    }
  }
  else
  {
    Configuration->EnabledFeatures = 0i64;
    Configuration->Size = 0;
  }
}

Referenced by:

KiInitializeXSave