Función SCardGetAttrib (winscard.h)

La función SCardGetAttrib recupera los atributos de lector actuales para el identificador especificado. No afecta al estado del lector, el controlador o la tarjeta.

Sintaxis

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

Parámetros

[in] hCard

Valor de referencia devuelto de SCardConnect.

[in] dwAttrId

Identificador del atributo que se va a obtener. En la tabla siguiente se enumeran los valores posibles para dwAttrId. Estos valores son de solo lectura. Tenga en cuenta que es posible que los proveedores no admitan todos los atributos.

Valor Significado
SCARD_ATTR_ATR_STRING
Respuesta a la cadena de restablecimiento (ATR).
SCARD_ATTR_CHANNEL_ID
DWORD codificado como 0xDDDDCCCC, donde DDDD = tipo de canal de datos y CCCC = número de canal:
  • Las siguientes codificaciones se definen para DDDD:
  • 0x01 E/S serie; CCCC es un número de puerto.
  • 0x02 E/S paralela; CCCC es un número de puerto.
  • 0x04 puerto de teclado PS/2; CCCC es cero.
  • 0x08 SCSI; CCCC es el número de identificador SCSI.
  • 0X10 IDE; CCCC es el número de dispositivo.
  • 0x20 USB; CCCC es el número de dispositivo.
  • 0xF interfaz definida porel proveedor con y en el intervalo cero a 15; CCCC está definido por el proveedor.
SCARD_ATTR_CHARACTERISTICS
DWORD que indica qué características mecánicas se admiten. Si es cero, no se admiten características especiales. Tenga en cuenta que se pueden establecer varios bits:
  • 0x00000001 mecanismo de deglución de tarjeta
  • mecanismo de ejección de tarjeta de 0x00000002
  • mecanismo de captura de tarjeta de 0x00000004
Todos los demás valores están reservados para uso futuro (RFU).
SCARD_ATTR_CURRENT_BWT
Tiempo de espera del bloque actual.
SCARD_ATTR_CURRENT_CLK
Velocidad de reloj actual, en kHz.
SCARD_ATTR_CURRENT_CWT
Tiempo de espera de caracteres actual.
SCARD_ATTR_CURRENT_D
Factor de conversión de velocidad de bits.
SCARD_ATTR_CURRENT_EBC_ENCODING
Codificación de control de bloqueo de error actual.

0 = comprobación de redundancia redundante (LRC)

1 = comprobación de redundancia cíclica (CRC)

SCARD_ATTR_CURRENT_F
Factor de conversión del reloj.
SCARD_ATTR_CURRENT_IFSC
Tamaño de byte actual para la tarjeta de tamaño del campo de información.
SCARD_ATTR_CURRENT_IFSD
Tamaño de bytes actual para el dispositivo de tamaño de campo de información.
SCARD_ATTR_CURRENT_N
Tiempo de guardia actual.
SCARD_ATTR_CURRENT_PROTOCOL_TYPE
DWORD codificado como 0x0rrrpppp donde rrr es RFU y debe ser 0x000. pppp codifica el tipo de protocolo actual. El bit que se haya establecido indica qué protocolo ISO está actualmente en uso. (Por ejemplo, si se establece el bit cero, el protocolo T=0 está en vigor).
SCARD_ATTR_CURRENT_W
Tiempo de espera del trabajo actual.
SCARD_ATTR_DEFAULT_CLK
Velocidad de reloj predeterminada, en kHz.
SCARD_ATTR_DEFAULT_DATA_RATE
Velocidad de datos predeterminada, en bps.
SCARD_ATTR_DEVICE_FRIENDLY_NAME
Nombre para mostrar del lector.
SCARD_ATTR_DEVICE_IN_USE
Reservado para uso futuro.
SCARD_ATTR_DEVICE_SYSTEM_NAME
Nombre del sistema del lector.
SCARD_ATTR_DEVICE_UNIT
Instancia del lector de este proveedor conectado al equipo. La primera instancia será la unidad de dispositivo 0, la siguiente será la unidad 1 (si es la misma marca de lector) y así sucesivamente. Dos marcas diferentes de lectores tendrán cero para este valor.
SCARD_ATTR_ICC_INTERFACE_STATUS
Byte único. Cero si el contacto eléctrico de tarjeta inteligente no está activo; distinto de cero si el contacto está activo.
SCARD_ATTR_ICC_PRESENCE
Byte único que indica la presencia de tarjeta inteligente:

