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 utilisez-le avec CreateFile pour ouvrir un handle d’appareil.

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

    • IOCTL_SMARTCARD_IS_PRESENT : pour attendre l’arrivée d’un carte intelligent.

    • IOCTL_SMARTCARD_IS_ABSENT : pour attendre le départ du carte intelligent.

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

  2. IOCTL_SMARTCARD_GET_STATE

    • Cas SCARD_UNKNOWN et SCARD_ABSENT, ne rien faire

    • Cas SCARD_PRESENT, carte d’avale

    • SCARD_SWALLOWED cas, réinitialisation à froid

    • Cas SCARD_POWERED, réinitialisation à chaud

    • SCARD_NEGOTIABLE cas, déterminez le carte ATR

    • SCARD_SPECIFIC de cas, déterminez les carte ATR et le protocole

  3. IOCTL_SMARTCARD_SET_PROTOCOL

Séquence de déconnexion

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

  2. Début de boucle.

  3. IOCTL_SMARTCARD_GET_STATE

    • Cas SCARD_SPECIFIC, SCARD_NEGOTIABLE, SCARD_POWERED, mettre hors tension

    • Cas SCARD_SWALLOWED, SCARD_PRESENT, ne rien faire

    • SCARD_ABSENT cas, SCARD_UNKNOWN, ne rien faire