Funzione SCardGetAttrib (winscard.h)

La funzione SCardGetAttrib recupera gli attributi correnti del lettore per l'handle specificato. Non influisce sullo stato del lettore, del driver o della scheda.

Sintassi

LONG SCardGetAttrib(
  [in]      SCARDHANDLE hCard,
  [in]      DWORD       dwAttrId,
  [out]     LPBYTE      pbAttr,
  [in, out] LPDWORD     pcbAttrLen
);

Parametri

[in] hCard

Valore di riferimento restituito da SCardConnect.

[in] dwAttrId

Identificatore dell'attributo da ottenere. Nella tabella seguente sono elencati i valori possibili per dwAttrId. I valori sono di sola lettura. Si noti che i fornitori potrebbero non supportare tutti gli attributi.

Valore Significato
SCARD_ATTR_ATR_STRING
Risposta alla reimpostazione della stringa ATR.
SCARD_ATTR_CHANNEL_ID
DWORD codificato come 0xDDDDCCCCCC, dove DDDD = tipo di canale dati e CCCC = numero di canale:
  • Le codifica seguenti sono definite per DDDD:
  • 0x01 I/O seriale; CCCC è un numero di porta.
  • 0x02 I/O parallela; CCCC è un numero di porta.
  • 0x04 porta da tastiera PS/2; CCCC è zero.
  • 0x08 SCSI; CCCC è il numero ID SCSI.
  • 0x10 IDE; CCCC è il numero di dispositivo.
  • 0x20 USB; CCCC è il numero di dispositivo.
  • 0xF'interfaccia definita dal fornitore cony nell'intervallo zero fino a 15; CCCC è definito dal fornitore.
SCARD_ATTR_CHARACTERISTICS
DWORD che indica quali caratteristiche meccaniche sono supportate. Se zero, non sono supportate caratteristiche speciali. Si noti che è possibile impostare più bit:
  • 0x00000001 meccanismo di ingestione delle schede
  • meccanismo di esezione scheda 0x00000002
  • meccanismo di acquisizione scheda 0x00000004
Tutti gli altri valori sono riservati per l'uso futuro (RFU).
SCARD_ATTR_CURRENT_BWT
Tempo di attesa del blocco corrente.
SCARD_ATTR_CURRENT_CLK
Frequenza di clock corrente, in kHz.
SCARD_ATTR_CURRENT_CWT
Tempo di attesa del carattere corrente.
SCARD_ATTR_CURRENT_D
Fattore di conversione della velocità di bit.
SCARD_ATTR_CURRENT_EBC_ENCODING
Codifica del controllo del blocco di errore corrente.

0 = controllo di ridondanza longitudinale (LRC)

1 = controllo di ridondanza ciclica (CRC)

SCARD_ATTR_CURRENT_F
Fattore di conversione dell'orologio.
SCARD_ATTR_CURRENT_IFSC
Dimensioni di byte correnti per la scheda delle dimensioni del campo delle informazioni.
SCARD_ATTR_CURRENT_IFSD
Dimensioni di byte correnti per il dispositivo delle dimensioni del campo delle informazioni.
SCARD_ATTR_CURRENT_N
Ora di guardia corrente.
SCARD_ATTR_CURRENT_PROTOCOL_TYPE
DWORD codificato come 0x0rrrpppp dove rrr è RFU e deve essere 0x000. pppp codifica il tipo di protocollo corrente. Quale bit è stato impostato indica quale protocollo ISO è attualmente in uso. Ad esempio, se il bit zero è impostato, il protocollo T=0 è effettivo.
SCARD_ATTR_CURRENT_W
Tempo di attesa del lavoro corrente.
SCARD_ATTR_DEFAULT_CLK
Frequenza di clock predefinita, in kHz.
SCARD_ATTR_DEFAULT_DATA_RATE
Velocità dei dati predefinita, in bps.
SCARD_ATTR_DEVICE_FRIENDLY_NAME
Nome visualizzato del lettore.
SCARD_ATTR_DEVICE_IN_USE
Riservato per utilizzi futuri.
SCARD_ATTR_DEVICE_SYSTEM_NAME
Nome del sistema del lettore.
SCARD_ATTR_DEVICE_UNIT
Istanza del lettore del fornitore collegata al computer. La prima istanza sarà unità dispositivo 0, la successiva sarà unità 1 (se è lo stesso marchio di lettore) e così via. Due diversi marchi di lettori avranno entrambi zero per questo valore.
SCARD_ATTR_ICC_INTERFACE_STATUS
Byte singolo. Zero se il contatto elettrico della smart card non è attivo; diverso da zero se il contatto è attivo.
SCARD_ATTR_ICC_PRESENCE
Byte singolo che indica la presenza di smart card:

