structure SMARTCARD_EXTENSION (smclib.h)
La structure SMARTCARD_EXTENSION est utilisée par le pilote de lecteur de carte à puce et la bibliothèque de pilotes de carte à puce pour accéder à toutes les autres structures de données de carte à puce.
Syntaxe
typedef struct _SMARTCARD_EXTENSION {
ULONG Version;
VENDOR_ATTR VendorAttr;
NTSTATUS( *ReaderFunction[16];
SCARD_CARD_CAPABILITIES CardCapabilities;
ULONG LastError;
struct {
PULONG Information;
PUCHAR RequestBuffer;
ULONG RequestBufferLength;
PUCHAR ReplyBuffer;
ULONG ReplyBufferLength;
} IoRequest;
ULONG MajorIoControlCode;
ULONG MinorIoControlCode;
POS_DEP_DATA OsData;
SCARD_READER_CAPABILITIES ReaderCapabilities;
PREADER_EXTENSION ReaderExtension;
SMARTCARD_REPLY SmartcardReply;
SMARTCARD_REQUEST SmartcardRequest;
T0_DATA T0;
T1_DATA T1;
PPERF_INFO PerfInfo;
ULONG Reserved[25 - sizeof(PPERF_INFO)];
} *PSMARTCARD_EXTENSION, SMARTCARD_EXTENSION;
Membres
Version
Indique la version de cette structure.
VendorAttr
Contient des informations qui identifient le pilote de lecteur, comme le nom du fournisseur, le numéro d’unité et le numéro de série.
ReaderFunction[16]
La ligne du bloc de syntaxe doit lire NTSTATUS (*ReaderFunction[16])(PSMARTCARD_EXTENSION);
Pointeur vers un tableau de fonctions de rappel pour les lecteurs. Fonctions de rappel qu’un pilote de lecteur fourni par le fournisseur peut implémenter. Un pilote de lecteur rend ces fonctions de rappel disponibles pour la routine de bibliothèque de cartes à puce, SmartcardDeviceControl, pour appeler en stockant des pointeurs vers eux dans l’extension de périphérique de carte à puce.
- RDF_ATR_PARSE
- RDF_CARD_EJECT
- RDF_CARD_POWER
- RDF_CARD_TRACKING
- RDF_IOCTL_VENDOR
- RDF_READER_SWALLOW
- RDF_SET_PROTOCOL
- RDF_TRANSMIT
CardCapabilities
Contient des fonctionnalités de la carte à puce insérée.
LastError
Non utilisé.
IoRequest
Structure avec les membres suivants :
IoRequest.Information
Contient le nombre d’octets retournés.
IoRequest.RequestBuffer
Pointeur vers les données de la demande d’E/S de l’utilisateur à envoyer à la carte.
IoRequest.RequestBufferLength
Indique le nombre d’octets à envoyer à la carte.
IoRequest.ReplyBuffer
Pointeur vers la mémoire tampon qui contient les données retournées par la requête d’E/S.
IoRequest.ReplyBufferLength
Indique le nombre d’octets des données retournées par la requête d’E/S.
MajorIoControlCode
Contient le code principal du contrôle d’E/S.
MinorIoControlCode
Contient le code de contrôle d’E/S secondaire.
OsData
Contient des informations spécifiques au système d’exploitation et au type de pilote.
ReaderCapabilities
Contient les fonctionnalités du lecteur de clavier.
ReaderExtension
Contient des données spécifiques au lecteur de carte à puce.
SmartcardReply
Contient des données provenant du lecteur.
SmartcardRequest
Contient la commande actuelle et les données envoyées à la carte à puce.
T0
Contient les données à utiliser avec le protocole T=0.
T1
Contient les données utilisées avec le protocole T=1.
PerfInfo
Reserved[25 - sizeof(PPERF_INFO)]
Réservé à l’utilisation du système.
Remarques
Cette structure est passée à toutes les fonctions de rappel.
Les fonctions de rappel individuelles sont identifiées par une série de valeurs constantes qui doivent être utilisées comme index dans le tableau ReaderFunction.
Index | Description | ||||||||
---|---|---|---|---|---|---|---|---|---|
RDF_ATR_PARSE | Optionnel. La fonction d’analyse RDF_ATR_PARSE analyse une réponse à réinitialiser (ATR) pour la bibliothèque de pilotes de carte à puce lorsque la bibliothèque de pilotes de pilotes ne peut pas reconnaître ou analyser la bibliothèque de pilotes de carte à puce. | ||||||||
RDF_CARD_EJECT | Optionnel. fonction de rappel RDF_CARD_EJECT La fonction de rappel RDF_CARD_EJECT éjecte une carte à puce insérée du lecteur. |
||||||||
RDF_CARD_POWER | La fonction de rappel RDF_CARD_POWER réinitialise ou désactive une carte à puce insérée. Il est obligatoire pour les pilotes de lecteur de carte à puce d’implémenter cette fonction de rappel.
Lors de l’entrée, la structure pointée par SmartcardExtension doit avoir les valeurs membres suivantes :
|
||||||||
RDF_CARD_TRACKING | La fonction de rappel RDF_CARD_TRACKING installe un gestionnaire d’événements pour suivre chaque fois qu’une carte est insérée ou supprimée d’un lecteur de carte. Il est obligatoire pour les pilotes de lecteur de carte à puce d’implémenter cette fonction de rappel.
Lors de la réception d’une demande de IOCTL_SMARTCARD_IS_PRESENT, la bibliothèque de pilotes détermine si la carte à puce est déjà présente. Si la carte à puce est présente, la bibliothèque de pilotes termine la demande avec l’état de STATUS_SUCCESS. Si aucune carte à puce n’est présente, la bibliothèque de pilotes appelle la fonction de rappel de suivi de carte à puce du pilote de lecteur, et le pilote lecteur commence à rechercher la carte à puce. Après avoir lancé le suivi des cartes à puce, la bibliothèque de pilotes marque la demande comme ayant l’état de STATUS_PENDING. La bibliothèque de pilotes termine la requête. des pilotes de périphérique WDM La bibliothèque de pilotes WDM correspondante ajoute un pointeur à la requête dans SmartcardExtension->OsData->NotificationIrp. Le pilote de lecteur doit effectuer la demande dès qu’il détecte qu’une carte à puce a été insérée ou supprimée. Le pilote de lecteur termine la requête en appelant IoCompleteRequest, après quoi, le pilote de lecteur doit définir le membre NotificationIrp de SmartcardExtension -> OsData à NULL pour informer la bibliothèque de pilotes que le pilote de lecteur peut accepter d’autres demandes de suivi de carte à puce. Étant donné que cet appel peut avoir une durée indéfinie et que l’appelant peut mettre fin à la demande avant qu’elle soit terminée, il est important de marquer cet IRP comme pouvant être annulé.
|
||||||||
RDF_IOCTL_VENDOR | La fonction de rappel RDF_IOCTL_VENDOR effectue des opérations IOCTL spécifiques au fournisseur. Il est facultatif pour les pilotes de lecteur de carte à puce d’implémenter cette fonction de rappel.
Lors de l’entrée, l’appelant doit transmettre les valeurs suivantes à la fonction :
|
||||||||
RDF_READER_SWALLOW | La fonction de rappel RDF_READER_SWALLOW effectue une avale mécanique, ce qui se passe lorsque la carte à puce est entièrement insérée dans le lecteur de carte à puce. Il est facultatif pour les pilotes de lecteur de carte à puce d’implémenter cette fonction de rappel. | ||||||||
RDF_SET_PROTOCOL | La fonction de rappel RDF_SET_PROTOCOL sélectionne un protocole de transmission pour la carte à puce insérée. Les pilotes de lecteur de carte à puce doivent implémenter cette fonction de rappel.
Lors de l’entrée, l’appelant doit transmettre les valeurs suivantes à la fonction :
|
||||||||
RDF_TRANSMIT | La fonction de rappel RDF_TRANSMIT effectue des transmissions de données. Les pilotes de lecteur de carte à puce doivent implémenter cette fonction de rappel.
Lors de l’entrée, l’appelant doit transmettre les valeurs suivantes à la fonction :
Le membre dwProtocol doit contenir l’identificateur de protocole retourné par un appel à IOCTL_SMARTCARD_SET_PROTOCOL. Le membre cbPciLength contient la taille, en octets, de la structure SCARD_IO_REQUEST. La taille de cette structure est généralement de 8 octets. La structure SCARD_IO_REQUEST est suivie des données (protocole) à transmettre à la carte. Selon le protocole à utiliser pour la transmission, la bibliothèque offre plusieurs fonctions de prise en charge. Pour plus d’informations sur ces fonctions de prise en charge, consultez SmartcardT0Request (WDM) et SmartcardT1Request (WDM). RequestBuffer et ReplyBuffer pointent vers la même mémoire tampon système. Si vous utilisez la fonction de bibliothèque SmartcardxxRequest et SmartcardxxReply, vous ne remplacerez pas la mémoire tampon d’entrée. Si vous n’utilisez pas ces fonctions, effectuez une copie de la RequestBuffer avant de commencer les transmissions. Vous devez copier la structure SCARD_IO_REQUEST dans le paramètre ReplyBuffer, suivi des données reçues de la carte. Là encore, si vous utilisez les fonctions SmartcardxxRequest et SmartcardxxReply, la bibliothèque copie la structure pour vous. |
Exigences
Exigence | Valeur |
---|---|
d’en-tête | smclib.h (include Smclib.h) |