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


Регистрация поставщика классов

Чтобы создать поставщика классов WMI, необходимо зарегистрировать экземпляр __Win32Provider, представляющий поставщика, с помощью экземпляра __ClassProviderRegistration. В качестве COM-объекта ваш поставщик должен зарегистрироваться в операционной системе и WMI. В следующей процедуре предполагается, что вы уже реализовали процесс регистрации, как описано в Регистрация поставщика. Если поставщик хранит большинство данных в репозитории WMI, а эти данные обновляются только при инициализации WMI, зарегистрируйте класс в качестве поставщика push-классов. Если данные, которые вы предоставляете, часто изменяются и извлекаются динамически вашим кодом по каждому запросу из WMI, тогда зарегистрируйте своего поставщика в качестве поставщика для извлечения данных.

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

Регистрация поставщика push-классов

В следующей процедуре описывается регистрация поставщика класса по запросу.

Зарегистрировать поставщика пулл-класса

  1. Создайте экземпляр класса __Win32Provider, описывающего поставщика.

  2. Создайте экземпляр класса __ClassProviderRegistration, описывающего набор компонентов поставщика.

    В экземпляре __ClassProviderRegistration:

    1. Задайте свойство InteractionType, чтобы указать, является ли поставщик push или pull.

    2. Пометьте класс с помощью квалификаторов Dynamic и Provider.

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

    3. Определите свойства ResultSetQueries, ReferencedSetQueriesи UnsupportedQueries.

      Эти свойства запроса описывают подробные сведения о поддерживаемом классе.

Помимо описания различных поддерживаемых методов класса, класс __ClassProviderRegistration также имеет три свойства, описывающие ряд запросов. При совместном использовании эти три свойства описывают весь диапазон классов, предоставляемых поставщиком классов. Каждое свойство запроса содержит инструкцию WQL SELECT с именем "запрос схемы", чтобы указать типы поддерживаемых классов. Запросы схемы указывают специальное имя класса с именем meta_class. В следующей таблице перечислены свойства запроса.

Свойство Описание
ResultSetQueries Содержит сведения о наборе результатов, который предоставляет поставщик. WMI использует сведения, чтобы определить, следует ли вызывать поставщика для удовлетворения запроса из приложения. Это свойство описывает либо набор всех классов, которые поставщик может предоставить, либо супермножество доступных классов, но никогда не подмножество. WMI требует, чтобы поставщик указал по крайней мере один запрос в этом свойстве.
В следующем примере показано, как задать ResultSetQueries, когда поставщик предоставляет класс ассоциации, ссылающийся на класс Win32_LogicalDisk.
SELECT * FROM meta_class WHERE __Class = "Win32_LogicalDisk"
В следующем примере показано, как указать общий запрос, когда поставщик предоставляет классы, ссылающиеся на другие неизвестные классы.
SELECT * FROM meta_class
В следующем примере показано, как задать ResultSetQueries, если поставщик предоставляет только подклассы, но не родительский класс заданного класса.
SELECT * FROM meta_class WHERE __Dynasty = "MyClass"
В следующем примере показано, как использовать специальное свойство __this и задать ResultSetQueries, когда поставщик предоставляет все классы и подклассы.
SELECT * FROM meta_class WHERE __this ISA "MyClass"
ReferencedSetQueries Определяет, следует ли обходить поставщика в запросах схемы, где запрашиваются связи и ссылки. Поставщики, которые могут обеспечивать классы ассоциаций, должны включать по крайней мере один запрос в своем свойстве ReferencedSetQueries.
НеподдерживаемыеЗапросы Содержит сведения о результирующем наборе, который поставщик классов не предоставляет. WMI использует это свойство для вычитания из набора классов, подразумеваемых ResultSetQueries. Например, поставщик классов может указать в ResultSetQueries поддержку всех классов, производных от MyClass, и указать в UnsupportedQueries отсутствие поддержки одного конкретного производного класса.
Чем больше информации о своих возможностях обработки запросов может зарегистрировать поставщик, тем быстрее работает поставщик. Ввод одного или нескольких запросов в свойство UnsupportedQueries является одним из способов быть конкретным и особенно важен, если поставщик использует класс, который он не предоставляет. Когда запрос выполняется для класса, указанного в запросе в свойстве UnsupportedQueries, WMI может предоставить сам класс или вызвать альтернативного поставщика для его предоставления.

Так как WMI не поддерживает предложение OR, необходимо создать отдельный запрос для каждого класса.

Следующие запросы задаются в ResultSetQueries, когда поставщик классов предоставляет MyClass1, MyClass2 и MyClass3.

SELECT * FROM meta_class WHERE __Class = "MyClass1"
SELECT * FROM meta_class WHERE __Class = "MyClass2"
SELECT * FROM meta_class WHERE __Class = "MyClass3"

Только администраторы могут зарегистрировать или удалить поставщика, создав экземпляр __Win32Provider и __ClassProviderRegistration.