Share via


SCardTransmit, fonction (winscard.h)

La fonction SCardTransmit envoie une demande de service au carte intelligent et s’attend à recevoir des données de la carte.

Syntaxe

LONG SCardTransmit(
  [in]                SCARDHANDLE         hCard,
  [in]                LPCSCARD_IO_REQUEST pioSendPci,
  [in]                LPCBYTE             pbSendBuffer,
  [in]                DWORD               cbSendLength,
  [in, out, optional] LPSCARD_IO_REQUEST  pioRecvPci,
  [out]               LPBYTE              pbRecvBuffer,
  [in, out]           LPDWORD             pcbRecvLength
);

Paramètres

[in] hCard

Valeur de référence retournée par la fonction SCardConnect .

[in] pioSendPci

Pointeur vers la structure d’en-tête de protocole pour l’instruction. Cette mémoire tampon est au format d’une structure SCARD_IO_REQUEST , suivie des informations pci (Protocol Control Information) spécifiques.

Pour les protocoles T=0, T=1 et Raw, la structure PCI est constante. Le sous-système smart carte fournit une structure PCI globale T=0, T=1 ou Raw, que vous pouvez référencer à l’aide des symboles SCARD_PCI_T0, SCARD_PCI_T1 et SCARD_PCI_RAW respectivement.

[in] pbSendBuffer

Pointeur vers les données réelles à écrire dans le carte.

Pour T=0, les paramètres de données sont placés dans l’adresse pointée par pbSendBuffer selon la structure suivante :

struct {
    BYTE
        bCla,   // the instruction class
        bIns,   // the instruction code 
        bP1,    // parameter to the instruction
        bP2,    // parameter to the instruction
        bP3;    // size of I/O transfer
} CmdBytes;

Les données envoyées au carte doivent suivre immédiatement la mémoire tampon d’envoi. Dans le cas particulier où aucune donnée n’est envoyée à l’carte et qu’aucune donnée n’est attendue en retour, bP3 n’est pas envoyé.

Membre Signification
bCla
Classe d’instruction T=0.
Bacs
Code d’instruction dans la classe d’instruction T=0.
bP1, bP2
Codes de référence qui complètent le code d’instruction.
bP3
Nombre d’octets de données à transmettre pendant la commande, conformément à la norme ISO 7816-4, section 8.2.1.

[in] cbSendLength

Longueur, en octets, du paramètre pbSendBuffer .

Pour T=0, dans le cas particulier où aucune donnée n’est envoyée au carte et qu’aucune donnée n’est attendue en retour, cette longueur doit indiquer que le membre bP3 n’est pas envoyé ; la longueur doit être sizeof(CmdBytes) - sizeof(BYTE).

[in, out, optional] pioRecvPci

Pointeur vers la structure d’en-tête de protocole pour l’instruction, suivi d’une mémoire tampon dans laquelle recevoir toutes les informations de contrôle de protocole (PCI) retournées spécifiques au protocole utilisé. Ce paramètre peut être NULL si aucune norme PCI n’est retournée.

[out] pbRecvBuffer

Pointeur vers toutes les données retournées par le carte.

Pour T=0, les données sont immédiatement suivies des octets SW1 et SW2 status. Si aucune donnée n’est retournée par le carte, cette mémoire tampon ne contient que les octets sw1 et SW2 status.

[in, out] pcbRecvLength

Fournit la longueur, en octets, du paramètre pbRecvBuffer et reçoit le nombre réel d’octets reçus du carte intelligent.

Cette valeur ne peut pas être SCARD_AUTOALLOCATE, car SCardTransmit ne prend pas en charge SCARD_AUTOALLOCATE.

Pour T=0, la mémoire tampon de réception doit être d’au moins deux octets pour recevoir les octets SW1 et SW2 status octets.

Valeur retournée

Si la fonction envoie correctement une demande de service au carte intelligent, la valeur de retour est SCARD_S_SUCCESS.

Si la fonction échoue, elle retourne un code d'erreur. Pour plus d’informations, consultez Valeurs de retour de carte à puce.

Remarques

La fonction SCardTransmit est une carte intelligente et une fonction d’accès lecteur. Pour plus d’informations sur les autres fonctions d’accès, consultez Fonctions d’accès par carte à puce et lecteur.

Pour le protocole T=0, les données reçues sont les codes status SW1 et SW2, éventuellement précédés des données de réponse. Les paragraphes suivants fournissent des informations sur les mémoires tampons d’envoi et de réception utilisées pour transférer des données et émettre une commande.

Exemples

L’exemple suivant montre l’envoi d’une demande de service à l’carte intelligente.

//  Transmit the request.
//  lReturn is of type LONG.
//  hCardHandle was set by a previous call to SCardConnect.
//  pbSend points to the buffer of bytes to send.
//  dwSend is the DWORD value for the number of bytes to send.
//  pbRecv points to the buffer for returned bytes.
//  dwRecv is the DWORD value for the number of returned bytes.
lReturn = SCardTransmit(hCardHandle,
                        SCARD_PCI_T0,
                        pbSend,
                        dwSend,
                        NULL,
                        pbRecv,
                        &dwRecv );
if ( SCARD_S_SUCCESS != lReturn )
{
    printf("Failed SCardTransmit\n");
    exit(1);   // or other appropriate error action
}

Configuration requise

   
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête winscard.h
Bibliothèque Winscard.lib
DLL Winscard.dll

Voir aussi

SCARD_IO_REQUEST

SCardConnect