Partager via


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

IRP_MJ_DEVICE_CONTROL

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

Voir aussi

guide de conception nfc (Near Field Communication)

guide de conception de carte à puce