SMARTCARD_EXTENSION structure (smclib.h)
La structure SMARTCARD_EXTENSION est utilisée par le pilote de lecteur de carte intelligent et la bibliothèque de pilotes smart carte pour accéder à toutes les autres structures de données de carte intelligentes.
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, telles que 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 être lue 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 smart carte, SmartcardDeviceControl, à appeler en stockant des pointeurs vers ces fonctions dans l’extension de périphérique smart carte.
- 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 les fonctionnalités du carte intelligent inséré.
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 dans la demande d’E/S de l’utilisateur à envoyer au carte.
IoRequest.RequestBufferLength
Indique le nombre d’octets à envoyer à l’carte.
IoRequest.ReplyBuffer
Pointeur vers la mémoire tampon qui contient les données retournées par la demande d’E/S.
IoRequest.ReplyBufferLength
Indique le nombre d’octets des données retournées par la demande d’E/S.
MajorIoControlCode
Contient le code de contrôle d’E/S principal.
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 clavier.
ReaderExtension
Contient des données spécifiques au lecteur smart carte.
SmartcardReply
Contient des données provenant du lecteur.
SmartcardRequest
Contient la commande active et les données envoyées au carte intelligent.
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é pour le 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 | facultatif. La fonction d’analyse RDF_ATR_PARSE analyse une réponse à la réinitialisation (ATR) pour la bibliothèque de pilotes smart carte lorsque la bibliothèque de pilotes ne parvient pas à reconnaître ou à analyser la bibliothèque de pilotes smart carte. | ||||||||
RDF_CARD_EJECT | facultatif. RDF_CARD_EJECT fonction de rappel La fonction de rappel RDF_CARD_EJECT éjecte un carte intelligent inséré du lecteur. |
||||||||
RDF_CARD_POWER | La fonction de rappel RDF_CARD_POWER réinitialise ou désactive un carte intelligent inséré. Il est obligatoire pour les pilotes de lecteur smart carte d’implémenter cette fonction de rappel.
Lors de l’entrée, la structure pointée par SmartcardExtension doit avoir les valeurs de membre suivantes :
|
||||||||
RDF_CARD_TRACKING | La fonction de rappel RDF_CARD_TRACKING installe un gestionnaire d’événements pour effectuer le suivi chaque fois qu’un carte est inséré ou supprimé d’un lecteur carte. Il est obligatoire pour les pilotes de lecteur smart carte 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 le carte intelligent est déjà présent. Si le carte intelligent est présent, la bibliothèque de pilotes termine la requête avec un status de STATUS_SUCCESS. Si aucune carte intelligente n’est présente, la bibliothèque de pilotes appelle la fonction de rappel de suivi intelligente carte du pilote lecteur, et le pilote de lecteur commence à rechercher le carte intelligent. Après avoir lancé le suivi carte intelligent, la bibliothèque de pilotes marque la requête comme ayant un status de STATUS_PENDING. La bibliothèque de pilotes termine la requête. 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 terminer la demande dès qu’il détecte qu’un carte intelligent a été inséré ou supprimé. Le pilote de lecteur termine la demande en appelant IoCompleteRequest, après quoi, le pilote de lecteur doit définir le membre NotificationIrp de SmartcardExtension -> OsData sur NULL pour informer la bibliothèque de pilotes que le pilote de lecteur peut accepter d’autres demandes de suivi de carte intelligentes. Étant donné que cet appel peut avoir une durée indéfinie et que l’appelant peut terminer la demande avant qu’elle ne soit terminée, il est important de marquer ce IRP comme annulable.
|
||||||||
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 smart carte d’implémenter cette fonction de rappel.
Lors de l’entrée, l’appelant doit passer les valeurs suivantes à la fonction :
|
||||||||
RDF_READER_SWALLOW | La fonction de rappel RDF_READER_SWALLOW effectue une hirondelle mécanique, ce qui se produit lorsque le carte intelligent est entièrement inséré dans le lecteur de carte intelligent. Il est facultatif pour les pilotes de lecteur smart carte d’implémenter cette fonction de rappel. | ||||||||
RDF_SET_PROTOCOL | La fonction de rappel RDF_SET_PROTOCOL sélectionne un protocole de transmission pour le carte intelligent inséré. Les pilotes de lecteur smart carte doivent implémenter cette fonction de rappel.
Lors de l’entrée, l’appelant doit passer les valeurs suivantes à la fonction :
|
||||||||
RDF_TRANSMIT | La fonction de rappel RDF_TRANSMIT effectue des transmissions de données. Les pilotes de lecteur smart carte doivent implémenter cette fonction de rappel.
Lors de l’entrée, l’appelant doit passer 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 de données (protocole) à transmettre au carte. Selon le protocole à utiliser pour la transmission, la bibliothèque offre plusieurs fonctions de support. 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 les fonctions 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 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 du carte. Là encore, si vous utilisez les fonctions SmartcardxxRequest et SmartcardxxReply , la bibliothèque copie la structure pour vous. |
Configuration requise
Condition requise | Valeur |
---|---|
En-tête | smclib.h (inclure Smclib.h) |