Partager via


Exemple de séquence

Voici un exemple de séquence de IOCTL dans le gestionnaire de ressources de carte à puce :

Séquence de démarrage

  1. Utilisez l’API DevObj ou CfgMgr avec le GUID de l’interface de périphérique d’accès à la carte à puce pour découvrir le nom du pilote de périphérique NFC et l’utiliser avec CreateFile pour ouvrir un handle d’appareil.

  2. Initialisez le pool de threads.

  3. Déterminez le nom du lecteur.

    • IOCTL_SMARTCARD_GET_ATTRIBUTE sur SCARD_ATTR_VENDOR_NAME, SCARD_ATTR_VENDOR_IFD_TYPE et SCARD_ATTR_DEVICE_UNIT
  4. Déterminez les caractéristiques du lecteur.

    • IOCTL_SMARTCARD_GET_ATTRIBUTE sur SCARD_ATTR_CHARACTERISTICS
  5. Démarrez le moniteur d’état de la carte.

    • IOCTL_SMARTCARD_IS_PRESENT : pour attendre l’arrivée d’une carte à puce.

    • IOCTL_SMARTCARD_IS_ABSENT : pour attendre le départ de la carte à puce.

La réinitialisation de l’alimentation n’est pas pertinente, car nous ne prenons pas en charge l’état SCARD_SWALLOWED, SCARD_POWERED.

Séquence de connexion

  1. Début de la boucle.

  2. IOCTL_SMARTCARD_GET_STATE

    • Dans les cas SCARD_UNKNOWN et SCARD_ABSENT, ne rien faire.

    • Dans le cas de SCARD_PRESENT, avaler la carte

    • Cas SCARD_SWALLOWED, réinitialisation à froid

    • Dans le cas de SCARD_POWERED, réinitialisation à chaud

    • Dans le cas de SCARD_NEGOTIABLE, déterminer l’ATR de la carte

    • Cas SCARD_SPECIFIC, déterminez l'ATR de la carte et le protocole

  3. IOCTL_SMARTCARD_SET_PROTOCOL

Séquence de déconnexion

  1. Le délai de mise hors tension démarre.

  2. Début de la boucle.

  3. IOCTL_SMARTCARD_GET_STATE

    • Dans le cas de SCARD_SPECIFIC, SCARD_NEGOTIABLE, SCARD_POWERED, régler la mise hors tension

    • Dans le cas de SCARD_SWALLOWED et SCARD_PRESENT, ne rien faire

    • Dans le cas de SCARD_ABSENT et SCARD_UNKNOWN : ne rien faire.