Partager via


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
SCARD_ATTR_ATR_STRING
Réponse à la réinitialisation de la chaîne (ATR).
SCARD_ATTR_CHANNEL_ID
DWORD encodé en tant que 0xDDDDCCCC, où DDDDD = type de canal de données et CCCC = numéro de canal :
  • Les encodages suivants sont définis pour DDDD :
  • 0x01 E/S série ; CCCC est un numéro de port.
  • 0x02 e/s parallèles ; CCCC est un numéro de port.
  • 0x04 port clavier PS/2 ; CCCC est égal à zéro.
  • 0x08 SCSI ; CCCC est le numéro d’ID SCSI.
  • 0x10 IDE ; CCCC est le numéro d’appareil.
  • 0x20 USB ; CCCC est le numéro d’appareil.
  • 0xF interface définie par le fournisseury avec y dans la plage zéro à 15 ; CCCC est défini par le fournisseur.
SCARD_ATTR_CHARACTERISTICS
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 :
  • 0x00000001 Mécanisme d’avalage de carte
  • mécanisme d’éjection de carte 0x00000002
  • mécanisme de capture de carte 0x00000004
Toutes les autres valeurs sont réservées pour une utilisation future (RFU).
SCARD_ATTR_CURRENT_BWT
Délai d’attente du bloc actuel.
SCARD_ATTR_CURRENT_CLK
Fréquence d’horloge actuelle, en kHz.
SCARD_ATTR_CURRENT_CWT
Temps d’attente du caractère actuel.
SCARD_ATTR_CURRENT_D
Facteur de conversion de débit binaire.
SCARD_ATTR_CURRENT_EBC_ENCODING
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)

SCARD_ATTR_CURRENT_F
Facteur de conversion d’horloge.
SCARD_ATTR_CURRENT_IFSC
Taille d’octet actuelle pour la taille des champs d’informations carte.
SCARD_ATTR_CURRENT_IFSD
Taille d’octet actuelle pour l’appareil de taille de champ d’informations.
SCARD_ATTR_CURRENT_N
Heure actuelle de la garde.
SCARD_ATTR_CURRENT_PROTOCOL_TYPE
DWORD encodé comme 0x0rrrpppprrr 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.)
SCARD_ATTR_CURRENT_W
Temps d’attente actuel du travail.
SCARD_ATTR_DEFAULT_CLK
Fréquence d’horloge par défaut, en kHz.
SCARD_ATTR_DEFAULT_DATA_RATE
Débit de données par défaut, en bps.
SCARD_ATTR_DEVICE_FRIENDLY_NAME
Nom d’affichage du lecteur.
SCARD_ATTR_DEVICE_IN_USE
Réservé pour un usage futur.
SCARD_ATTR_DEVICE_SYSTEM_NAME
Nom du système du lecteur.
SCARD_ATTR_DEVICE_UNIT
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.
SCARD_ATTR_ICC_INTERFACE_STATUS
Octet unique. Zéro si le contact électrique intelligent carte n’est pas actif ; différent de zéro si le contact est actif.
SCARD_ATTR_ICC_PRESENCE
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.

SCARD_ATTR_ICC_TYPE_PER_ATR
Octet unique indiquant le type de carte intelligent :

0 = type inconnu

1 = 7816 Asynchrone

2 = 7816 Synchrone

Autres valeurs RFU.

SCARD_ATTR_MAX_CLK
Fréquence d’horloge maximale, en kHz.
SCARD_ATTR_MAX_DATA_RATE
Débit de données maximal, en points de base.
SCARD_ATTR_MAX_IFSD
Nombre maximal d’octets pour l’appareil de taille de fichier d’informations.
SCARD_ATTR_POWER_MGMT_SUPPORT
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.
SCARD_ATTR_PROTOCOL_TYPES
DWORD encodé comme 0x0rrrpppprrr 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.
SCARD_ATTR_VENDOR_IFD_SERIAL_NO
Numéro de série de l’appareil d’interface fourni par le fournisseur.
SCARD_ATTR_VENDOR_IFD_TYPE
Type d’appareil d’interface fourni par le fournisseur (désignation du modèle de lecteur).
SCARD_ATTR_VENDOR_IFD_VERSION
Version de l’appareil d’interface fournie par le fournisseur (DWORD au format 0xMMmmbbbbMM = version principale, mm = version mineure et bbbb = numéro de build).
SCARD_ATTR_VENDOR_NAME
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
Success
SCARD_S_SUCCESS.
Valeur d’attribut non prise en charge.
ERROR_NOT_SUPPORTED.
Autre échec
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

Voir aussi

SCardConnect

SCardFreeMemory

SCardSetAttrib