KiUpdateXSaveSizeAndVolatileFeatures

VOID __stdcall KiUpdateXSaveSizeAndVolatileFeatures(_XSTATE_CONFIGURATION *Conf){
  unsigned __int64 EnabledFeatures; 
  unsigned int v2; 
  __int64 v4; 
  unsigned __int64 k; 
  unsigned int v6; 
  unsigned __int64 v7; 
  unsigned int v8; 
  unsigned __int64 v9; 
  unsigned __int64 i; 
  unsigned int Size; 
  unsigned __int64 v12; 
  unsigned __int64 j; 
  unsigned int AllFeatureSize; 

  EnabledFeatures = Conf->EnabledFeatures;
  Conf->Size = 576;
  v2 = 2;
  Conf->AllFeatureSize = 576;
  if( (Conf->ControlFlags & 2) != 0 )
  {
    v8 = 2;
    v9 = Conf->AlignedFeatures >> 2;
    for( i = EnabledFeatures >> 2; i; i >>= 1 )
    {
      if( v8 >= 0x40 )
        break;
      if( (i & 1) != 0 )
      {
        Size = Conf->Size;
        if( (v9 & 1) != 0 )
        {
          Size = (Size + 63) & 0xFFFFFFC0;
          Conf->Size = Size;
        }
        Conf->Features[v8].Offset = Size;
        Conf->Size += Conf->Features[v8].Size;
      }
      v9 >>= 1;
      ++v8;
    }
    EnabledFeatures = Conf->EnabledFeatures;
    v12 = (Conf->EnabledFeatures | Conf->EnabledSupervisorFeatures) >> 2;
    for( j = Conf->AlignedFeatures >> 2; v12; v12 >>= 1 )
    {
      if( v2 >= 0x40 )
        break;
      if( (v12 & 1) != 0 )
      {
        AllFeatureSize = Conf->AllFeatureSize;
        if( (j & 1) != 0 )
        {
          AllFeatureSize = (AllFeatureSize + 63) & 0xFFFFFFC0;
          Conf->AllFeatureSize = AllFeatureSize;
        }
        Conf->AllFeatureSize = AllFeatureSize + Conf->AllFeatures[v2];
      }
      j >>= 1;
      ++v2;
    }
  }
  else
  {
    v4 = 0i64;
    for( k = EnabledFeatures; k; k >>= 1 )
    {
      if( (unsigned int)v4 >= 0x40 )
        break;
      if( (k & 1) != 0 )
      {
        v6 = Conf->Features[v4].Size + Conf->Features[v4].Offset;
        if( Conf->Size < v6 )
          Conf->Size = v6;
      }
      v4 = (unsigned int)(v4 + 1);
    }
    Conf->AllFeatureSize = Conf->Size;
  }
  v7 = Conf->EnabledSupervisorFeatures & 0x800;
  Conf->EnabledVolatileFeatures = EnabledFeatures & 0xBFFFFFFFFFFFFFEFui64;
  Conf->EnabledUserVisibleSupervisorFeatures = v7;
}

Referenced by:

KiInitializeXSave