ScardTransmit SCARD_E_INVALID_PARAMETER winscard [Résolu]

Signaler
Messages postés
109
Date d'inscription
samedi 3 novembre 2007
Statut
Membre
Dernière intervention
4 février 2016
-
Messages postés
109
Date d'inscription
samedi 3 novembre 2007
Statut
Membre
Dernière intervention
4 février 2016
-
Bonjour

Je suis en train de développer une application c en utilisant Visual Studio 2008 pour écrire sur une smartcard ISO-7816.

Au niveau de la fonction SCardTransmit le code d'erreur de retour est -2146435068 qui veut dire SCARD _INVALID_PARAMETER.

Pourtant je crois passer en paramètre des types cohérents.
Ci dessous est mon code

BYTE commande[] = {0x00,0xb4,0x03,0x00};
LPSCARD_IO_REQUEST pioRecvPci;
DWORD cbSendLength,num_rec;
BYTE buff_rec[10];

[...]

//Établissement du contexte + connexion carte ... on été déjà effectué avec succès
[...]
cbSendLength=sizeof(commande); CardFlag = SCardTransmit(hCardHandle,SCARD_PCI_T0,commande,cbSendLength,pioRecvPci,buff_rec,&num_rec );

J'ai essayer quelque casting mais cela n'a pas marché aussi.

y aurait il quelqu'un qui puisse m'aider ?
Merci beaucoup !

5 réponses

Messages postés
109
Date d'inscription
samedi 3 novembre 2007
Statut
Membre
Dernière intervention
4 février 2016

Bonjour

Dans mon cas il fallait remplacer pioRecvPci par NULL.

Merci pour votre aide ;)
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,

verifie ce que retourne sizeof(commande).

BYTE commande[4] = {0x00,0xb4,0x03,0x00};

devrait retourner 4.

BYTE commande[]

je ne suis pas sur, c'est peut-être 0 et il faudrait utiliser "length".

@++
Messages postés
109
Date d'inscription
samedi 3 novembre 2007
Statut
Membre
Dernière intervention
4 février 2016

Salut
sizeof() retourne 4, je n'arrive toujours pas à localiser le problème !
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
re,

The cbSendLength parameter must be set to the size of the T=0 header information (CLA, INS, P1, and P2) plus a byte that contains the length of the data to be transferred (n), plus the size of data to be sent. In this example, this is n+5.

c'est ici.

@++
Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
re,


A priori, il faut bien envoyer une taille = 4 dans ton cas, par contre, num_rec n'est pas initialisé, de même que pioRecvPci alors que tu reclames le remplissage de le structure je crois.

SCARD_IO_REQUEST pioRecvPc;

et transmettre "&pioRecvPci".

@++