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


Реализация первичного интерфейса для поставщика классов

Существует два способа реализации поставщика классов: реализация интерфейса в качестве поставщика push-уведомлений или в качестве поставщика по запросу.

В этом разделе рассматриваются следующие разделы:

Реализация основного интерфейса для поставщика push-уведомлений

В то время как все поставщики реализуют IWbemProviderInit для инициализации и хотя бы одного другого интерфейса в качестве основного интерфейса, поставщик push-уведомлений реализует только IWbemProviderInit.

Убедитесь, что реализация выполняет следующие задачи:

  • Извлекает соответствующие данные класса.
  • Помещает данные в репозиторий WMI.
  • Удаляет устаревшие данные.

После завершения процесса инициализации WMI обрабатывает все запросы приложений для классов, принадлежащих поставщику push-уведомлений, без дальнейшего взаимодействия с поставщиком. После этого поставщик push-уведомлений эффективно выступает в качестве клиента WMI, а не поставщика. Дополнительные сведения о реализации IWbemProviderInitсм. в Инициализация поставщика.

Заметка

При вызове WMI для создания, обновления или удаления данных в push-поставщике, установите параметр lFlags так, чтобы включить флаг WBEM_FLAG_OWNER_UPDATE во все вызовы методов IWbemServices.

 

Реализация основного интерфейса для поставщика классов pull-запросов

Поставщик извлечения класса должен реализовать IWbemServices в качестве основного интерфейса. Интерфейс IWbemServices поддерживает получение данных, обновление данных, удаление данных, перечисление и обработку запросов. Однако, поскольку IWbemServices также используется приложениями и поставщиками для запроса служб WMI, IWbemServices содержит множество методов, которые не относятся к поставщику классов. Реализация должна поддерживать получение и перечисление классов с помощью методов GetObjectAsync и CreateClassEnumAsync соответственно. В следующей таблице перечислены дополнительные асинхронные методы IWbemServices, которые можно реализовать для поставщика классов.

Метод Особенность
PutInstanceAsync Модификация
DeleteClassAsync Удаление

 

Заметка

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

 

Поставщик вашего класса должен предоставить реализацию заглушки, которая возвращает WBEM_E_PROVIDER_NOT_CAPABLE для всех других методов IWbemServices, которые не поддерживают ваш набор функций. В частности, WMI не поддерживает обработку запросов для поставщиков классов. Таким образом, поставщик классов должен возвращать WBEM_E_PROVIDER_NOT_CAPABLE из своей реализации IWbemServices::ExecQueryAsync, установить для свойства регистрации QuerySupportLevels значение NULLили выполнить оба действия.

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