WDM 读卡器驱动程序
必需的例程
WDM 读取器驱动程序需要以下例程。
DriverEntry
初始化驱动程序对象和调度表。
AddDevice
为智能卡读取器创建设备对象。 此外, AddDevice 可以调用以下任一驱动程序库例程:
- SmartcardInitialize (WDM) 以完成驱动程序初始化。 在 AddDevice 中调用此例程是强制性的。
- SmartcardLogError (WDM) 来记录错误。 如果 SmartcardInitialize (WDM) 失败,驱动程序必须在 AddDevice 中调用此例程。
- SmartcardCreateLink (WDM) 为注册表中的读取器设备创建符号链接。
Unload
从系统中删除驱动程序。
DispatchCreate
-和-
DispatchClose
分别支持 IRP_MJ_CREATE 和 IRP_MJ_CLOSE<。 若要与读取器建立连接,资源管理器会将 IRP_MJ_CREATE 发送到读取器驱动程序。 为了断断连接,资源管理器会发送 IRP_MJ_CLOSE。
DispatchCleanup
支持 IRP_MJ_CLEANUP,资源管理器将其发送到读取器驱动程序以取消挂起的 I/O 请求。
DispatchPnP
支持 IRP_MJ_PNP
DispatchPower
支持 IRP_MJ_POWER。
DispatchDeviceControl
支持IRP_MJ_DEVICE_CONTROL,是智能卡请求main入口点。 收到IRP_MJ_DEVICE_CONTROL后,DispatchDeviceControl 必须立即调用 SmartcardDeviceControl (WDM) ,这是处理设备控制请求的智能卡驱动程序库例程。 以下代码示例演示如何从 WDM 驱动程序调用此库例程:
NTSTATUS
DriverDeviceControl(
PDEVICE_OBJECT DeviceObject,
PIRP Irp
)
{
PDEVICE_EXTENSION deviceExtension = DeviceObject -> DeviceExtension;
return SmartcardDeviceControl(
&(deviceExtension->SmartcardExtension),
Irp
);
如果无法处理调用中指示的特定 IOCTL,SmartcardDeviceControl 将为未知的 IOCTL 请求调用驱动程序的回调。