共用方式為


範例序列

以下是智慧卡資源管理員中的 IOCTL 範例序列:

啟動順序

  1. 使用 DevObj 或 CfgMgr API 搭配智慧卡存取裝置介面 GUID 來探索 NFC 設備驅動器的名稱,並將其與 CreateFile 搭配使用,以開啟裝置句柄。

  2. Initialize thread pool.

  3. 判斷讀取器名稱。

    • IOCTL_SMARTCARD_GET_ATTRIBUTE on SCARD_ATTR_VENDOR_NAME, SCARD_ATTR_VENDOR_IFD_TYPE, and SCARD_ATTR_DEVICE_UNIT
  4. 判斷讀取器特性。

    • IOCTL_SMARTCARD_GET_ATTRIBUTE on SCARD_ATTR_CHARACTERISTICS
  5. 啟動卡片狀態監視器。

    • 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

  1. Start of loop.

  2. 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

  3. IOCTL_SMARTCARD_SET_PROTOCOL

Disconnect sequence

  1. Power-down timeout starts.

  2. Start of loop.

  3. 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