IOCTL_NFCSE_HCE_REMOTE_RECV IOCTL (nfcsedev.h)

返回可用的下一个数据缓冲区,或者如果没有更多的缓冲数据,请求应保持挂起状态,直到 APDU 缓冲区可供读取。 然后,数据缓冲区应返回到调用方。 请注意,调用方必须分配足够大的输出缓冲区,以容纳已接收的最大 APDU + 4 字节开销。

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

没有

输入缓冲区长度

没有

输出缓冲区

DWORD 指示 SECURE_ELEMENT_HCE_DATA_PACKET 结构的大小及其有效负载,紧接着是 SECURE_ELEMENT_HCE_DATA_PACKET 结构本身。

状态块

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

返回代码 描述
STATUS_BUFFER_OVERFLOW 提供的缓冲区太小,无法接收通知,第一个 DWORD 将包含预期的缓冲区大小。
STATUS_INVALID_PARAMETER 如果输入缓冲区为非零。
STATUS_INVALID_DEVICE_STATE 如果 IOCTL 是在具有相对名称“SEManage”的句柄上发送的。

言论

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

  • 触发 HCE 激活事件后,此 IOCTL 将在现有连接上发送。
  • 驱动程序必须支持此笔化 IOCTL 上的 CancelIo。
  • 驱动程序必须维护当前连接的已接收 APDU 的“已接收”队列。
  • 在驱动程序中收到此 IOCTL 时:
    • 如果“已接收”队列为空,则驱动程序必须为 IOCTL 笔,以便稍后完成。
    • 如果“已接收”队列为非空,则驱动程序必须取消对一个 APDU 进行排队,将 APDU 缓冲区复制到 IOCTL 的输出缓冲区,并立即完成 IOCTL STATUS_SUCCESS。
  • 如果驱动程序使用 STATUS_SUCCESS 完成此 IOCTL,则输出缓冲区的第一个 DWORD [4 字节] 必须包含SECURE_ELEMENT_HCE_DATA_PACKET结构的大小及其有效负载。
  • 如果收到的 APDU 数据太大而无法复制到此 IOCTL 的输出缓冲区中,驱动程序必须将所需的缓冲区大小复制到输出缓冲区的前 4 个字节中,将 IOCTL 的信息字段设置为 sizeof(DWORD),并使用 STATUS_BUFFER_OVERFLOW完成 IOCTL。 APDU 数据必须保留在“接收”队列中。

要求

要求 价值
标头 nfcsedev.h