Размещение и безопасность поставщика
Свойство 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, представляющем вашего поставщика.
Настройка модели размещения для поставщика
В MOF-файле, определяющем поставщика, создайте экземпляр __Win32Provider.
Назначьте имя поставщику в свойстве Name и назначьте идентификатор класса (CLSID) объекта COM поставщика свойству Clsid .
Следующий пример кода назначает имя свойству Name и CSLID объекта COM поставщика свойству Clsid .
Instance of __Win32Provider as $NewProvider { Name = "MyProvider"; Clsid = "{.......}"; }
Назначьте соответствующее значение общего узла свойству 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