0 = no está presente

1 = tarjeta presente pero no ingerida (solo se aplica si el lector admite la deglución de tarjetas inteligentes)

2 = tarjeta presente (y ingerida si el lector admite la deglución de tarjeta inteligente)

4 = tarjeta confiscada.

SCARD_ATTR_ICC_TYPE_PER_ATR
Byte único que indica el tipo de tarjeta inteligente:

0 = tipo desconocido

1 = 7816 Asincrónico

2 = 7816 Sincrónico

Otros valores RFU.

SCARD_ATTR_MAX_CLK
Velocidad de reloj máxima, en kHz.
SCARD_ATTR_MAX_DATA_RATE
Velocidad máxima de datos, en bps.
SCARD_ATTR_MAX_IFSD
Bytes máximos para el dispositivo de tamaño de archivo de información.
SCARD_ATTR_POWER_MGMT_SUPPORT
Cero si el dispositivo no admite el apagado mientras se inserta la tarjeta inteligente. Distinto de cero de lo contrario.
SCARD_ATTR_PROTOCOL_TYPES
DWORD codificado como 0x0rrrpppp donde rrr es RFU y debe ser 0x000. pppp codifica los tipos de protocolo admitidos. Una "1" en una posición de bits determinada indica la compatibilidad con el protocolo ISO asociado, por lo que si se establecen los bits cero y uno, se admiten los protocolos T=0 y T=1 .
SCARD_ATTR_VENDOR_IFD_SERIAL_NO
Número de serie del dispositivo de interfaz proporcionado por el proveedor.
SCARD_ATTR_VENDOR_IFD_TYPE
Tipo de dispositivo de interfaz proporcionado por el proveedor (designación de modelo del lector).
SCARD_ATTR_VENDOR_IFD_VERSION
Versión del dispositivo de interfaz proporcionada por el proveedor (DWORD con formato 0xMMmmbbbb , donde MM = versión principal, mm = versión secundaria y bbbb = número de compilación).
SCARD_ATTR_VENDOR_NAME
Nombre del proveedor.

[out] pbAttr

Puntero a un búfer que recibe el atributo cuyo identificador se proporciona en dwAttrId. Si este valor es NULL, SCardGetAttrib omite la longitud del búfer proporcionada en pcbAttrLen, escribe la longitud del búfer que se habría devuelto si este parámetro no hubiera sido NULL para pcbAttrLen y devuelve un código correcto.

[in, out] pcbAttrLen

Longitud del búfer pbAttr en bytes y recibe la longitud real del atributo recibido Si la longitud del búfer se especifica como SCARD_AUTOALLOCATE, pbAttr se convierte en un puntero a un puntero de byte y recibe la dirección de un bloque de memoria que contiene el atributo. Este bloque de memoria debe desasignarse con SCardFreeMemory.

Valor devuelto

Esta función devuelve valores diferentes en función de si se realiza correctamente o se produce un error.

Código devuelto Descripción
Success
SCARD_S_SUCCESS.
No se admite el valor de atributo.
ERROR_NOT_SUPPORTED.
Otro error
Código de error. Para obtener más información, consulte Valores devueltos de tarjeta inteligente.

Comentarios

La función SCardGetAttrib es una función de acceso directo a tarjetas. Para obtener más información sobre otras funciones de acceso directo, consulte Funciones de acceso directo a tarjetas.

Ejemplos

En el ejemplo siguiente se muestra cómo recuperar un atributo para un lector de tarjetas. En el ejemplo se supone que hCardHandle es un identificador válido obtenido de una llamada anterior a la función 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 Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winscard.h
Library Winscard.lib
Archivo DLL Winscard.dll

Consulte también

SCardConnect

SCardFreeMemory

SCardSetAttrib