Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
[Применимо только к KMDF]
Драйверы, основанные на фреймворке, поддерживают блоки данных WMI, предоставляя функции обратного вызова событий. Драйверы поддерживают события WMI, вызывая метод объекта, который отправляет событие клиентам WMI.
Поддержка блоков данных WMI для чтения и записи
Если сведения в блоке данных WMI доступны для чтения и записи клиентами WMI, драйвер должен предоставить функцию обратного вызова EvtWmiInstanceQueryInstance, которая обслуживает запросы на чтение клиента, а также функции обратного вызова EvtWmiInstanceSetInstance или EvtWmiInstanceSetItem (или оба), которые обслуживают запросы на запись клиента.
Если блок данных содержит методы, выполняемые драйвером по запросу клиента, драйвер также должен предоставить функцию обратного вызова EvtWmiInstanceExecuteMethod .
Если блок данных WMI доступен только для записи (то есть клиенты WMI могут записывать сведения в блок данных, но не могут считывать блок данных), драйвер не предоставляет функцию обратного вызова EvtWmiInstanceQueryInstance .
Поддержка блоков данных WMI Read-Only
Если сведения в блоке данных WMI не могут быть изменены клиентом WMI, драйвер не предоставляет функции обратного вызова EvtWmiInstanceSetInstance или EvtWmiInstanceSetItem . Для поддержки запросов к данным блока данных от клиентов WMI драйвер может выполнить одно из следующих действий:
Предоставьте функцию обратного вызова EvtWmiInstanceQueryInstance для копирования данных, предоставленных драйвером, в буфер, предоставленный WMI.
Сохраните сведения блока данных в пространстве контекста объекта экземпляра WMI и задайте члену UseContextForQuery структуры WDF_WMI_INSTANCE_CONFIG экземпляра значение TRUE.
Если драйвер устанавливает значение параметра UseContextForQuery в TRUE, платформа копирует контекстную область объекта экземпляра в буфер, предоставленный WMI, при запросе клиентом WMI сведений об экземпляре. Обратные вызовы EvtWmiInstanceXxx не требуются, если драйвер имеет только один экземпляр WMI, предоставляющий данные только для чтения, фиксированной длины из области контекста объекта.
Если блок данных только для чтения содержит методы, выполняемые драйвером по запросу клиента, драйвер также может предоставить функцию обратного вызова EvtWmiInstanceExecuteMethod .
Поддержка дорогостоящих блоков данных WMI
Если драйвер собирает относительно большие объемы динамических данных для поддержки одного из блоков данных WMI, драйвер должен выполнить следующее:
Объявите блок данных как дорогой, задав флаг WdfWmiProviderExpensive в элементе Flags объекта поставщика WMI WDF_WMI_PROVIDER_CONFIG структуры.
Предоставьте функцию обратного вызова EvtWmiProviderFunctionControl , которая включает и отключает сбор данных для блока данных, или вызовите WdfWmiProviderIsEnabled , чтобы определить, должен ли драйвер включать или отключать сбор данных.
Если драйвер задает флаг WdfWmiProviderExpensive , платформа вызывает функцию обратного вызова EvtWmiProviderFunctionControl , когда клиент WMI регистрирует доступ к блоку данных. Функция обратного вызова должна включить возможность драйвера собирать данные. Если все клиенты WMI удаляют регистрацию для блока данных, платформа снова вызывает функцию обратного вызова EvtWmiProviderFunctionControl , чтобы драйвер смог прекратить сбор данных.
Поддержка событий WMI
Драйвер может использовать события WMI для уведомления клиентов WMI об исключительных условиях. (Не следует использовать события WMI в качестве альтернативы ведению журнала ошибок.) Как и элементы данных, события WMI определяются в блоках данных WMI в файлах управляемого формата объектов (MOF).
Клиенты WMI регистрируются для уведомления о событиях WMI. Чтобы отправить событие зарегистрированным клиентам WMI, драйвер вызывает метод WdfWmiInstanceFireEvent . Этот метод позволяет драйверу при необходимости отправлять данные, относящиеся к событиям, клиентам.
Если блок данных WMI, определяющий событие, также содержит элементы данных WMI или элементы метода, драйвер предоставляет соответствующие функции обратного вызова WMI. Если блок данных определяет событие, но не содержит элементов данных или методов, драйвер должен задать флаг WdfWmiProviderEventOnly в элементе Flags объекта поставщика WMI WDF_WMI_PROVIDER_CONFIG структуры.
Драйвер должен вызывать WdfWmiInstanceFireEvent , только если клиент WMI зарегистрировался для уведомления о событии. Драйвер может определить, следует ли вызывать WdfWmiInstanceFireEvent , предоставив функцию обратного вызова EvtWmiProviderFunctionControl или вызвав WdfWmiProviderIsEnabled.
Поддержка трассировки событий WMI
События трассировки определяются в файлах MOF так же, как другие события WMI. Когда драйвер создает объект поставщика WMI для события трассировки, он должен задать флаг WdfWmiProviderTracing в элементе FlagsWDF_WMI_PROVIDER_CONFIG структуры объекта поставщика.
После регистрации экземпляра поставщика драйвер может вызвать WdfWmiProviderGetTracingHandle для получения дескриптора трассировки. Драйвер может использовать дескриптор трассировки в качестве входного параметра для подпрограммы WmiTraceMessage.
Дополнительные сведения о трассировке событий см. в следующем разделе: