KiInitializeXSave

VOID __stdcall KiInitializeXSave(_LOADER_PARAMETER_BLOCK *LoaderBlock, UINT64 ProcessorNumber){
  int v2; 
  __int64 v4; 
  int v5; 
  __int64 v6; 
  unsigned __int64 v7; 
  unsigned int ControlFlags; 
  __int64 v9; 
  XSTATE_CONFIGURATION *p_BugCheckParameter1; 
  _OWORD *v11; 
  __int128 v12; 
  ULONG_PTR BugCheckParameter3[2]; 
  XSTATE_CONFIGURATION BugCheckParameter1; 
  v2 = ProcessorNumber;
  BugCheckParameter3[0] = 0i64;
  if( !(_DWORD)ProcessorNumber )
    KiParseLoadOptions(*((PSTR *)LoaderBlock + 27));
  memset((INT64)&BugCheckParameter1, 0i64);
  KiGetXSaveSupportedFeatures(&BugCheckParameter1);
  KiGetIptInfo((UINT32 *)BugCheckParameter3 + 1, BugCheckParameter3);
  if( v2 )
  {
    if( (BugCheckParameter1.EnabledFeatures & KUSER_SHARED_DATA.XState.EnabledFeatures) != KUSER_SHARED_DATA.XState.EnabledFeatures
      || (BugCheckParameter1.EnabledSupervisorFeatures & KUSER_SHARED_DATA.XState.EnabledSupervisorFeatures) != KUSER_SHARED_DATA.XState.EnabledSupervisorFeatures
      || (BugCheckParameter1.ControlFlags & 1) == 0 && (KUSER_SHARED_DATA.XState.ControlFlags & 1) != 0
      || (BugCheckParameter1.ControlFlags & 2) == 0 && (KUSER_SHARED_DATA.XState.ControlFlags & 2) != 0 )
    {
      KeBugCheckEx(0x3Eu, (ULONG_PTR)&BugCheckParameter1, 0xFFFFF780000003D8ui64, 1ui64, 0i64);
    }
    if( (BugCheckParameter3[0] & (unsigned int)KiIptMsrMask) != (_DWORD)KiIptMsrMask )
      KeBugCheckEx(
        0x3Eu,
        (unsigned int)KiIptSaveAreaLength,
        (unsigned int)KiIptMsrMask,
        HIDWORD(BugCheckParameter3[0]),
        LODWORD(BugCheckParameter3[0]));
  }
  else
  {
    v4 = *((_QWORD *)LoaderBlock + 30);
    v5 = *(_DWORD *)(v4 + 2840);
    if( BugCheckParameter1.EnabledFeatures )
    {
      v6 = *(_QWORD *)(v4 + 2832);
      BugCheckParameter1.EnabledSupervisorFeatures &= v6;
      v7 = v6 & BugCheckParameter1.EnabledFeatures;
      ControlFlags = BugCheckParameter1.ControlFlags;
      BugCheckParameter1.EnabledFeatures = v7;
      if( (v5 & 0x10) == 0 )
      {
        ControlFlags = BugCheckParameter1.ControlFlags & 0xFFFFFFFD;
        BugCheckParameter1.ControlFlags &= ~2u;
      }
      if( (v5 & 8) == 0 )
        BugCheckParameter1.ControlFlags = ControlFlags & 0xFFFFFFFE;
    }
    KiIntersectFeaturesWithPolicy(LoaderBlock, &BugCheckParameter1);
    if( KeTestRemovedFeatureMask )
    {
      BugCheckParameter1.EnabledFeatures &= ~KeTestRemovedFeatureMask;
      BugCheckParameter1.EnabledSupervisorFeatures &= ~KeTestRemovedFeatureMask;
    }
    if( KeTestDisableXSave )
    {
      BugCheckParameter1.EnabledFeatures = 0i64;
      BugCheckParameter1.EnabledSupervisorFeatures = 0i64;
      BugCheckParameter1.ControlFlags &= 0xFFFFFFFC;
    }
    KiUpdateXSaveSizeAndVolatileFeatures(&BugCheckParameter1);
    v9 = 6i64;
    p_BugCheckParameter1 = &BugCheckParameter1;
    v11 = (_OWORD *)(&KUSER_SHARED_DATA + 984);
    do
    {
      *v11 = *(_OWORD *)&p_BugCheckParameter1->EnabledFeatures;
      v11[1] = *(_OWORD *)&p_BugCheckParameter1->Size;
      v11[2] = *(_OWORD *)&p_BugCheckParameter1->Features[1].Offset;
      v11[3] = *(_OWORD *)&p_BugCheckParameter1->Features[3].Offset;
      v11[4] = *(_OWORD *)&p_BugCheckParameter1->Features[5].Offset;
      v11[5] = *(_OWORD *)&p_BugCheckParameter1->Features[7].Offset;
      v11[6] = *(_OWORD *)&p_BugCheckParameter1->Features[9].Offset;
      v11 += 8;
      v12 = *(_OWORD *)&p_BugCheckParameter1->Features[11].Offset;
      p_BugCheckParameter1 = (XSTATE_CONFIGURATION *)((char *)p_BugCheckParameter1 + 128);
      *(v11 - 1) = v12;
      --v9;
    }
    while( v9 );
    *v11 = *(_OWORD *)&p_BugCheckParameter1->EnabledFeatures;
    v11[1] = *(_OWORD *)&p_BugCheckParameter1->Size;
    v11[2] = *(_OWORD *)&p_BugCheckParameter1->Features[1].Offset;
    *((_QWORD *)v11 + 6) = p_BugCheckParameter1->Features[3];
    if( BugCheckParameter1.EnabledFeatures )
    {
      KeXStateLength = KUSER_SHARED_DATA.XState.AllFeatureSize;
      KiXSaveAreaLength = KUSER_SHARED_DATA.XState.AllFeatureSize;
    }
    if( (*(_DWORD *)(*((_QWORD *)LoaderBlock + 30) + 2840i64) & 0x20) != 0 )
    {
      KiXSaveAreaLength += HIDWORD(BugCheckParameter3[0]);
      LODWORD(KiIptSaveAreaLength) = HIDWORD(BugCheckParameter3[0]);
      LODWORD(KiIptMsrMask) = BugCheckParameter3[0];
    }
  }
}

Referenced by:

KiSystemStartup