スマート カード リソース マネージャーの IOCTL のシーケンスの例を次に示します。
スタートアップ シーケンス
スマート カード アクセス デバイス インターフェイス GUID と共に DevObj または CfgMgr API を使用して NFC デバイス ドライバーの名前を検出し、CreateFile でそれを使用してデバイス ハンドルを開きます。
スレッド プールを初期化します。
リーダー名を決定します。
- SCARD_ATTR_VENDOR_NAME、SCARD_ATTR_VENDOR_IFD_TYPE、およびSCARD_ATTR_DEVICE_UNITのIOCTL_SMARTCARD_GET_ATTRIBUTE
読者の特性を決定します。
- SCARD_ATTR_CHARACTERISTICS の IOCTL_SMARTCARD_GET_ATTRIBUTE
カード状態モニターを起動します。
IOCTL_SMARTCARD_IS_PRESENT – スマート カードの到着を待つ。
IOCTL_SMARTCARD_IS_AB Standard Edition NT - スマート カードの離脱を待機します。
SCARD_SWALLOWED、SCARD_POWERED状態はサポートされていないため、電源リセットは関係ありません。
接続シーケンス
ループの開始。
IOCTL_SMARTCARD_GET_STATE
ケース SCARD_UNKNOWNとSCARD_ABSENTの場合、何も行わない。
Case SCARD_PRESENT、カードの受け入れ
Case SCARD_SWALLOWED、コールド リセット
Case SCARD_POWERED、ウォーム リセット
Case SCARD_NEGOTIABLE、カード ATR の決定
ケース SCARD_SPECIFIC、カードの ATR とプロトコルを決定する
IOCTL_SMARTCARD_SET_PROTOCOL
切断シーケンス
電源ダウン タイムアウトが開始されます。
ループの開始。
IOCTL_SMARTCARD_GET_STATE
Case SCARD_SPECIFIC、SCARD_NEGOTIABLE、SCARD_POWERED、電源を切る
ケース SCARD_SWALLOWED および SCARD_PRESENT の場合は、何もしない。
Case SCARD_ABSENT、SCARD_UNKNOWN、何もしない