KiIntersectFeaturesWithPolicy

VOID __stdcall KiIntersectFeaturesWithPolicy(
        _LOADER_PARAMETER_BLOCK *LoaderBlock,
        _XSTATE_CONFIGURATION *Configuration){
  unsigned int v3; 
  __int64 v4; 
  struct _KPRCB *CurrentPrcb; 
  unsigned __int64 EnabledSupervisorFeatures; 
  unsigned __int64 EnabledFeatures; 
  unsigned __int64 v8; 
  char *v9; 
  __int64 v10; 
  unsigned int v11; 
  unsigned int v12; 
  _DWORD *v13; 
  char IsXSaveFeatureAllowed; 
  UINT64 ProcessorFeatures; 
  UINT64 ExtendedFeatures; 
  PVOID Policy; 
  UINT64 PolicyLength; 
  unsigned __int64 v19; 
  UINT64 Vendor[2]; 
  _LARGE_INTEGER UpdateSignature; 

  v3 = 0;
  UpdateSignature.QuadPart = 0i64;
  v4 = 0i64;
  LODWORD(ExtendedFeatures) = 0;
  *(_OWORD *)Vendor = 0i64;
  LODWORD(ProcessorFeatures) = 0;
  Policy = 0i64;
  PolicyLength = 0i64;
  if( Configuration->EnabledFeatures )
  {
    if( KiLoadPolicyFromImage(LoaderBlock, &Policy, &PolicyLength) == -1073741204 )
    {
      Configuration->ControlFlags &= 0xFFFFFFFC;
      Configuration->EnabledFeatures = 0i64;
      Configuration->EnabledSupervisorFeatures = 0i64;
    }
    else
    {
      KiGetProcessorInformation(Vendor, (UINT64 *)((char *)&Vendor[1] + 4), &ExtendedFeatures, &ProcessorFeatures);
      CurrentPrcb = KeGetCurrentPrcb();
      EnabledSupervisorFeatures = Configuration->EnabledSupervisorFeatures;
      EnabledFeatures = Configuration->EnabledFeatures;
      v8 = Configuration->EnabledFeatures | EnabledSupervisorFeatures;
      v19 = EnabledSupervisorFeatures;
      UpdateSignature = CurrentPrcb->UpdateSignature;
      if( v8 )
      {
        v9 = (char *)Policy;
        do
        {
          if( v3 >= 0x40 )
            break;
          if( (v8 & 1) != 0 )
          {
            v10 = *((_QWORD *)v9 + 2);
            if( _bittest64(&v10, v3) )
            {
              v11 = 0;
              LODWORD(ProcessorFeatures) = *((_DWORD *)v9 + 6);
              if( (_DWORD)ProcessorFeatures )
              {
                v12 = ProcessorFeatures;
                v13 = v9 + 32;
                ExtendedFeatures = (UINT64)(v9 + 32);
                do
                {
                  if( *v13 == v3 )
                  {
                    IsXSaveFeatureAllowed = KiIsXSaveFeatureAllowed(
                                              (__int64)v9,
                                              v11,
                                              (__int64)CurrentPrcb,
                                              (__int64)Vendor);
                    v12 = ProcessorFeatures;
                    if( IsXSaveFeatureAllowed )
                      _bittestandset64(&v4, v3);
                    v13 = (_DWORD *)ExtendedFeatures;
                  }
                  v13 += 4;
                  ++v11;
                  ExtendedFeatures = (UINT64)v13;
                }
                while( v11 < v12 );
              }
            }
          }
          ++v3;
          v8 >>= 1;
        }
        while( v8 );
        EnabledSupervisorFeatures = v19;
      }
      Configuration->EnabledFeatures = v4 & EnabledFeatures;
      Configuration->EnabledSupervisorFeatures = v4 & EnabledSupervisorFeatures;
    }
  }
}

Referenced by:

KiInitializeXSave