Compartilhar via


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
SCARD_ATTR_ATR_STRING
Resposta para redefinir a cadeia de caracteres (ATR).
SCARD_ATTR_CHANNEL_ID
DWORD codificado como 0xDDDDCCCC, em que DDDD = tipo de canal de dados e CCCC = número de canal:
  • As seguintes codificações são definidas para DDDD:
  • 0x01 E/S serial; CCCC é um número de porta.
  • 0x02 E/S paralela; CCCC é um número de porta.
  • 0x04 porta de teclado PS/2; CCCC é zero.
  • 0x08 SCSI; CCCC é o número da ID scsi.
  • 0x10 IDE; CCCC é o número do dispositivo.
  • 0x20 USB; CCCC é o número do dispositivo.
  • 0xF interface definida pelo fornecedory com y no intervalo de zero a 15; CCCC é definido pelo fornecedor.
SCARD_ATTR_CHARACTERISTICS
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:
  • mecanismo de deglutição de cartão 0x00000001
  • mecanismo de ejeção de cartão 0x00000002
  • mecanismo de captura de cartão 0x00000004
Todos os outros valores são reservados para RFU (uso futuro).
SCARD_ATTR_CURRENT_BWT
Tempo de espera do bloco atual.
SCARD_ATTR_CURRENT_CLK
Taxa de relógio atual, em kHz.
SCARD_ATTR_CURRENT_CWT
Tempo de espera do caractere atual.
SCARD_ATTR_CURRENT_D
Fator de conversão de taxa de bits.
SCARD_ATTR_CURRENT_EBC_ENCODING
Codificação de controle de bloco de erro atual.

0 = marcar de redundância longitudinal (LRC)

1 = CRC (marcar de redundância cíclica)

SCARD_ATTR_CURRENT_F
Fator de conversão de relógio.
SCARD_ATTR_CURRENT_IFSC
Tamanho do byte atual para o tamanho do campo de informações cartão.
SCARD_ATTR_CURRENT_IFSD
Tamanho do byte atual para o dispositivo de tamanho do campo de informações.
SCARD_ATTR_CURRENT_N
Tempo de proteção atual.
SCARD_ATTR_CURRENT_PROTOCOL_TYPE
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.)
SCARD_ATTR_CURRENT_W
Tempo de espera de trabalho atual.
SCARD_ATTR_DEFAULT_CLK
Taxa de relógio padrão, em kHz.
SCARD_ATTR_DEFAULT_DATA_RATE
Taxa de dados padrão, em bps.
SCARD_ATTR_DEVICE_FRIENDLY_NAME
Nome de exibição do leitor.
SCARD_ATTR_DEVICE_IN_USE
Reservado para uso futuro.
SCARD_ATTR_DEVICE_SYSTEM_NAME
Nome do sistema do leitor.
SCARD_ATTR_DEVICE_UNIT
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.
SCARD_ATTR_ICC_INTERFACE_STATUS
Byte único. Zero se o contato elétrico cartão inteligente não estiver ativo; diferente de zero se o contato estiver ativo.
SCARD_ATTR_ICC_PRESENCE
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.

SCARD_ATTR_ICC_TYPE_PER_ATR
Byte único que indica o tipo de cartão inteligente:

0 = tipo desconhecido

1 = 7816 Assíncrono

2 = 7816 Síncrono

Outros valores RFU.

SCARD_ATTR_MAX_CLK
Taxa máxima de relógio, em kHz.
SCARD_ATTR_MAX_DATA_RATE
Taxa máxima de dados, em bps.
SCARD_ATTR_MAX_IFSD
Bytes máximos para o dispositivo de tamanho do arquivo de informações.
SCARD_ATTR_POWER_MGMT_SUPPORT
Zero se o dispositivo não oferecer suporte à desligar enquanto cartão inteligente for inserido. Caso contrário, diferente de zero.
SCARD_ATTR_PROTOCOL_TYPES
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.
SCARD_ATTR_VENDOR_IFD_SERIAL_NO
Número de série do dispositivo de interface fornecido pelo fornecedor.
SCARD_ATTR_VENDOR_IFD_TYPE
Tipo de dispositivo de interface fornecido pelo fornecedor (designação de modelo de leitor).
SCARD_ATTR_VENDOR_IFD_VERSION
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).
SCARD_ATTR_VENDOR_NAME
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
Êxito
SCARD_S_SUCCESS.
Não há suporte para o valor de atributo.
ERROR_NOT_SUPPORTED.
Outra falha
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

Confira também

Scardconnect

SCardFreeMemory

SCardSetAttrib