Предоставление данных в WMI
WMI делает данные об управляемых объектах Windows доступными через поставщиков WMI. Поставщик извлекает данные из системного компонента, например из процесса или инструментированного приложения, такого как SNMP или IIS, и передает эти данные через WMI в приложение управления. Например, когда приложение или скрипт запрашивает сведения о процессе с помощью класса WMI Win32_Process , данные получаются динамически с помощью предустановленного поставщика.
В этой статье рассматриваются следующие разделы:
- Создание модели для управляемого объекта
- Реализация модели для управляемого объекта
- Определение типа поставщика для реализации
- Определение модели размещения (реализации) для поставщика
- Реализация поставщика
- Регистрация поставщика с помощью инструментария WMI и системы
- Тестирование поставщика
- Связанные темы
Создание модели для управляемого объекта
Перед разработкой поставщика создайте модель данных, представляющую управляемый объект, который будет предоставляться через инструментарий WMI. Вы планируете, какие объекты данных будет предоставлять поставщик. Например, если вы планируете управлять разрешением экрана фона рабочего стола, необходимо решить, как моделировать рабочий стол в MOF-файле .
Чтобы создать полезную модель, выполните следующие действия.
- Определите реальные сценарии и моделировайте информацию, которую клиент может захотеть прочитать и обновить (например, изменить фоновое изображение) для каждого управляемого объекта. Это свойства класса.
- Определите, какие действия клиент может захотеть выполнить с каждым управляемым объектом. Это ваши методы.
Реализация модели для управляемого объекта
Чтобы реализовать модель для управляемых объектов, создайте MOF-файл, содержащий класс WMI, представляющий каждый объект. Дополнительные сведения о создании MOF-файла для определения классов WMI см. в разделе Designing Managed Object Format (MOF) Classes. Регистрация поставщика и его классов обычно включается в 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 можно классифицировать как сопряженный или несвязанный.
Термин связанного или несвязанного поставщика определяет, в каком хост-процессе выполняется поставщик, в отношении инструментария WMI, предоставленного WMIPRVSE.EXE процесса. Рекомендуется определить, всегда ли доступны в системе данные управления, предоставляемые поставщиком, и API или приложение, от которых он используется. Если API или приложение, от которых зависит поставщик, всегда доступны (запущенные в системе), то поставщик должен быть поставщиком, который не является поставщиком, а если нет, он должен быть несвязанным поставщиком. Дополнительные сведения о моделях размещения см. в разделе Размещение поставщиков и безопасность.
Дополнительные сведения о создании связанного поставщика см. в разделе Предоставление данных в WMI путем написания поставщика, а сведения о включении несвязанного поставщика в приложение см. в статье Включение поставщика в приложение.
Связанные поставщики можно описать как внутрипроцессные (in-proc) или внепроцессные (вне процесса). Если поставщик является поставщиком внутри процесса, он выполняется в общем WMIPRVSE.EXE процесса размещения WMI и реализуется как com-сервер внутри процесса (.dll). Если поставщик является поставщиком вне процесса, он запускается WMI по запросу клиента или события, но выполняется как отдельный процесс и реализуется как исполняемый файл (.exe).
Реализация поставщика
Поставщик можно реализовать следующими способами:
Использование мастера ATL в Visual Studio.
Мастер ATL создает код поставщика, который реализует связанного поставщика. При использовании мастера ATL можно указать, что требуется создать модель времени выполнения поставщика в .dll (.dll) или вне среды выполнения (.exe).
Определение COM-объекта для размещения поставщика.
Код поставщика написан на C++. Дополнительные сведения см. в разделе Предоставление данных в WMI путем написания поставщика.
Использование классов в пространстве имен Microsoft.Management.Infrastructure в платформа .NET Framework для создания поставщика с помощью управляемого кода. (Пространство имен System.Management.Instrumentation больше не поддерживается.)
Этот процесс создает несвязанный поставщик.
Регистрация поставщика с помощью инструментария WMI и системы
Перед использованием поставщика от потребителя важно зарегистрировать его в системе WMI и подсистеме COM Windows.
MOF-файл может содержать несколько типов поставщиков для одних и того же класса. Регистрируется то же имя поставщика, что и, например, поставщик экземпляра или метода. Дополнительные сведения см. в разделе Регистрация поставщика.
Тестирование поставщика
При регистрации кода поставщика важно правильно протестировать поставщик с помощью поставщика из разных потребителей (например, скриптов, управляемого кода .NET и потребителей C++).
Выполните следующие задачи, чтобы протестировать поставщика.
- Убедитесь, что поставщик загружается правильно, отслеживая уведомления о событиях MSFT_WmiProvider_OperationEvent . Эти события будут информировать вас о любых сбоях загрузки поставщика. Другие классы устранения неполадок, которые могут быть полезны , — это Win32_ProcessStartTrace и Win32_ProcessStopTrace. Дополнительные сведения об устранении неполадок с поставщиками см. в разделах Поставщики отладки и Конфигурация поставщика и Классы устранения неполадок.
- Если поставщик является поставщиком экземпляра или метода, убедитесь, что вы тестируете возможности каждого поставщика по одному, чтобы избежать путаницы при выполнении логики кода.
- Для поставщика экземпляра создайте клиентское приложение или скрипт, который вызывает каждый интерфейс поставщика (перечисление, получение, вставка и удаление). Даже если поставщик ничего не должен реализовывать, он должен вернуть сообщение "не поддерживается". Возвращаемые значения уже определены в коде возврата WMI.
- Чтобы убедиться, что требуемый контекст безопасности работает должным образом, вызовите поддерживаемые поставщиком операции из контекста безопасности, не являющегося администратором. Поставщик должен поддерживать олицетворение. Если пользователь, не имеющий правильных учетных данных безопасности, пытается обновить данные или выполнить операцию, которая выполняет метод, поставщик должен запретить доступ с соответствующим сообщением об ошибке.
- Дополнительные сведения о безопасности поставщика см. в разделе Защита поставщика.
Связанные темы