Предоставление данных WMI
WMI делает данные об управляемых объектах Windows доступными через поставщиков WMI . Поставщик получает данные из системного компонента, например процесса или инструментированного приложения, например SNMP или IIS, и передает эти данные через WMI в приложение управления. Например, когда приложение или скрипт запрашивает сведения об обработке с помощью класса WMI Win32_Process, данные получаются динамически с помощью предустановленного поставщика.
В этом разделе рассматриваются следующие разделы:
- создание модели для управляемого объекта
- Внедрение модели управляемого объекта
- определение типа поставщика для реализации
- Определение модели хостинга для поставщика
- Реализация поставщика
- Регистрация поставщика в WMI и системе
- тестирование поставщика
- Связанные темы
Создание модели для управляемого объекта
Перед разработкой поставщика создайте модель данных для представления управляемого объекта, который будет предоставляться через WMI. Вы планируете, какие объекты данных будет предоставлять ваш поставщик. Например, если вы планируете управлять разрешением экрана фона рабочего стола, необходимо решить, как моделировать рабочий стол в файлеуправляемого формата объектов (MOF).
Чтобы создать полезную модель, выполните приведенные действия.
- Определите реальные сценарии и смоделируйте информацию, которую клиент может захотеть прочитать и обновить (например, изменить фоновое изображение) для каждого объекта, который можно управлять. Это свойства класса.
- Определите, какие действия клиент может захотеть выполнить над каждым управляемым объектом. Это ваши методы.
Реализация модели для управляемого объекта
Чтобы реализовать модель для управляемых объектов, создайте MOF-файл, содержащий класс WMI, представляющий каждый объект. Дополнительные сведения о создании MOF-файла для определения классов WMI см. в разделе Проектирование классов управляемого формата объектов (MOF). Регистрация поставщика и его классов обычно включается в MOF-файл, хотя для создания классов и методов можно использовать COM API. Дополнительную информацию см. в статье Разработка поставщика WMI.
Заметка
Чтобы убедиться, что все определения классов WMI для управляемых объектов восстанавливаются в репозитории WMI, если WMI имеет сбой и перезапуск, используйте инструкцию #pragma автоматического восстановления препроцессора в файле управляемого формата объектов (MOF).
После создания MOF-файла скомпилируйте его с помощью средства Mofcomp.exe. Это уведомляет вас об ошибках в MOF-файле и добавляет класс WMI, определенный в MOF-файле, в репозиторий WMI , чтобы класс мог использоваться поставщиком.
Определение типа поставщика для реализации
WMI поддерживает определенное количество типов поставщиков, которые определяют характер предоставленной информации и операций, поддерживаемых поставщиками.
Типы поставщиков:
- поставщика экземпляров
- поставщик методов
- поставщика свойств
- Провайдер классов
- поставщик событий
- поставщика услуг потребителей событий
- поставщик ассоциаций
Подавляющее большинство поставщиков являются поставщиками экземпляров и поставщиками методов. Поставщик экземпляров является наиболее распространенным поставщиком, который предоставляет экземпляры заданного класса. Поставщик методов реализует методы одного или нескольких классов. Для получения дополнительной информации о типах поставщиков см. Разработка поставщика WMI.
Определение модели размещения (реализации) для поставщика
Поставщики WMI — это двоичные файлы, реализованные как COM-объекты. Это означает, что у каждого поставщика есть DLL-файл, который можно выполнить в рамках определенного процесса и контекста безопасности. Это та модель размещения , которую WMI называет. WMI предлагает различные способы размещения поставщиков, но наиболее распространенный подход — использовать связанную модель поставщика (работающую в процессе WMI) в контексте безопасности "NetworkServiceHost". Поставщик WMI можно классифицировать как связанные или разъединенные.
Термин "связанный" или "несвязанный" поставщик определяет, в каком процессе хоста выполняется поставщик по отношению к процессу WMIPRVSE.EXE, предоставляемому WMI. Рекомендуется определить, всегда ли в системе доступны данные управления, предоставляемые поставщиком, и API или приложение, на которое он опирается, или нет. Если API или приложение, на которое полагается поставщик, всегда доступны (работают в системе), поставщик должен быть сопряжённым поставщиком; если нет, он должен быть разобщённым поставщиком. Дополнительные сведения о моделях размещения см. в разделе Размещение и безопасность поставщиков.
Дополнительные сведения о создании связанного поставщика см. в статье Пример предоставления данных для WMI путем написания поставщика, а также сведения о включении распаренного поставщика в приложение см. в статье Включение поставщика в приложение.
Связанные поставщики могут быть описаны как внутрипроцессные (in-proc) или внепроцессные (out-of-proc). Если связанный поставщик является внутрипроцессным поставщиком, он выполняется в рамках общего хост-процесса WMIPRVSE.EXE WMI и реализуется как внутрирпоцессный сервер COM (.dll). Если поставщик является поставщиком вне proc, он запускается WMI по запросу клиента или события, но он выполняется как отдельный процесс и реализуется как исполняемый файл (.exe).
Реализация провайдера
Поставщик может быть реализован следующим образом:
Использование мастера ATL в Visual Studio.
Мастер ATL создает код поставщика, реализующий связанного поставщика. При использовании мастера ATL можно указать, что вы хотите создать модель выполнения поставщика in-proc (.dll) или out-of-proc (.exe).
Определение COM-объекта для хранения вашего поставщика.
Код поставщика написан на языке C++. Дополнительные сведения см. в отправке данных в WMI путем написанияпоставщика.
Использование классов из пространства имен Microsoft.Management.Infrastructure в .NET Framework для создания провайдера с использованием управляемого кода. (Пространство имен System.Management.Instrumentation больше не поддерживается.)
Этот процесс создает независимого поставщика.
Регистрация поставщика с помощью WMI и системы
Прежде чем использовать поставщика потребителем, важно зарегистрировать его в системе WMI и подсистеме Windows COM.
MOF-файл может содержать несколько типов поставщиков для одного класса. То же имя поставщика регистрируется, как, например, экземпляр или поставщик методов. Дополнительную информацию см. в разделе Регистрация поставщика.
Тестирование поставщика
При регистрации кода поставщика важно правильно протестировать его, используя разных потребителей (например, скрипты, управляемый код .NET и потребителей C++).
Выполните следующие задачи для тестирования поставщика:
- Убедитесь, что ваш поставщик загружается правильно, отслеживая уведомления о событиях MSFT_WmiProvider_OperationEvent. Эти события будут информировать вас о сбоях загрузки поставщика. Другие классы устранения неполадок, которые могут оказаться полезными, являются Win32_ProcessStartTrace и Win32_ProcessStopTrace. Дополнительные сведения об устранении неполадок поставщиков см. в разделе устранение неполадок поставщиков и конфигурация поставщика иклассы устранения неполадок.
- Если поставщик является поставщиком экземпляра или метода, убедитесь, что вы проверяете возможность каждого поставщика по одному, чтобы избежать путаницы в соответствии с логикой кода.
- Для поставщика экземпляров создайте клиентское приложение или скрипт, который вызывает каждый интерфейс поставщика (перечисление, получение, размещение и удаление). Даже если поставщик не должен реализовать что-либо, он должен вернуть сообщение "не поддерживается". Возвращаемые значения можно найти в кодов возврата WMI.
- Чтобы убедиться, что требуемый контекст безопасности работает как запланировано, вызовите поддерживаемые поставщиком операции из контекста безопасности, не являющегося администратором. Поставщик должен поддерживать олицетворение. Если у пользователя нет правильных учетных данных безопасности, пытается обновить данные или выполнить операцию, которая выполняет метод, поставщик должен запретить доступ с соответствующим сообщением об ошибке.
- Дополнительные сведения о безопасности поставщика см. в Защита вашего поставщика.
Связанные разделы
-
Разработка поставщика WMI
-
Поставка данных в WMI через написание поставщика
-
Защита поставщика