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é.
[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 |