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


IRP_MN_ENABLE_EVENTS

Любой драйвер WMI, регистрирующий один или несколько блоков событий, должен обрабатывать этот IRP. Драйвер может обрабатывать WMI IRP путем вызова WmiSystemControl или обработки самого IRP, как описано в разделе Обработка запросов WMI.

Если драйвер вызывает WmiSystemControl для обработки запроса IRP_MN_ENABLE_EVENTS , WMI, в свою очередь, вызывает подпрограмму DpWmiFunctionControl этого драйвера.

Основной код

IRP_MJ_SYSTEM_CONTROL

При отправке

WMI отправляет этот IRP, чтобы сообщить драйверу, что потребитель данных запросил уведомление о событии.

WMI отправляет этот IRP в IRQL = PASSIVE_LEVEL в произвольном контексте потока.

Входные параметры

Parameters.WMI.ProviderId указывает на объект устройства драйвера, который должен отвечать на запрос. Этот указатель находится в расположении стека ввода-вывода драйвера в IRP.

Parameters.WMI.DataPath указывает на GUID, который идентифицирует блок событий для включения.

Parameters.WMI.BufferSize указывает размер непагрегированного буфера в параметре Parameters.WMI.Buffer, который должен быть больше или равен размеру(WNODE_HEADER). Драйвер, который не регистрирует блоки трассировки (WMIREG_FLAG_TRACED_GUID), может игнорировать этот параметр.

Parameters.WMI.Buffer указывает на WNODE_HEADER , которая указывает, следует ли отслеживать событие (WMI_FLAGS_TRACED_GUID) и предоставляет дескриптор системного ведения журнала. Драйвер, который не регистрирует блоки трассировки (WMIREG_FLAG_TRACED_GUID), может игнорировать этот параметр.

Выходные параметры

Нет.

Блок состояния ввода-вывода

Если драйвер обрабатывает IRP путем вызова WmiSystemControl, WMI задает Irp-IoStatus.Status и Irp-IoStatus.Information в блоке состояния ввода-вывода>>.

В противном случае драйвер задает Irp-IoStatus.Status> значение STATUS_SUCCESS или соответствующее состояние ошибки, например следующее:

STATUS_WMI_GUID_NOT_FOUND

STATUS_INVALID_DEVICE_REQUEST

При успешном выполнении драйвер устанавливает значение Irp-IoStatus.Information> равным нулю.

Операция

Драйвер может обрабатывать WMI IRP путем вызова WmiSystemControl или обработки самого IRP, как описано в разделе Обработка запросов WMI.

Если драйвер обрабатывает WMI IRP путем вызова WmiSystemControl, эта подпрограмма вызывает подпрограмму DpWmiFunctionControl драйвера или возвращает STATUS_SUCCESS, если драйвер не определяет подпрограмму.

Если драйвер обрабатывает запрос IRP_MN_ENABLE_EVENTS сам, он должен делать это только в том случае, если Parameters.WMI.ProviderId указывает на тот же объект устройства, что и указатель, переданный драйвером в IoWMIRegistrationControl. В противном случае драйвер должен переслать запрос следующему драйверу.

Прежде чем драйвер обработает запрос, он должен определить, указывает ли Parameters.WMI.DataPath на GUID, поддерживаемый драйвером. В противном случае драйвер должен завершиться ошибкой IRP и вернуть STATUS_WMI_GUID_NOT_FOUND.

Если драйвер поддерживает блок событий, он включает событие для всех экземпляров этого блока данных.

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

Драйвер, регистрирующий блоки трассировки (WMIREG_FLAG_TRACED_GUID), также должен определить, следует ли отправлять событие в WMI или в средство ведения журнала системы для трассировки. Если запрашивается трассировка, Parameters.WMI.Buffer указывает на WNODE_HEADER структуру, в которой флаги задаются с помощью WNODE_FLAG_TRACED_GUID а HistoricalContext содержит дескриптор средства ведения журнала.

Дополнительные сведения об определении блоков событий, отправке событий и трассировке см. в статье Инструментарий управления Windows.

Требования

Заголовок

Wdm.h (включая Wdm.h, Ntddk.h или Ntifs.h)

См. также раздел

DpWmiFunctionControl

IoWMIRegistrationControl

IRP_MN_DISABLE_EVENTS

WMILIB_CONTEXT

WmiSystemControl

WNODE_EVENT_ITEM

WNODE_HEADER