IOCTL_PMI_REGISTER_EVENT_NOTIFY IOCTL (pmi.h)

IOCTL_PMI_REGISTER_EVENT_NOTIFY 请求注册 IOCTL 发起程序,以通知有关电表事件。 事件发生时,Power Meter 接口(PMI)将完成 IOCTL 请求并返回有关该事件的信息。

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

AssociatedIrp.SystemBuffer I/O 请求数据包(IRP)的成员指向包含 PMI_EVENT 结构的发起程序分配的输入缓冲区。

输入缓冲区长度

Parameters.DeviceIoControl.InputBufferLength IRP 当前 I/O 堆栈位置 (IO_STACK_LOCATION) 的成员设置为由 AssociatedIrp.SystemBuffer 成员指向的输入缓冲区的大小(以字节为单位)。 此大小必须大于或等于 sizeofPMI_EVENT),否则请求将失败并出现错误状态STATUS_BUFFER_TOO_SMALL。

输出缓冲区

没有。

输出缓冲区长度

没有。

状态块

信息 成员设置为 PMI_EVENT 结构的大小(以字节为单位)。

状态 成员设置为以下值之一:

STATUS_BUFFER_TOO_SMALL

IRPParameters.DeviceIoControl.OutputBufferLength 成员小于 PMI_EVENT 结构的大小(以字节为单位)。

STATUS_PENDING

支持 PMI 接口的 WDM 驱动程序已将 IOCTL 请求置于队列中,并在发生 PMI 事件后完成该请求。

STATUS_SUCCESS

支持 PMI 接口的 WDM 驱动程序已成功完成 IOCTL 请求。

言论

PMI 为每个启动程序创建事件通知队列,该队列使用 CreateFile 函数打开电源表的设备实例。 为每个调用方与设备实例的连接创建单独的队列。 以下几点适用于事件通知队列:

  • 当 PMI 创建事件通知队列时,队列为空。 创建队列后,PMI 使用 IOCTL_PMI_REGISTER_EVENT_NOTIFY 请求注册事件通知后,将事件发送到调用方。
  • 如果调用方注册时事件通知队列为空,则 IOCTL_PMI_REGISTER_EVENT_NOTIFY 请求将保持挂起状态,直到发生事件或设备实例连接中断 CloseFile 函数。
  • 创建事件通知队列后,队列将包含调用方的未发送事件。 这可以防止调用方在驱动程序处理一个事件和调用方注册另一个事件之间的间隔内丢失事件。 如果调用方队列中有事件,则调用方使用 IOCTL_PMI_REGISTER_EVENT_NOTIFY 请求在注册后立即发送这些事件。
当 PMI 向调用方发送电表事件时,它将完成 IOCTL_PMI_REGISTER_EVENT_NOTIFY 请求。 描述该事件的数据包含在输出缓冲区的 PMI_EVENT 结构中,MdlAddressIRP的成员引用。 此结构的 EventType 成员包含有关电源计量事件类型的信息。 例如,如果 EventType 设置为 PmiConfigurationChangedEvent,则电源表的配置已更改。 在这种情况下,调用方可以使用 IOCTL_PMI_GET_CONFIGURATION 请求查询电源表的新配置。

有关 createFile CloseFile 函数 的详细信息,请参阅 Windows SDK 文档。

要求

要求 价值
最低支持的客户端 在 Windows 7、Windows Server 2008 R2 和更高版本的 Windows作系统中可用。
标头 pmi.h (包括 Pmi.h)

另请参阅

IOCTL_PMI_GET_CONFIGURATION

IO_STACK_LOCATION

IRP

PMI_EVENT