次の方法で共有


シーケンスの例

スマート カード リソース マネージャーの IOCTL のシーケンスの例を次に示します。

スタートアップ シーケンス

  1. スマート カード アクセス デバイス インターフェイス GUID と共に DevObj または CfgMgr API を使用して NFC デバイス ドライバーの名前を検出し、CreateFile でそれを使用してデバイス ハンドルを開きます。

  2. スレッド プールを初期化します。

  3. リーダー名を決定します。

    • SCARD_ATTR_VENDOR_NAME、SCARD_ATTR_VENDOR_IFD_TYPE、およびSCARD_ATTR_DEVICE_UNITのIOCTL_SMARTCARD_GET_ATTRIBUTE
  4. 読者の特性を決定します。

    • SCARD_ATTR_CHARACTERISTICS の IOCTL_SMARTCARD_GET_ATTRIBUTE
  5. カード状態モニターを起動します。

    • IOCTL_SMARTCARD_IS_PRESENT – スマート カードの到着を待つ。

    • IOCTL_SMARTCARD_IS_AB Standard Edition NT - スマート カードの離脱を待機します。

SCARD_SWALLOWED、SCARD_POWERED状態はサポートされていないため、電源リセットは関係ありません。

接続シーケンス

  1. ループの開始。

  2. IOCTL_SMARTCARD_GET_STATE

    • ケース SCARD_UNKNOWNとSCARD_ABSENTの場合、何も行わない。

    • Case SCARD_PRESENT、カードの受け入れ

    • Case SCARD_SWALLOWED、コールド リセット

    • Case SCARD_POWERED、ウォーム リセット

    • Case SCARD_NEGOTIABLE、カード ATR の決定

    • ケース SCARD_SPECIFIC、カードの ATR とプロトコルを決定する

  3. IOCTL_SMARTCARD_SET_PROTOCOL

切断シーケンス

  1. 電源ダウン タイムアウトが開始されます。

  2. ループの開始。

  3. IOCTL_SMARTCARD_GET_STATE

    • Case SCARD_SPECIFIC、SCARD_NEGOTIABLE、SCARD_POWERED、電源を切る

    • ケース SCARD_SWALLOWED および SCARD_PRESENT の場合は、何もしない。

    • Case SCARD_ABSENT、SCARD_UNKNOWN、何もしない