IOCTL_SMARTCARD_TRANSMIT IOCTL (winsmcrd.h)
La demande IOCTL_SMARTCARD_TRANSMIT transmet des données à la carte à puce insérée et reçoit les données de celle-ci.
Code principal
Mémoire tampon d’entrée
- Irp->AssociatedIrp.SystemBuffer pointeur vers une structure SCARD_IO_REQUEST suivie des données à transmettre à la carte à puce insérée.
Longueur de la mémoire tampon d’entrée
- Parameters.DeviceIoControl.InputBufferLength Contient la taille de la structure, ainsi que la longueur des octets de données de fin (le cas échéant). Le membre dwProtocol doit être défini sur le protocole précédemment sélectionné, et le membre cbPciLength doit être défini sur la taille de la structure SCARD_IO_REQUEST elle-même (généralement huit octets). La structure est utilisée pour les futurs protocoles. Les données qui seront transmises à la carte doivent immédiatement suivre cette structure.
Mémoire tampon de sortie
La mémoire tampon d’octets contient le résultat de la transmission. La mémoire tampon pointe vers la structure SCARD_IO_REQUEST immédiatement suivie des données reçues.
- Irp->AssociatedIrp.SystemBuffer reçoit le résultat de la transmission. Cette mémoire tampon doit également commencer par une structure SCARD_IO_REQUEST. Toutes les données reçues de la carte doivent être stockées immédiatement après la structure.
Longueur de la mémoire tampon de sortie
- Parameters.DeviceIoControl.OutputBufferLength Contient la longueur de la mémoire tampon de sortie.
Bloc d’état
Irp->IoStatus.Status est défini sur l’une des valeurs suivantes.
Valeur | Signification |
---|---|
STATUS_SUCCESS | La transmission a réussi. |
STATUS_NO_MEDIA | Aucune carte à puce n’est détectée dans le lecteur. |
STATUS_IO_TIMEOUT | L’opération a expiré. |
STATUS_INVALID_DEVICE_STATE | Le protocole dans le fichier d’en-tête ne correspond pas au protocole de carte à puce qui a été sélectionné précédemment. |
STATUS_BUFFER_TOO_SMALL | La mémoire tampon de sortie est trop petite pour les données de retour. |
STATUS_DEVICE_POWERED_OFF | Le contrôle radio de proximité est désactivé. |
Remarques
IOCTL_SMARTCARD_TRANSMIT transmet des données du client à la carte à puce détectée dans ISO7816-4 APDU conforme. Ces APDUs sont interprétés en ce qui concerne la spécification PC/SC (la section 4.3.7 présente des exigences plus détaillées sur la prise en charge des différents formats de balise sans contact NFC). Étant donné que la fonctionnalité NFP partage le même pilote avec la carte à puce, la carte doit être connectée juste après la découverte, aucune connexion explicite pour la « transmission » n’est nécessaire.
Étant donné que la mémoire tampon d’entrée et la mémoire tampon de sortie pointent vers la même zone de mémoire, le pilote doit éviter de remplacer les données d’entrée. Utilisez la bibliothèque de pilotes de carte à puce pour vous assurer que les données d’entrée ne sont pas remplacées.
Exigences
Exigence | Valeur |
---|---|
d’en-tête | winsmcrd.h |