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
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.
Initialiser le pool de threads.
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
Déterminez les caractéristiques du lecteur.
- IOCTL_SMARTCARD_GET_ATTRIBUTE sur SCARD_ATTR_CHARACTERISTICS
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
Début de boucle.
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
IOCTL_SMARTCARD_SET_PROTOCOL
Séquence de déconnexion
Le délai d’attente de mise hors tension démarre.
Début de boucle.
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