IRP_MN_DISABLE_EVENTS
注册一个或多个事件块的任何 WMI 驱动程序都必须处理此 IRP。 驱动程序可以通过调用 WmiSystemControl 或通过处理 IRP 本身来处理 WMI IRP,如 处理 WMI 请求中所述。
如果驱动程序调用 WmiSystemControl 来处理 IRP_MN_DISABLE_EVENTS 请求,则 WMI 反过来会调用该驱动程序的 DpWmiFunctionControl 例程。
主要代码
发送时间
WMI 发送此 IRP 以通知驱动程序数据使用者没有请求进一步的事件通知。
WMI 在任意线程上下文中的 IRQL = PASSIVE_LEVEL 发送此 IRP。
输入参数
Parameters.WMI.ProviderId 指向应响应请求的驱动程序的设备对象。 此指针位于 IRP 中驱动程序的 I/O 堆栈位置。
Parameters.WMI.DataPath 指向标识要禁用的事件块的 GUID。
输出参数
无。
I/O 状态块
如果驱动程序通过调用 WmiSystemControl 处理 IRP,则 WMI 在 I/O 状态块中设置 Irp-IoStatus.Status> 和 Irp-IoStatus.Information>。
否则,驱动程序会将 Irp-IoStatus.Status> 设置为STATUS_SUCCESS或相应的错误状态,如下所示:
STATUS_WMI_GUID_NOT_FOUND
STATUS_INVALID_DEVICE_REQUEST
成功后,驱动程序会将 Irp-IoStatus.Information> 设置为零。
Operation
驱动程序可以通过调用 WmiSystemControl 或通过处理 IRP 本身来处理 WMI IRP,如 处理 WMI 请求中所述。
如果驱动程序通过调用 WmiSystemControl 处理 WMI IRP,该例程将调用驱动程序的 DpWmiFunctionControl 例程,或者,如果驱动程序未定义例程,则返回STATUS_SUCCESS。
如果驱动程序处理 IRP_MN_DISABLE_EVENTS 请求本身,则仅当 Parameters.WMI.ProviderId 指向与驱动程序传递给 IoWMIRegistrationControl 的指针相同的设备对象时,它才应这样做。 否则,驱动程序必须将请求转发到下一个较低的驱动程序。
在处理请求之前,驱动程序必须确定 Parameters.WMI.DataPath 是否指向驱动程序支持的 GUID。 否则,驱动程序必须使 IRP 失败并返回STATUS_WMI_GUID_NOT_FOUND。
如果驱动程序支持事件块,则会禁用该块的所有实例的事件。
驱动程序不需要检查事件块是否已经禁用了事件块的事件,因为 WMI 会在最后一个数据使用者禁用该事件时为该事件块发送单个禁用请求。 如果没有要启用的干预请求,WMI 不会发送另一个禁用请求。
有关定义事件块的详细信息,请参阅 设计 WMI 数据和事件块。
要求
标头 |
Wdm.h(包括 Wdm.h、Ntddk.h 或 Ntifs.h) |