IOCTL_SMARTCARD_TRANSMIT IOCTL (winsmcrd.h)

La demande de IOCTL_SMARTCARD_TRANSMIT transmet des données à l’carte intelligente insérée et reçoit les données à partir de celle-ci.

Code principal

IRP_MJ_DEVICE_CONTROL

Mémoire tampon d'entrée

  • Irp->AssociatedIrp.SystemBuffer Pointeur vers une structure de SCARD_IO_REQUEST suivi des données à transmettre au carte intelligent inséré.

Longueur de la mémoire tampon d’entrée

  • Parameters.DeviceIoControl.InputBufferLength Contient la taille de la structure plus la longueur des octets de données de fin (le cas échéant). Le membre dwProtocol doit être défini sur le protocole qui a été sélectionné précédemment, 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 protocoles futurs. Les données qui seront transmises au carte doivent suivre immédiatement cette structure.

Mémoire tampon de sortie

La mémoire tampon 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 du 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 intelligente 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 smart carte précédemment sélectionné.
STATUS_BUFFER_TOO_SMALL La mémoire tampon de sortie est trop petite pour les données de retour.
STATUS_DEVICE_POWERED_OFF La radio de proximité est désactivée.

Remarques

IOCTL_SMARTCARD_TRANSMIT transmet les données du client au carte intelligent détecté dans l’API compatible ISO7816-4. Ces APDUs sont interprétés en ce qui concerne la spécification PC/SC (la section 4.3.7 contient des exigences plus détaillées sur la prise en charge des différents formats de balise NFC sans contact). Étant donné que la fonctionnalité NFP partage le même pilote avec le carte intelligent, le carte doit être connecté 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 mémoire, le pilote doit éviter de remplacer les données d’entrée. Utilisez la bibliothèque de pilotes smart carte pour vous assurer que les données d’entrée ne sont pas remplacées.

Configuration requise

Condition requise Valeur
En-tête winsmcrd.h

Voir aussi

Guide de conception de la communication en champ proche (NFC)

Guide de conception smart carte