WDM 讀取器驅動程式
必要的例程
WDM 讀取器驅動程式需要下列例程。
DriverEntry
初始化驅動程式物件和分派數據表。
AddDevice
建立智慧卡閱讀機的裝置物件。 此外, AddDevice 可以呼叫下列任一驅動程序連結庫例程:
- SmartcardInitialize (WDM) 來完成驅動程式初始化。 在 AddDevice 中呼叫此例程是強制的。
- SmartcardLogError (WDM) 來記錄錯誤。 如果 SmartcardInitialize (WDM) 失敗,驅動程式必須在 AddDevice 中呼叫此例程。
- SmartcardCreateLink (WDM) ,為登錄中的讀取器裝置建立符號連結。
卸載
從系統移除驅動程式。
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 ,而且是智慧卡要求的主要進入點。 收到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 要求。