0 = non presente

1 = scheda presente ma non ingoiata (si applica solo se il lettore supporta la rondine smart card)

2 = scheda presente (e ingoiata se lettore supporta l'ingoiamento della smart card)

4 = carta confiscata.

SCARD_ATTR_ICC_TYPE_PER_ATR
Byte singolo che indica il tipo di smart card:

0 = tipo sconosciuto

1 = 7816 Asincrona

2 = 7816 Sincrono

Altri valori RFU.

SCARD_ATTR_MAX_CLK
Frequenza massima di clock, in kHz.
SCARD_ATTR_MAX_DATA_RATE
Velocità massima dei dati, in bps.
SCARD_ATTR_MAX_IFSD
Byte massimi per il dispositivo di dimensioni dei file di informazioni.
SCARD_ATTR_POWER_MGMT_SUPPORT
Zero se il dispositivo non supporta l'alimentazione mentre viene inserita la smart card. In caso contrario, un valore diverso da zero.
SCARD_ATTR_PROTOCOL_TYPES
DWORD codificato come 0x0rrrpppp dove rrr è RFU e deve essere 0x000. pppp codifica i tipi di protocollo supportati. Una "1" in una determinata posizione di bit indica il supporto per il protocollo ISO associato, quindi se i bit zero e uno sono impostati, sono supportati entrambi i protocolli T=0 e T=1 .
SCARD_ATTR_VENDOR_IFD_SERIAL_NO
Numero di serie del dispositivo dell'interfaccia fornito dal fornitore.
SCARD_ATTR_VENDOR_IFD_TYPE
Tipo di dispositivo dell'interfaccia fornito dal fornitore (designazione del modello del lettore).
SCARD_ATTR_VENDOR_IFD_VERSION
Versione del dispositivo dell'interfaccia fornita dal fornitore (DWORD nel formato 0xMMmmbbbbbb dove MM = versione principale, mm = versione secondaria e bbbb = numero di build).
SCARD_ATTR_VENDOR_NAME
Nome fornitore.

[out] pbAttr

Puntatore a un buffer che riceve l'attributo il cui ID viene fornito in dwAttrId. Se questo valore è NULL, SCardGetAttrib ignora la lunghezza del buffer fornita in pcbAttrLen, scrive la lunghezza del buffer che sarebbe stato restituito se questo parametro non fosse stato NULL in pcbAttrLen e restituisce un codice di operazione riuscita.

[in, out] pcbAttrLen

Lunghezza del buffer pbAttr in byte e riceve la lunghezza effettiva dell'attributo ricevuto Se la lunghezza del buffer viene specificata come SCARD_AUTOALLOCATE, pbAttr viene convertita in un puntatore a un puntatore a un puntatore a byte e riceve l'indirizzo di un blocco di memoria contenente l'attributo . Questo blocco di memoria deve essere deallocato con SCardFreeMemory.

Valore restituito

Questa funzione restituisce valori diversi a seconda che abbia esito positivo o negativo.

Codice restituito Descrizione
Success
SCARD_S_SUCCESS.
Valore dell'attributo non supportato.
ERROR_NOT_SUPPORTED.
Altro errore
Codice di errore. Per altre informazioni, vedere Valori restituiti della smart card.

Commenti

La funzione SCardGetAttrib è una funzione di accesso diretto alla scheda. Per altre informazioni su altre funzioni di accesso diretto, vedere Funzioni di accesso diretto alle schede.

Esempio

Nell'esempio seguente viene illustrato come recuperare un attributo per un lettore di schede. L'esempio presuppone che hCardHandle sia un handle valido ottenuto da una chiamata precedente alla funzione 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 );
}

Requisiti

Requisito Valore
Client minimo supportato Windows XP [solo app desktop]
Server minimo supportato Windows Server 2003 [solo app desktop]
Piattaforma di destinazione Windows
Intestazione winscard.h
Libreria Winscard.lib
DLL Winscard.dll

Vedi anche

SCardConnect

SCardFreeMemory

SCardSetAttrib