IOCTL_NFCSE_GET_NEXT_EVENT IOCTL (nfcsedev.h)

IOCTL_NFCSE_GET_NEXT_EVENT控制代码返回缓冲区中可用的下一个事件,或者如果没有其他缓冲事件,则在安全元素事件可用之前保持挂起状态。 然后,必须将事件详细信息返回到调用方。

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

输入缓冲区长度

输出缓冲区

一个 DWORD ,指示 SECURE_ELEMENT_EVENT_INFO 结构的大小及其有效负载,紧跟 SECURE_ELEMENT_EVENT_INFO 结构本身。

状态块

Irp->如果请求成功,IoStatus.Status 设置为 STATUS_SUCCESS 。 可能的错误代码包括:

返回代码 说明
STATUS_INVALID_DEVICE_STATE 当在文件名不是 SEEvents 的设备句柄上调用此 IOCTL 时,或者已经有另一个尚未完成的挂起请求时,将返回此代码。
STATUS_INVALID_PARAMETER 当输出缓冲区为非零或当安全元素的 GUID 与任何枚举 ID 不匹配时,将返回此代码。

注解

以下是驱动程序必须遵守的要求。

  • 必须在具有 SEEvents 相对文件名的句柄上调用此 IOCTL;否则,驱动程序将返回STATUS_INVALID_DEVICE_STATE
  • 对于此挂起的 IOCTL,此驱动程序必须支持 CancelIO。
  • 此驱动程序必须维护接收的安全元素事件的接收队列,这些事件与订阅类型匹配。
  • 在驱动程序中收到此 IOCTL 时,必须满足以下条件:
    • 如果收到的队列为空,则驱动程序必须写上 IOCTL 以供以后完成。
    • 如果收到的队列为非空,则驱动程序必须将一个事件取消队列,将消息缓冲区复制到 IOCTL 的输出缓冲区,然后立即使用 STATUS_SUCCESS 完成 IOCTL。
  • 如果驱动程序使用 STATUS_SUCCESS 完成此 IOCTL,则输出缓冲区的第一个 DWORD [4 字节] 必须包含SECURE_ELEMENT_EVENT_INFO结构的大小及其有效负载。
  • 如果收到的安全元素事件信息太大,无法复制到此 IOCTL 的缓冲区中,驱动程序必须将所需的缓冲区大小复制到输出缓冲区的前 4 个字节中,将 IOCTL 的信息字段设置为 size of (DWORD) ,并使用 STATUS_BUFFER_OVERFLOW完成 IOCTL。 然后,该事件必须保留在接收的队列中。

要求

要求
Header nfcsedev.h