Routines de rappel de la bibliothèque de pilotes de carte à puce
L’architecture smart carte définit un ensemble de types de routine de rappel standard. Pour plus d’informations sur ces routines, consultez Rappels de pilotes de carte à puce.
Un pilote de lecteur doit rendre ces routines de rappel disponibles pour la routine de bibliothèque de pilotes, SmartcardDeviceControl (WDM), à appeler en stockant des pointeurs vers celles-ci dans l’extension de périphérique smart carte, qui est de type SMARTCARD_EXTENSION. Ces pointeurs sont stockés dans un tableau situé dans le membre ReaderFunction de SMARTCARD_EXTENSION structure. Les routines de rappel individuelles peuvent être identifiées par une série de valeurs constantes, qui doivent être utilisées comme index dans le tableau ReaderFunction .
Par instance, si vous souhaitez que SmartcardDeviceControl appelle une routine de rappel dans votre pilote de lecteur nommée DriverCardPower chaque fois qu’il termine le traitement d’une demande de IOCTL_SMARTCARD_POWER, vous devez utiliser la constante RDF_CARD_POWER pour initialiser l’extension de périphérique de la manière suivante :
SmartcardExtension->ReaderFunction[RDF_CARD_POWER] =
DriverCardPower;
RDF_CARD_POWER est une constante fixe définie par le système qui correspond toujours à la routine de rappel qui prend en compte la requête IOCTL_SMARTCARD_POWER.
Si le membre du tableau ReaderFunction qui correspond au IOCTL en cours de traitement est NULL, SmartcardDeviceControl retourne une status de STATUS_NOT_SUPPORTED au pilote de lecteur. Dans certains cas, ce comportement est utile. Si, par exemple, votre pilote ne prend pas en charge l’éjection carte ou l’ingestion de carte, il vous suffit d’affecter au membre approprié du tableau ReaderFunction la valeur NULL, et SmartcardDeviceControl retourne STATUS_NOT_SUPPORTED chaque fois que cette routine membre est appelée.
Le tableau suivant répertorie les constantes qui identifient les différents types de routines de rappel. Il s’agit des constantes que vous devez utiliser comme index dans le tableau ReaderFunction . Le tableau fournit également une brève description de chaque type de routine et indique s’il est obligatoire ou facultatif pour un pilote de lecteur d’implémenter la routine.
Index | Description de la routine de rappel correspondante | Implémentation par le pilote de lecteur |
---|---|---|
Réinitialise ou désactive un carte intelligent inséré |
Obligatoire |
|
Éjecte un carte intelligent inséré |
Facultatif |
|
Installe un gestionnaire d’événements pour suivre carte insertions et suppressions |
Obligatoire |
|
Effectue des opérations IOCTL spécifiques au fournisseur |
Facultatif |
|
Est-ce qu’une hirondelle mécanique |
Facultatif |
|
Sélectionne un protocole de transmission pour le carte qui se trouve dans le lecteur carte |
Obligatoire |
|
Effectue des transmissions de données |
Obligatoire |
Lorsque le pilote de lecteur appelle ces routines, il doit récupérer les paramètres d’appel à partir des mémoires tampons d’entrée, comme décrit dans Rappels de pilotes de carte à puce. Le pilote de lecteur doit également stocker les données de sortie dans les zones de mémoire tampon appropriées, comme décrit dans la même section.
Lorsqu’une routine de rappel autre que la routine de rappel de suivi carte retourne STATUS_PENDING, la bibliothèque de carte intelligente cesse de traiter les appels supplémentaires du pilote de lecteur. (Pour plus d’informations sur la routine de rappel de suivi carte, consultez RDF_CARD_TRACKING.) Si le pilote de lecteur tente d’utiliser une routine de bibliothèque de pilotes alors que la bibliothèque est dans cet état, la routine de bibliothèque retourne une status de STATUS_DEVICE_BUSY. Cela empêche efficacement le pilote de lecteur de traiter les requêtes IOCTL du gestionnaire de ressources, car le pilote de lecteur ne peut pas traiter les demandes IOCTL s’il ne peut pas appeler SmartcardDeviceControl.