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


Обработка запросов WMI

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

Все irP WMI имеют основной код IRP_MJ_SYSTEM_CONTROL и один из следующих дополнительных кодов:

  • IRP_MN_REGINFO, IRP_MN_REGINFO_EX — запрашивает или обновляет сведения о регистрации драйвера после вызова драйвера IoWMIRegistrationControl.

  • IRP_MN_QUERY_ALL_DATA, IRP_MN_QUERY_SINGLE_INSTANCE — запросы для всех экземпляров или одного экземпляра заданного блока данных.

  • IRP_MN_CHANGE_SINGLE_ITEMIRP_MN_CHANGE_SINGLE_INSTANCE — запрашивает у драйвера изменение одного или нескольких элементов в экземпляре блока данных.

  • IRP_MN_ENABLE_COLLECTION, IRP_MN_DISABLE_COLLECTION — запрашивает, чтобы драйвер начал накапливать данные для блока, который драйвер зарегистрировал как дорогостоящий для сбора, или прекратить накопление данных для такого блока.

  • IRP_MN_ENABLE_EVENTS, IRP_MN_DISABLE_EVENTS — запрашивает от драйвера начать отправку уведомления о данном событии, если событие происходит во время его включения, или прекратить отправку уведомления о таком событии.

  • IRP_MN_EXECUTE_METHOD — запрашивает у драйвера метод, связанный с блоком данных.

Компонент режима ядра WMI отправляет WMI IRP в любое время после успешной регистрации драйвера в качестве поставщика данных WMI, как правило, когда потребитель данных пользовательского режима запрашивает сведения WMI для устройства драйвера. Если драйвер регистрируется в качестве поставщика данных WMI путем вызова IoWMIRegistrationControl, он должен обрабатывать каждый последующий запрос WMI одним из следующих способов:

  • Вызовите подпрограмму библиотеки WMI в режиме ядра WmiSystemControl. Драйвер может вызывать WmiSystemControl для обработки запросов, касающихся только блоков, которые не используют динамические имена экземпляров и которые основываются на одной строке базового имени или идентификаторе экземпляра устройства PDO. Дополнительные сведения см. в разделе Вызов WmiSystemControl для обработки irp WMI.

  • В подпрограмме DispatchSystemControl обработайте и завершите любой такой запрос, помеченный указателем на объект устройства, который драйвер передал в вызове IoWMIRegistrationControl, и перенаправьте другие запросы IRP_MJ_SYSTEM_CONTROL в следующий драйвер ниже. Дополнительные сведения см. в разделе Обработка WMI IRP в подпрограмме DispatchSystemControl.

Список дополнительных irp WMI см. в разделе WMI Minor IRPs