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) |