Поделиться через


Размещение и безопасность поставщика

Свойство HostingModel в экземпляре __Win32Provider , представляющее поставщика, указывает модель размещения поставщика. Установка этого свойства приводит к загрузке поставщика в общий процесс узла, имеющий указанный уровень привилегий.

Процесс узла общего поставщика

WMI находится в узле общей службы с несколькими другими службами. Чтобы избежать остановки всех служб при сбое поставщика, поставщики загружаются в отдельный процесс узла с именем "Wmiprvse.exe". Может выполняться несколько процессов с этим именем. Каждый из них может выполняться под разными учетными записями с различной безопасностью. Помните, что, начиная с Windows Vista, используйте команду winmgmt для запуска WMI в отдельном процессе с помощью фиксированного порта. Дополнительные сведения см. в статье "Удаленное подключение к WMI с помощью Vista".

Общий узел может выполняться под одной из следующих системных учетных записей в процессе Wmiprvse.exe узла:

Поставщик также может быть локальным COM-сервером (.exe) или локальным, который не требует узла поставщика WMI.

Настройка модели размещения

Так как LocalSystem является привилегированной учетной записью, рекомендуется задать для HostingModel значение NetworkServiceHost, когда поставщик работает в процессе Wmiprvse.exe. Учетная запись NetworkServiceHost — это для служб, которые не требуют обширных привилегий, но необходимо удаленно взаимодействовать с другими системами.

Если значение свойства HostingModel не задано, WMI установит значение по умолчанию NetworkServiceHostOrSelfHost. Если для параметра HostingModel задано значение LocalSystemHost, WMI использует трассировку для создания событий 5603 и 5604 в журнале событий Windows. Так как локальная учетная запись LocalSystem имеет высокий уровень привилегий, этот параметр не рекомендуется. Эти события можно просмотреть в Просмотр событий. Дополнительные сведения см. в разделе "Отслеживание действий WMI".

Задайте свойство HostingModel для отложенных поставщиков как "Decoupled:Com". Поставщики, созданные путем добавления классов инструментирования из Microsoft.Management.Infrastructure в платформа .NET Framework, отделены от поставщиков. (System.Management.Instrumentation больше не поддерживается.) Дополнительные сведения о создании развязанного поставщика см. в разделе "Включение поставщика в приложение".

Модель размещения указана в свойстве HostingModel в экземпляре __Win32Provider, представляющем вашего поставщика.

Настройка модели размещения для поставщика

  1. В MOF-файле, определяющем поставщика, создайте экземпляр __Win32Provider.

  2. Назначьте имя поставщику в свойстве Name и назначьте идентификатор класса (CLSID) объекта COM поставщика свойству Clsid .

    Следующий пример кода назначает имя свойству Name и CSLID объекта COM поставщика свойству Clsid .

    Instance of __Win32Provider as $NewProvider
    {
        Name = "MyProvider";
        Clsid = "{.......}";
    }
    
  3. Назначьте соответствующее значение общего узла свойству HostingModel . Значения общего узла, такие как NetworkServiceHost, определяются в свойстве HostingSpecification класса MSFT_Providers.

    В следующем примере кода для свойства HostingModel назначается общее значение узла.

    HostingModel = "NetworkServiceHost";
    

В следующем примере кода показано, как зарегистрировать поставщика в NetworkServiceHost.

Instance of __Win32Provider as $NewProvider
{
    Name = "MyProvider";
    Clsid = "{.......}";
    HostingModel = "NetworkServiceHost";
}

Если у вас несколько поставщиков, их можно сгруппировать в определенный узел службы, зарегистрируя поставщика таким образом, чтобы он находился в определенном экземпляре.

В следующем примере кода также регистрируется поставщик в NetworkServiceHost. Класс MSFT_Providers определяет значения для двух значений, которые объединяются для создания свойства __Win32Provider HostingModel. В примере значение NetworkServiceHost поступает из свойства HostingSpecification MSFT_Providers и LocalServiceHost из свойства HostingGroup.

Instance of __Win32Provider as $NewProvider
{
    Name = "MyProvider";
    Clsid = "{.......}";
    HostingModel = "NetworkServiceHost:MySharedHost";
}

Специальные проблемы разработки существуют для поставщиков, которые не отделены и размещаются в процессе Wmiprvse. Дополнительные сведения см. в разделе "Поставщики отладки".

Если вы пишете поставщик, содержащий свойство или регистрацию поставщика классов, не все модели потоков работают. Дополнительные сведения см. в разделе "Выбор правильной регистрации".

