以下是智慧卡資源管理員中的 IOCTL 範例序列:
啟動順序
使用 DevObj 或 CfgMgr API 搭配智慧卡存取裝置介面 GUID 來探索 NFC 設備驅動器的名稱,並將其與 CreateFile 搭配使用,以開啟裝置句柄。
Initialize thread pool.
判斷讀取器名稱。
- IOCTL_SMARTCARD_GET_ATTRIBUTE on SCARD_ATTR_VENDOR_NAME, SCARD_ATTR_VENDOR_IFD_TYPE, and SCARD_ATTR_DEVICE_UNIT
判斷讀取器特性。
- IOCTL_SMARTCARD_GET_ATTRIBUTE on SCARD_ATTR_CHARACTERISTICS
啟動卡片狀態監視器。
IOCTL_SMARTCARD_IS_PRESENT – To wait for a smart card arrival.
IOCTL_SMARTCARD_IS_ABSENT – To wait for the smart card departure.
因為我們不支援SCARD_SWALLOWED和SCARD_POWERED狀態,所以電源重設無關緊要。
Connect sequence
Start of loop.
IOCTL_SMARTCARD_GET_STATE
Case SCARD_UNKNOWN and SCARD_ABSENT, do nothing
Case SCARD_PRESENT, swallow card
Case SCARD_SWALLOWED, cold reset
Case SCARD_POWERED, warm reset
Case SCARD_NEGOTIABLE, determine the card ATR
Case SCARD_SPECIFIC, determine the card ATR and protocol
IOCTL_SMARTCARD_SET_PROTOCOL
Disconnect sequence
Power-down timeout starts.
Start of loop.
IOCTL_SMARTCARD_GET_STATE
Case SCARD_SPECIFIC, SCARD_NEGOTIABLE, SCARD_POWERED, set power down
Case SCARD_SWALLOWED, SCARD_PRESENT, do nothing
Case SCARD_ABSENT, SCARD_UNKNOWN, do nothing