RDF_IOCTL_VENDOR回调函数

RDF_IOCTL_VENDOR回调函数执行特定于供应商的 IOCTL作。

语法

NTSTATUS (*ReaderFunction[RDF_IOCTL_VENDOR])(
   PSMARTCARD_EXTENSION SmartcardExtension
);

参数

  • SmartcardExtension
    指向设备的智能卡扩展(SMARTCARD_EXTENSION)的指针。 有关此结构的成员的详细信息,请参阅“备注”。

返回值

此函数返回 NTSTATUS 值。 由于此函数执行供应商定义的 IOCTL 调用,因此返回的值取决于执行的函数。 可能的 NTSTATUS 值为:

返回代码 说明
STATUS_SUCCESS

函数已成功执行。

STATUS_NO_MEDIA

读取器中未插入智能卡。

STATUS_IO_TIMEOUT

请求超时。

STATUS_BUFFER_TOO_SMALL

用户的回复缓冲区太小。

STATUS_INVALID_DEVICE_REQUEST

请求对 IOCTL 无效。

STATUS_PENDING

作挂起。

注解

智能卡读取器驱动程序实现此回调函数是可选的。

在输入时,调用方必须将以下值传递给函数:

  • SmartcardExtension->MajorIoControlCode
    包含特定于供应商的 IOCTL 代码。 有关如何定义特定于供应商的 IOCTL 代码的信息,请参阅 winsmcrd.h 中的宏SCARD_CTL_CODE。 请注意,代码必须介于 2048 和 4095 之间。

  • SmartcardExtension->IoRequest.RequestBuffer
    指向用户的输入缓冲区的指针。

  • SmartcardExtension->IoRequest.RequestBufferLength
    用户输入缓冲区的大小(以字节为单位)。

  • SmartcardExtension->IoRequest.ReplyBuffer
    指向用户的输出缓冲区的指针。

  • SmartcardExtension->IoRequest.ReplyBufferLength
    用户输出缓冲区的大小(以字节为单位)。

  • SmartcardExtension->IoRequest.Information
    请求提供的值。 必须设置为返回的字节数。

与所有其他 IOCTL 一样,用户模式应用程序通过调用 DeviceIoControl 函数将供应商定义的 IOCTL 调度到智能卡读卡器设备。 但是,当 IOCTL 是供应商定义的时,应用程序必须首先打开读取器设备进行“重叠”(即异步)访问。 应用程序还必须定义一个 OVERLAPPED 结构,并在 DeviceIoControl 的最后一个参数中将其传递给系统(Windows SDK 文档中也介绍了 OVERLAPPED 结构)。 当作系统调用驱动程序的 I/O 控制调度例程时,它会将 DIOCPARAMETERS 结构传递给驱动程序。 DIOCPARAMETERS 结构的 lpoOverlapped 成员包含指向 OVERLAPPED 结构的指针。

要求

目标平台

桌面

标题

Smclib.h (包括 Smclib.h)

另请参阅

SMARTCARD_EXTENSION