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

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

Все ip-адреса 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_ITEM, IRP_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 отправляет запросы IRP WMI в любое время после успешной регистрации драйвера в качестве поставщика данных WMI, обычно когда потребитель данных в пользовательском режиме запрашивает информацию WMI для устройства драйвера. Если драйвер регистрируется в качестве поставщика данных WMI путем вызова IoWMIRegistrationControl, он должен обрабатывать каждый последующий запрос WMI одним из следующих способов:

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

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

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