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 |
---|---|
|
Risposta alla reimpostazione della stringa ATR. |
|
DWORD codificato come 0xDDDDCCCCCC, dove DDDD = tipo di canale dati e CCCC = numero di canale:
|
|
DWORD che indica quali caratteristiche meccaniche sono supportate. Se zero, non sono supportate caratteristiche speciali. Si noti che è possibile impostare più bit:
|
|
Tempo di attesa del blocco corrente. |
|
Frequenza di clock corrente, in kHz. |
|
Tempo di attesa del carattere corrente. |
|
Fattore di conversione della velocità di bit. |
|
Codifica del controllo del blocco di errore corrente.
0 = controllo di ridondanza longitudinale (LRC) 1 = controllo di ridondanza ciclica (CRC) |
|
Fattore di conversione dell'orologio. |
|
Dimensioni di byte correnti per la scheda delle dimensioni del campo delle informazioni. |
|
Dimensioni di byte correnti per il dispositivo delle dimensioni del campo delle informazioni. |
|
Ora di guardia corrente. |
|
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. |
|
Tempo di attesa del lavoro corrente. |
|
Frequenza di clock predefinita, in kHz. |
|
Velocità dei dati predefinita, in bps. |
|
Nome visualizzato del lettore. |
|
Riservato per utilizzi futuri. |
|
Nome del sistema del lettore. |
|
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. |
|
Byte singolo. Zero se il contatto elettrico della smart card non è attivo; diverso da zero se il contatto è attivo. |
|
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. |
|
Byte singolo che indica il tipo di smart card: 0 = tipo sconosciuto 1 = 7816 Asincrona 2 = 7816 Sincrono Altri valori RFU. |
|
Frequenza massima di clock, in kHz. |
|
Velocità massima dei dati, in bps. |
|
Byte massimi per il dispositivo di dimensioni dei file di informazioni. |
|
Zero se il dispositivo non supporta l'alimentazione mentre viene inserita la smart card. In caso contrario, un valore diverso da zero. |
|
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 . |
|
Numero di serie del dispositivo dell'interfaccia fornito dal fornitore. |
|
Tipo di dispositivo dell'interfaccia fornito dal fornitore (designazione del modello del lettore). |
|
Versione del dispositivo dell'interfaccia fornita dal fornitore (DWORD nel formato 0xMMmmbbbbbb dove MM = versione principale, mm = versione secondaria e bbbb = numero di build). |
|
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 |
---|---|
|
SCARD_S_SUCCESS. |
|
ERROR_NOT_SUPPORTED. |
|
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 |