Значения HostingModel для поставщиков внутрипроцессных служб

В следующем списке перечислены значения модели размещения поставщика, которые будут использоваться в экземпляре __Win32Provider для поставщиков, которые выполняются в процессе Wmiprvse.exe.

Значение в __Win32Provider.HostingModel Description
SelfHost Поставщик начинает использовать реализацию локального сервера вместо процесса. Контекст безопасности процесса, в котором выполняется поставщик, определяет контекст безопасности поставщика.
LocalSystemHost Поставщик, если он реализован как внутрипроцессный, загружается в узел общего поставщика, работающий в контексте LocalSystem . Начиная с Windows Vista LocalSystemHost больше не является моделью размещения по умолчанию, если hostingModel поставщика WMI (__Win32Provider.Свойство HostingModel) не указано. Дополнительные сведения см. в разделе "Безопасность моделей размещения".
LocalSystemHostOrSelfHost Поставщик размещается самостоятельно или загружается в процесс Wmiprvse.exe, запущенный под учетной записью LocalSystem . Так как LocalSystem является учетной записью с высоким уровнем привилегий, запись создается в журнале событий Security NT, чтобы уведомить администраторов поставщика, работающего в этом доверенном состоянии.
NetworkServiceHost Поставщик, если он реализован как встроенный, загружается в процесс Wmiprvse.exe, выполняемый в учетной записи NetworkService . Начиная с Windows Vista, это модель размещения по умолчанию, если HostingModel поставщика WMI (__Win32Provider.Свойство HostingModel ) не указано. Дополнительные сведения см. в разделе "Безопасность моделей размещения".
NetworkServiceHost имеет ограниченные привилегии и, следовательно, снижает вероятность повышения привилегий. Если поставщик работает только на локальном компьютере, задайте для свойства HostingModel значение LocalServiceHost.
NetworkServiceHostOrSelfHost Поставщик размещается самостоятельно или загружается в процесс WmiPrvse.exe, запущенный под учетной записью NetworkService . NetworkServiceHostOrSelfHost — это конфигурация по умолчанию, если свойство HostingModel в __Win32Provider имеет значение NULL. Так как NetworkServiceHostOrSelfHost — это по умолчанию, поставщики из более ранних операционных систем могут продолжать работать в Windows Vista, Windows Server 2008 и более поздних операционных системах.
LocalServiceHost Поставщик, если он реализован как встроенный, загружается в процесс Wmiprvse.exe, запущенный в учетной записи LocalService . Это рекомендуемая модель размещения для служб, так как LocalService имеет ограниченные привилегии.

Значения HostingModel для отложенных поставщиков

В следующем списке перечислены значения модели размещения поставщика для развязанных поставщиков.

Decoupled:Com

Поставщик — это отдельный поставщик, размещенный в отдельном процессе, который является клиентом WMI.

В следующем примере показан описатель FoldIdentity для свойства HostingModel с значением FALSE, что позволяет поставщику олицетворить клиент.

Decoupled:Com:FoldIdentity(FALSE)

Если Значение FoldIdentity не указано, значение FoldIdentity по умолчанию имеет значение TRUE . По соображениям безопасности рекомендуется не указывать FoldIdentity(FALSE), так как изгоевое приложение с олицетворением делегата может повлиять на весь домен.

В следующем примере показано свойство HostingModel , заданное рекомендуемым способом, эквивалентным настройке FoldIdentity(TRUE).

Decoupled:Com

Decoupled:Noncom

Только для внутреннего пользования. Не поддерживается.

Безопасность моделей размещения

В большинстве случаев LocalSystem не требуется, а контекст NetworkServiceHost более подходящий. Большинство поставщиков WMI должны олицетворить контекст безопасности клиента для выполнения запрошенных операций от имени клиента WMI. Начиная с Windows Vista, поставщик WMI, который не имеет определения модели размещения и выполняется, как если бы он работает в LocalSystem не будет работать должным образом. Чтобы исправить эту ситуацию, измените ожидаемую модель размещения и убедитесь, что код поставщика WMI выполняет операции в контексте безопасности клиента, олицетворяя клиент WMI. LocalSystem редко является обязательным требованием. Если у поставщика должен быть такой уровень привилегий, укажите модель размещения с помощью следующей инструкции в MOF-файле.

HostingModel=LocalSystemHost

Выбор правильной регистрации

Доступ к пространствам имен WMI

Защита пространств имен WMI

Классы конфигурации и устранения неполадок поставщика

MSFT_Providers

Обслуживание безопасности WMI