KiInitializeXSave

VOID __stdcall KiInitializeXSave(_LOADER_PARAMETER_BLOCK *LoaderBlock, UINT64 ProcessorNumber){
  int v2; 
  _LOADER_PARAMETER_EXTENSION *Extension; 
  unsigned int XsaveFlags; 
  unsigned __int64 XsaveAllowedFeatures; 
  unsigned __int64 v7; 
  unsigned int ControlFlags; 
  __int64 v9; 
  _XSTATE_CONFIGURATION *p_Configuration; 
  _OWORD *v11; 
  __int128 v12; 
  PVOID BugCheckParameter3[2]; 
  _XSTATE_CONFIGURATION Configuration; 

  v2 = ProcessorNumber;
  BugCheckParameter3[0] = 0i64;
  if( !(_DWORD)ProcessorNumber )
    KiParseLoadOptions(LoaderBlock->LoadOptions);
  memset(&Configuration, 0i64, sizeof(Configuration));
  KiGetXSaveSupportedFeatures(&Configuration);
  KiGetIptInfo((unsigned __int32 *)BugCheckParameter3 + 1, BugCheckParameter3);
  if( v2 )
  {
    if( (Configuration.EnabledFeatures & KUSER_SHARED_DATA.XState.EnabledFeatures) != KUSER_SHARED_DATA.XState.EnabledFeatures
      || (Configuration.EnabledSupervisorFeatures & KUSER_SHARED_DATA.XState.EnabledSupervisorFeatures) != KUSER_SHARED_DATA.XState.EnabledSupervisorFeatures
      || (Configuration._bf_0 & 1) == 0 && (KUSER_SHARED_DATA.XState._bf_0 & 1) != 0
      || (Configuration._bf_0 & 2) == 0 && (KUSER_SHARED_DATA.XState._bf_0 & 2) != 0 )
    {
      KeBugCheckEx(0x3Eu, &Configuration, &KUSER_SHARED_DATA.XState, (PVOID)1, 0i64);
    }
    if( ((__int64)BugCheckParameter3[0] & (unsigned int)KiIptMsrMask) != (_DWORD)KiIptMsrMask )
      KeBugCheckEx(
        0x3Eu,
        (PVOID)(unsigned int)KiIptSaveAreaLength,
        (PVOID)(unsigned int)KiIptMsrMask,
        (PVOID)HIDWORD(BugCheckParameter3[0]),
        (PVOID)LODWORD(BugCheckParameter3[0]));
  }
  else
  {
    Extension = LoaderBlock->Extension;
    XsaveFlags = Extension->XsaveFlags;
    if( Configuration.EnabledFeatures )
    {
      XsaveAllowedFeatures = Extension->XsaveAllowedFeatures;
      Configuration.EnabledSupervisorFeatures &= XsaveAllowedFeatures;
      v7 = XsaveAllowedFeatures & Configuration.EnabledFeatures;
      ControlFlags = Configuration.ControlFlags;
      Configuration.EnabledFeatures = v7;
      if( (XsaveFlags & 0x10) == 0 )
      {
        ControlFlags = Configuration.ControlFlags & 0xFFFFFFFD;
        Configuration.ControlFlags &= ~2u;
      }
      if( (XsaveFlags & 8) == 0 )
        Configuration.ControlFlags = ControlFlags & 0xFFFFFFFE;
    }
    KiIntersectFeaturesWithPolicy(LoaderBlock, &Configuration);
    if( *(&stru_140CF2E80 + 937) )
    {
      Configuration.EnabledFeatures &= ~*(&stru_140CF2E80 + 937);
      Configuration.EnabledSupervisorFeatures &= ~*(&stru_140CF2E80 + 937);
    }
    if( *(&stru_140CF2E80 + 7504) )
    {
      Configuration.EnabledFeatures = 0i64;
      Configuration.EnabledSupervisorFeatures = 0i64;
      Configuration.ControlFlags &= 0xFFFFFFFC;
    }
    KiUpdateXSaveSizeAndVolatileFeatures(&Configuration);
    v9 = 6i64;
    p_Configuration = &Configuration;
    v11 = (_OWORD *)(&KUSER_SHARED_DATA + 984);
    do
    {
      *v11 = *(_OWORD *)&p_Configuration->EnabledFeatures;
      v11[1] = *(_OWORD *)&p_Configuration->Size;
      v11[2] = *(_OWORD *)&p_Configuration->Features[1].Offset;
      v11[3] = *(_OWORD *)&p_Configuration->Features[3].Offset;
      v11[4] = *(_OWORD *)&p_Configuration->Features[5].Offset;
      v11[5] = *(_OWORD *)&p_Configuration->Features[7].Offset;
      v11[6] = *(_OWORD *)&p_Configuration->Features[9].Offset;
      v11 += 8;
      v12 = *(_OWORD *)&p_Configuration->Features[11].Offset;
      p_Configuration = (_XSTATE_CONFIGURATION *)((char *)p_Configuration + 128);
      *(v11 - 1) = v12;
      --v9;
    }
    while( v9 );
    *v11 = *(_OWORD *)&p_Configuration->EnabledFeatures;
    v11[1] = *(_OWORD *)&p_Configuration->Size;
    v11[2] = *(_OWORD *)&p_Configuration->Features[1].Offset;
    *((_QWORD *)v11 + 6) = p_Configuration->Features[3];
    if( Configuration.EnabledFeatures )
    {
      KeXStateLength = KUSER_SHARED_DATA.XState.AllFeatureSize;
      KiXSaveAreaLength = KUSER_SHARED_DATA.XState.AllFeatureSize;
    }
    if( (LoaderBlock->Extension->XsaveFlags & 0x20) != 0 )
    {
      KiXSaveAreaLength += HIDWORD(BugCheckParameter3[0]);
      LODWORD(KiIptSaveAreaLength) = HIDWORD(BugCheckParameter3[0]);
      LODWORD(KiIptMsrMask) = BugCheckParameter3[0];
    }
  }
}

Referenced by:

KiSystemStartup