Função SCardGetAttrib (winscard.h)
A função SCardGetAttrib recupera os atributos de leitor atuais para o identificador fornecido. Isso não afeta o estado do leitor, do driver ou do cartão.
Sintaxe
LONG SCardGetAttrib(
[in] SCARDHANDLE hCard,
[in] DWORD dwAttrId,
[out] LPBYTE pbAttr,
[in, out] LPDWORD pcbAttrLen
);
Parâmetros
[in] hCard
Valor de referência retornado de SCardConnect.
[in] dwAttrId
Identificador do atributo a ser obtido. A tabela a seguir lista os valores possíveis para dwAttrId. Esses valores são somente leitura. Observe que os fornecedores podem não dar suporte a todos os atributos.
Valor | Significado |
---|---|
|
Resposta para redefinir a cadeia de caracteres (ATR). |
|
DWORD codificado como 0xDDDDCCCC, em que DDDD = tipo de canal de dados e CCCC = número de canal:
|
|
DWORD indicando quais características mecânicas têm suporte. Se zero, não há suporte para características especiais. Observe que vários bits podem ser definidos:
|
|
Tempo de espera do bloco atual. |
|
Taxa de relógio atual, em kHz. |
|
Tempo de espera do caractere atual. |
|
Fator de conversão de taxa de bits. |
|
Codificação de controle de bloco de erro atual.
0 = marcar de redundância longitudinal (LRC) 1 = CRC (marcar de redundância cíclica) |
|
Fator de conversão de relógio. |
|
Tamanho do byte atual para o tamanho do campo de informações cartão. |
|
Tamanho do byte atual para o dispositivo de tamanho do campo de informações. |
|
Tempo de proteção atual. |
|
DWORD codificado como 0x0rrrpppp em que rrr é RFU e deve ser 0x000. pppp codifica o tipo de protocolo atual. Qualquer bit que tenha sido definido indica qual protocolo ISO está sendo usado no momento. (Por exemplo, se o bit zero estiver definido, o protocolo T=0 estará em vigor.) |
|
Tempo de espera de trabalho atual. |
|
Taxa de relógio padrão, em kHz. |
|
Taxa de dados padrão, em bps. |
|
Nome de exibição do leitor. |
|
Reservado para uso futuro. |
|
Nome do sistema do leitor. |
|
Instância do leitor desse fornecedor anexado ao computador. A primeira instância será a unidade do dispositivo 0, a próxima será a unidade 1 (se for a mesma marca de leitor) e assim por diante. Duas marcas diferentes de leitores terão zero para esse valor. |
|
Byte único. Zero se o contato elétrico cartão inteligente não estiver ativo; diferente de zero se o contato estiver ativo. |
|
Byte único que indica a presença de cartão inteligente: 0 = não presente 1 = cartão presente, mas não engolido (aplica-se somente se o leitor der suporte à ingestão de cartão inteligente) 2 = cartão presentes (e engolidos se o leitor der suporte à deglutição de cartão inteligente) 4 = cartão confiscado. |
|
Byte único que indica o tipo de cartão inteligente: 0 = tipo desconhecido 1 = 7816 Assíncrono 2 = 7816 Síncrono Outros valores RFU. |
|
Taxa máxima de relógio, em kHz. |
|
Taxa máxima de dados, em bps. |
|
Bytes máximos para o dispositivo de tamanho do arquivo de informações. |
|
Zero se o dispositivo não oferecer suporte à desligar enquanto cartão inteligente for inserido. Caso contrário, diferente de zero. |
|
DWORD codificado como 0x0rrrpppp em que rrr é RFU e deve ser 0x000. pppp codifica os tipos de protocolo com suporte. Um '1' em uma determinada posição de bit indica suporte para o protocolo ISO associado, portanto, se os bits zero e um estiverem definidos, os protocolos T=0 e T=1 serão compatíveis. |
|
Número de série do dispositivo de interface fornecido pelo fornecedor. |
|
Tipo de dispositivo de interface fornecido pelo fornecedor (designação de modelo de leitor). |
|
Versão do dispositivo de interface fornecida pelo fornecedor (DWORD no formato 0xMMmmbbbb ondeMM = versão principal, mm = versão secundária e bbbb = número de build). |
|
Nome do fornecedor. |
[out] pbAttr
Ponteiro para um buffer que recebe o atributo cuja ID é fornecida em dwAttrId. Se esse valor for NULL, SCardGetAttrib ignorará o comprimento do buffer fornecido em pcbAttrLen, gravará o comprimento do buffer que teria sido retornado se esse parâmetro não tivesse sido NULL para pcbAttrLen e retornará um código de êxito.
[in, out] pcbAttrLen
Comprimento do buffer pbAttr em bytes e recebe o comprimento real do atributo recebido Se o comprimento do buffer for especificado como SCARD_AUTOALLOCATE, pbAttr será convertido em um ponteiro para um ponteiro de bytes e receberá o endereço de um bloco de memória que contém o atributo . Esse bloco de memória deve ser desalocado com SCardFreeMemory.
Retornar valor
Essa função retorna valores diferentes dependendo se ela é bem-sucedida ou falha.
Código de retorno | Descrição |
---|---|
|
SCARD_S_SUCCESS. |
|
ERROR_NOT_SUPPORTED. |
|
Um código de erro. Para obter mais informações, consulte Valores retornados do cartão inteligente. |
Comentários
A função SCardGetAttrib é uma função de acesso direto cartão. Para obter mais informações sobre outras funções de acesso direto, consulte Funções de acesso a cartão direto.
Exemplos
O exemplo a seguir mostra como recuperar um atributo para um leitor de cartão. O exemplo pressupõe que hCardHandle é um identificador válido obtido de uma chamada anterior para a função 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 );
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows XP [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2003 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | winscard.h |
Biblioteca | Winscard.lib |
DLL | Winscard.dll |