Función SCardStatusA (winscard.h)
La función SCardStatus proporciona el estado actual de una tarjeta inteligente en un lector. Puede llamarlo en cualquier momento después de una llamada correcta a SCardConnect y antes de una llamada correcta a SCardDisconnect. No afecta al estado del controlador lector o lector.
Sintaxis
LONG SCardStatusA(
[in] SCARDHANDLE hCard,
[out] LPSTR mszReaderNames,
[in, out, optional] LPDWORD pcchReaderLen,
[out, optional] LPDWORD pdwState,
[out, optional] LPDWORD pdwProtocol,
[out] LPBYTE pbAtr,
[in, out, optional] LPDWORD pcbAtrLen
);
Parámetros
[in] hCard
Valor de referencia devuelto de SCardConnect.
[out] mszReaderNames
Lista de nombres para mostrar (varias cadenas) por la que se conoce el lector conectado actualmente.
[in, out, optional] pcchReaderLen
En la entrada, proporciona la longitud del búfer szReaderName .
En la salida, recibe la longitud real (en caracteres) de la lista de nombres del lector, incluido el carácter NULL final. Si esta longitud del búfer se especifica como SCARD_AUTOALLOCATE, szReaderName se convierte en un puntero a un puntero de byte y recibe la dirección de un bloque de memoria que contiene la estructura de varias cadenas.
[out, optional] pdwState
Estado actual de la tarjeta inteligente en el lector. Tras el éxito, recibe uno de los siguientes indicadores de estado.
Valor | Significado |
---|---|
|
No hay ninguna tarjeta en el lector. |
|
Hay una tarjeta en el lector, pero no se ha movido a la posición para su uso. |
|
Hay una tarjeta en el lector en posición de uso. La tarjeta no está encendida. |
|
La alimentación se proporciona a la tarjeta, pero el controlador lector no es consciente del modo de la tarjeta. |
|
La tarjeta se ha restablecido y está esperando la negociación PTS. |
|
La tarjeta se ha restablecido y se han establecido protocolos de comunicación específicos. |
[out, optional] pdwProtocol
Protocolo actual, si existe. El valor devuelto solo es significativo si el valor devuelto de pdwState es SCARD_SPECIFICMODE.
Valor | Significado |
---|---|
|
El protocolo de transferencia sin procesar está en uso. |
|
El protocolo ISO 7816/3 T=0 está en uso. |
|
El protocolo ISO 7816/3 T=1 está en uso. |
[out] pbAtr
Puntero a un búfer de 32 bytes que recibe la cadena ATR de la tarjeta insertada actualmente, si está disponible.
[in, out, optional] pcbAtrLen
En la entrada, proporciona la longitud del búfer pbAtr . En la salida, recibe el número de bytes en la cadena ATR (máximo de 32 bytes). Si esta longitud del búfer se especifica como SCARD_AUTOALLOCATE, pbAtr se convierte en un puntero a un puntero de byte y recibe la dirección de un bloque de memoria que contiene la estructura de varias cadenas.
Valor devuelto
Si la función proporciona correctamente el estado actual de una tarjeta inteligente en un lector, el valor devuelto se SCARD_S_SUCCESS.
Si la función presenta un error, devuelve un código de error. Para obtener más información, consulte Valores devueltos de tarjeta inteligente.
Comentarios
La función SCardStatus es una función de acceso de lector y tarjeta inteligente. Para obtener información sobre otras funciones de acceso, vea Funciones de acceso de tarjeta inteligente y lector.
Ejemplos
En el ejemplo siguiente se muestra cómo determinar el estado de la tarjeta inteligente.
WCHAR szReader[200];
DWORD cch = 200;
BYTE bAttr[32];
DWORD cByte = 32;
DWORD dwState, dwProtocol;
LONG lReturn;
// Determine the status.
// hCardHandle was set by an earlier call to SCardConnect.
lReturn = SCardStatus(hCardHandle,
szReader,
&cch,
&dwState,
&dwProtocol,
(LPBYTE)&bAttr,
&cByte);
if ( SCARD_S_SUCCESS != lReturn )
{
printf("Failed SCardStatus\n");
exit(1); // or other appropriate action
}
// Examine retrieved status elements.
// Look at the reader name and card state.
printf("%S\n", szReader );
switch ( dwState )
{
case SCARD_ABSENT:
printf("Card absent.\n");
break;
case SCARD_PRESENT:
printf("Card present.\n");
break;
case SCARD_SWALLOWED:
printf("Card swallowed.\n");
break;
case SCARD_POWERED:
printf("Card has power.\n");
break;
case SCARD_NEGOTIABLE:
printf("Card reset and waiting PTS negotiation.\n");
break;
case SCARD_SPECIFIC:
printf("Card has specific communication protocols set.\n");
break;
default:
printf("Unknown or unexpected card state.\n");
break;
}
Nota
El encabezado winscard.h define SCardStatus como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Convenciones para prototipos de función.
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
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de