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 |
---|---|
|
Respuesta a la cadena de restablecimiento (ATR). |
|
DWORD codificado como 0xDDDDCCCC, donde DDDD = tipo de canal de datos y CCCC = número de canal:
|
|
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:
|
|
Tiempo de espera del bloque actual. |
|
Velocidad de reloj actual, en kHz. |
|
Tiempo de espera de caracteres actual. |
|
Factor de conversión de velocidad de bits. |
|
Codificación de control de bloqueo de error actual.
0 = comprobación de redundancia redundante (LRC) 1 = comprobación de redundancia cíclica (CRC) |
|
Factor de conversión del reloj. |
|
Tamaño de byte actual para la tarjeta de tamaño del campo de información. |
|
Tamaño de bytes actual para el dispositivo de tamaño de campo de información. |
|
Tiempo de guardia actual. |
|
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). |
|
Tiempo de espera del trabajo actual. |
|
Velocidad de reloj predeterminada, en kHz. |
|
Velocidad de datos predeterminada, en bps. |
|
Nombre para mostrar del lector. |
|
Reservado para uso futuro. |
|
Nombre del sistema del lector. |
|
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. |
|
Byte único. Cero si el contacto eléctrico de tarjeta inteligente no está activo; distinto de cero si el contacto está activo. |
|
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. |
|
Byte único que indica el tipo de tarjeta inteligente: 0 = tipo desconocido 1 = 7816 Asincrónico 2 = 7816 Sincrónico Otros valores RFU. |
|
Velocidad de reloj máxima, en kHz. |
|
Velocidad máxima de datos, en bps. |
|
Bytes máximos para el dispositivo de tamaño de archivo de información. |
|
Cero si el dispositivo no admite el apagado mientras se inserta la tarjeta inteligente. Distinto de cero de lo contrario. |
|
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 . |
|
Número de serie del dispositivo de interfaz proporcionado por el proveedor. |
|
Tipo de dispositivo de interfaz proporcionado por el proveedor (designación de modelo del lector). |
|
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). |
|
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 |
---|---|
|
SCARD_S_SUCCESS. |
|
ERROR_NOT_SUPPORTED. |
|
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 |