В простом варианте, WMI провайдеры предназначены для формирования связи между менеджером объектов CIM (CIMOM) и управляемыми ресурсами, то есть, они (провайдеры) предоставляют CIMOM информацию относительно управляемого объекта, отвечают за обработку поступающих запросов от управляющих программ, а также формируют сообщение при наступлении определенных событий.
Все провайдеры (WMI providers), зарегистрированные в репозитории CIM есть не что иное, как экземпляры системного класса __Win32Provider, данный класс отвечает за регистрацию информации относительно физической реализации провайдера WMI (смотрите статью «Классы WMI, пространство имен и CIM«).
Процесс взаимодействия провайдеров с CIMOM и управляемыми объектами не один и тот же. Так, с CIMOM общение происходит за счет стандартного интерфейса прикладного программирования WMI (WMI API), а с управляемыми объектами – за счет API интерфейса данного объекта. Такая технология общения позволяет скрыть детали относительно внутренней реализации управляемых объектов, тем самым, дает возможность взаимодействовать CIMOM с данными объектами единообразно, используя один и тот же WMI API
Если говорить о физической реализации провайдеров WMI, то они являются серверами COM или DCOM, и представлены в системе в виде динамических библиотек (DLL). Данные библиотечные файлы, как правило, находятся в системной папке System32, в каталоге Wbem. По ходу статьи мы рассмотрим основные провайдеры WMI, которые отвечают за работу с подсистемой Win32, журналом событий, реестром и так далее. Также стоит сделать акцент на том, что WMI предоставляет возможности для создания и установки провайдеров, это позволяет сразу работать с устройствами или службами специфичного характера.
Для примера, откройте приложение CIM Studio и просмотрите экземпляры системного класса __Win32Provider, результат на рисунке ниже.
На первый взгляд может показаться, что все провайдеры WMI одинаковы и что они просто предоставляют классы, но это не так.
Типы WMI провайдеров
- Class(провайдер классов) – Отвечает за предоставление, изменение, удаление и перечисление классов, которые являются специфичными для конкретного провайдера. Тип регистрации – __ClassProviderRegistration. Примером служит провайдер Active Directory и SNMP. WMI Provider.
- Instance(Провайдер экземпляров) — Отвечает за предоставление, изменение, удаление и перечисление экземпляров системных или специфичных для провайдера классов. Каждый экземпляр предоставляет управляемый объект. Также может поддерживать обработку запросов. Тип регистрации – __InstanceProviderRegistration. Например, провайдер реестра и Win32.
- Property(провайдер свойств) – Отвечает за предоставление и изменение значений свойств индивидуальных объектов. Тип регистрации – __PropertyProviderRegistration. Например, провайдер реестра.
- Method(провайдер методов) – Отвечает за предоставление методов класса, специфичного для провайдера. Тип регистрации – __MethodProviderRegistration. Например, провайдер реестра и Win32.
- Event (провайдер событий) – Отвечает за генерацию уведомления о событиях WMI. Тип регистрации – __EventProviderRegistration. Например, провайдер реестра и SNMP. WMI Provider
- Event Consumer (провайдер потребителя событий) – Просто действуют как потребитель событий WMI. Тип регистрации – __EventConsumerProviderRegistration. Например, потребитель событий командной строки, SMTP и скрипта.
Ниже показан список стандартных провайдеров WMI и связанных с ними динамических библиотек.
Стандартные провайдеры WMI
- Провайдер каталога ActiveDirectory (ActiveDirectoryprovider) — Позволяет обращаться к объектам Active Directory как к объектам WMI, динамическая библиотека Dsprov.dll
- Провайдер журнала событий (EventLogprovider) — Обеспечивает управление журналом событий (выборка по определенному критерию записей для чтения, создание резервных копий и очистка журнала, изменение настроек и т. д.). Также этот провайдер позволяет обрабатывать события, генерируемые журналом (например, добавление в журнал записи определенного типа), Ntevt.dll.
- Провайдер системных счетчиков производительности (Perfomance Counter provider) — Обеспечивает доступ к счетчикам производительности, т. е. к данным, позволяющим численно оценивать производительность системы, Wbemperf.dll
- Провайдер реестра (Registryprovider) — Позволяет читать данные из реестра, создавать и модифицировать там ключи и разделы. Кроме этого, провайдер обеспечивает генерацию события WMI при изменении определенного ключа или ветви реестра,Stdprov.dll
- Провайдер SNMP-устройств (SNMP provider) — Является шлюзом для доступа к системам и устройствам, которые управляются с помощью протокола SNMP (Simple Network Management Protocol), Snmpincl.dll
- Провайдер драйверов устройств (WDM provider) — Позволяет получить доступ к информации низкого уровня о драйверах устройств Windows Driver Model (WDM); в качестве таких устройств могут выступать, например, порты ввода/вывода или сетевые платы, Wmiprov.dll
- Провайдер подсистемы Win32 (Win32 provider) — Обеспечивает доступ к информации о компьютере, операционной системе, подсистеме безопасности, дисках, периферийных устройствах, файловых системах, файлах, папках, сетевых ресурсах, принтерах, процессах, сервисах и т. п, Cimwin32.dll
- Провайдер инсталлированных программных продуктов (WindowsInstallerprovider) — Позволяет получить информацию об инсталлированном программном обеспечении, Msiprov.dll
Один провайдер WMI может выполнять сразу несколько ролей, так, провайдер реестра (Registry provider) выполняет следующие роли:
- Провайдер событий
- Провайдер экземпляров
- Провайдер методов
- Провайдер свойств
Аналогично, провайдер EventLog также поддерживает несколько ролей. В его состав входят такие объекты как Event Log Computer, Event Log Record и Event Log File. Сам EventLog является провайдером типа Instance (провайдер экземпляров), поскольку позволяет определять несколько экземпляров для собственных классов. Также, для объекта Event Log File реализованы методы backup и restore, которые позволяют создавать резервные копии файлов Event Log и далее восстанавливать их средствами Windows Management Instrumentation, что позволяет считать провайдер Event Log провайдером методов (Method). Помимо этого, Event Log позволяет уведомлять о создании новых записей в файлах Event Log, тем самым, выступая еще и в роли провайдера событий (Event).