Fonction SCardGetAttrib (winscard.h)
La fonction SCardGetAttrib récupère les attributs de lecteur actuels pour le handle donné. Cela n’affecte pas l’état du lecteur, du pilote ou du carte.
Syntaxe
LONG SCardGetAttrib(
[in] SCARDHANDLE hCard,
[in] DWORD dwAttrId,
[out] LPBYTE pbAttr,
[in, out] LPDWORD pcbAttrLen
);
Paramètres
[in] hCard
Valeur de référence retournée par SCardConnect.
[in] dwAttrId
Identificateur de l’attribut à obtenir. Le tableau suivant répertorie les valeurs possibles pour dwAttrId. Ces valeurs sont en lecture seule. Notez que les fournisseurs peuvent ne pas prendre en charge tous les attributs.
Valeur | Signification |
---|---|
|
Réponse à la réinitialisation de la chaîne (ATR). |
|
DWORD encodé en tant que 0xDDDDCCCC, où DDDDD = type de canal de données et CCCC = numéro de canal :
|
|
DWORD indiquant les caractéristiques mécaniques prises en charge. Si zéro, aucune caractéristique spéciale n’est prise en charge. Notez que plusieurs bits peuvent être définis :
|
|
Délai d’attente du bloc actuel. |
|
Fréquence d’horloge actuelle, en kHz. |
|
Temps d’attente du caractère actuel. |
|
Facteur de conversion de débit binaire. |
|
Encodage actuel du contrôle de bloc d’erreur.
0 = case activée de redondance longitudinale (LRC) 1 = case activée de redondance cyclique (CRC) |
|
Facteur de conversion d’horloge. |
|
Taille d’octet actuelle pour la taille des champs d’informations carte. |
|
Taille d’octet actuelle pour l’appareil de taille de champ d’informations. |
|
Heure actuelle de la garde. |
|
DWORD encodé comme 0x0rrrpppp où rrr est RFU et doit être 0x000. pppp encode le type de protocole actuel. Le bit défini indique quel protocole ISO est actuellement utilisé. (Par exemple, si le bit zéro est défini, le protocole T=0 est en vigueur.) |
|
Temps d’attente actuel du travail. |
|
Fréquence d’horloge par défaut, en kHz. |
|
Débit de données par défaut, en bps. |
|
Nom d’affichage du lecteur. |
|
Réservé pour un usage futur. |
|
Nom du système du lecteur. |
|
Instance du lecteur de ce fournisseur attachée à l’ordinateur. La première instance sera l’unité d’appareil 0, la suivante sera l’unité 1 (s’il s’agit de la même marque de lecteur) et ainsi de suite. Deux marques différentes de lecteurs auront tous deux zéro pour cette valeur. |
|
Octet unique. Zéro si le contact électrique intelligent carte n’est pas actif ; différent de zéro si le contact est actif. |
|
Octet unique indiquant la présence carte intelligente : 0 = non présent 1 = carte présents mais pas avalés (s’applique uniquement si le lecteur prend en charge l’avalage intelligent carte) 2 = carte présent (et avalé si le lecteur prend en charge l’avalage intelligent carte) 4 = carte confisqués. |
|
Octet unique indiquant le type de carte intelligent : 0 = type inconnu 1 = 7816 Asynchrone 2 = 7816 Synchrone Autres valeurs RFU. |
|
Fréquence d’horloge maximale, en kHz. |
|
Débit de données maximal, en points de base. |
|
Nombre maximal d’octets pour l’appareil de taille de fichier d’informations. |
|
Zéro si l’appareil ne prend pas en charge la mise hors tension pendant l’insertion d’une carte intelligente. Sinon, valeur différente de zéro. |
|
DWORD encodé comme 0x0rrrpppp où rrr est RFU et doit être 0x000. pppp encode les types de protocoles pris en charge. Un « 1 » dans une position de bits donnée indique la prise en charge du protocole ISO associé. Par conséquent, si les bits zéro et un sont définis, les protocoles T=0 et T=1 sont pris en charge. |
|
Numéro de série de l’appareil d’interface fourni par le fournisseur. |
|
Type d’appareil d’interface fourni par le fournisseur (désignation du modèle de lecteur). |
|
Version de l’appareil d’interface fournie par le fournisseur (DWORD au format 0xMMmmbbbb où MM = version principale, mm = version mineure et bbbb = numéro de build). |
|
Nom du fournisseur. |
[out] pbAttr
Pointeur vers une mémoire tampon qui reçoit l’attribut dont l’ID est fourni dans dwAttrId. Si cette valeur est NULL, SCardGetAttrib ignore la longueur de la mémoire tampon fournie dans pcbAttrLen, écrit la longueur de la mémoire tampon qui aurait été retournée si ce paramètre n’avait pas été NULL pour pcbAttrLen et retourne un code de réussite.
[in, out] pcbAttrLen
Longueur de la mémoire tampon pbAttr en octets et reçoit la longueur réelle de l’attribut reçu Si la longueur de la mémoire tampon est spécifiée comme SCARD_AUTOALLOCATE, pbAttr est converti en pointeur vers un pointeur d’octet et reçoit l’adresse d’un bloc de mémoire contenant l’attribut. Ce bloc de mémoire doit être libéré avec SCardFreeMemory.
Valeur retournée
Cette fonction retourne des valeurs différentes selon qu’elle réussit ou échoue.
Code de retour | Description |
---|---|
|
SCARD_S_SUCCESS. |
|
ERROR_NOT_SUPPORTED. |
|
Code d'erreur. Pour plus d’informations, consultez Valeurs de retour de carte à puce. |
Remarques
La fonction SCardGetAttrib est une fonction d’accès direct carte. Pour plus d’informations sur d’autres fonctions d’accès direct, consultez Fonctions d’accès à la carte directe.
Exemples
L’exemple suivant montre comment récupérer un attribut pour un lecteur carte. L’exemple suppose que hCardHandle est un handle valide obtenu à partir d’un appel précédent à la fonction SCardConnect .
LPBYTE pbAttr = NULL;
DWORD cByte = SCARD_AUTOALLOCATE;
DWORD i;
LONG lReturn;
lReturn = SCardGetAttrib(hCardHandle,
SCARD_ATTR_VENDOR_NAME,
(LPBYTE)&pbAttr,
&cByte);
if ( SCARD_S_SUCCESS != lReturn )
{
if ( ERROR_NOT_SUPPORTED == lReturn )
printf("Value not supported\n");
else
{
// Some other error occurred.
printf("Failed SCardGetAttrib - %x\n", lReturn);
exit(1); // Or other appropriate action
}
}
else
{
// Output the bytes.
for (i = 0; i < cByte; i++)
printf("%c", *(pbAttr+i));
printf("\n");
// Free the memory when done.
// hContext was set earlier by SCardEstablishContext
lReturn = SCardFreeMemory( hContext, pbAttr );
}
Configuration requise
Condition requise | Valeur |
---|---|
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 |