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


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

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

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

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

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

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

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

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

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

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

    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.