estructura SMARTCARD_EXTENSION (smclib.h)
Tanto el controlador de lector de tarjetas inteligentes como la biblioteca de controladores de tarjetas inteligentes usan la estructura SMARTCARD_EXTENSION para acceder a todas las demás estructuras de datos de tarjeta inteligente.
Sintaxis
typedef struct _SMARTCARD_EXTENSION {
ULONG Version;
VENDOR_ATTR VendorAttr;
NTSTATUS( *ReaderFunction[16];
SCARD_CARD_CAPABILITIES CardCapabilities;
ULONG LastError;
struct {
PULONG Information;
PUCHAR RequestBuffer;
ULONG RequestBufferLength;
PUCHAR ReplyBuffer;
ULONG ReplyBufferLength;
} IoRequest;
ULONG MajorIoControlCode;
ULONG MinorIoControlCode;
POS_DEP_DATA OsData;
SCARD_READER_CAPABILITIES ReaderCapabilities;
PREADER_EXTENSION ReaderExtension;
SMARTCARD_REPLY SmartcardReply;
SMARTCARD_REQUEST SmartcardRequest;
T0_DATA T0;
T1_DATA T1;
PPERF_INFO PerfInfo;
ULONG Reserved[25 - sizeof(PPERF_INFO)];
} *PSMARTCARD_EXTENSION, SMARTCARD_EXTENSION;
Miembros
Version
Indica la versión de esta estructura.
VendorAttr
Contiene información que identifica el controlador del lector, como el nombre del proveedor, el número de unidad y el número de serie.
ReaderFunction[16]
La línea del bloque de sintaxis debe leerse. NTSTATUS (*ReaderFunction[16])(PSMARTCARD_EXTENSION);
Puntero a una matriz de funciones de devolución de llamada para lectores. Las funciones de devolución de llamada que puede implementar un controlador de lector proporcionado por el proveedor. Un controlador de lector hace que estas funciones de devolución de llamada estén disponibles para la rutina de la biblioteca de tarjetas inteligentes, SmartcardDeviceControl, para llamar mediante el almacenamiento de punteros a ellas en la extensión del dispositivo de tarjeta inteligente.
- RDF_ATR_PARSE
- RDF_CARD_EJECT
- RDF_CARD_POWER
- RDF_CARD_TRACKING
- RDF_IOCTL_VENDOR
- RDF_READER_SWALLOW
- RDF_SET_PROTOCOL
- RDF_TRANSMIT
CardCapabilities
Contiene funcionalidades de la tarjeta inteligente insertada.
LastError
No se usa.
IoRequest
Estructura con los siguientes miembros:
IoRequest.Information
Contiene el número de bytes devueltos.
IoRequest.RequestBuffer
Puntero a los datos de la solicitud de E/S del usuario que se enviará a la tarjeta.
IoRequest.RequestBufferLength
Indica el número de bytes que se van a enviar a la tarjeta.
IoRequest.ReplyBuffer
Puntero al búfer que contiene los datos devueltos por la solicitud de E/S.
IoRequest.ReplyBufferLength
Indica el número de bytes de los datos devueltos por la solicitud de E/S.
MajorIoControlCode
Contiene el código de control de E/S principal.
MinorIoControlCode
Contiene el código de control de E/S secundario.
OsData
Contiene información específica del sistema operativo y del tipo de controlador.
ReaderCapabilities
Contiene las funcionalidades del lector de teclado.
ReaderExtension
Contiene datos específicos del lector de tarjetas inteligentes.
SmartcardReply
Contiene datos procedentes del lector.
SmartcardRequest
Contiene el comando actual y los datos que se envían a la tarjeta inteligente.
T0
Contiene los datos para su uso con el protocolo T=0.
T1
Contiene los datos que se usan con el protocolo T=1.
PerfInfo
Reserved[25 - sizeof(PPERF_INFO)]
Reservado para uso del sistema.
Comentarios
Esta estructura se pasa a todas las funciones de devolución de llamada.
Las funciones de devolución de llamada individuales se identifican mediante una serie de valores constantes que se deben usar como índices en la matriz ReaderFunction .
Índice | Descripción | ||||||||
---|---|---|---|---|---|---|---|---|---|
RDF_ATR_PARSE | Opcional. La función de análisis de RDF_ATR_PARSE analiza una respuesta a restablecimiento (ATR) para la biblioteca de controladores de tarjeta inteligente cuando la biblioteca de controladores no puede reconocer o analizar la biblioteca de controladores de tarjeta inteligente. | ||||||||
RDF_CARD_EJECT | Opcional. RDF_CARD_EJECT función de devolución de llamada La función de devolución de llamada RDF_CARD_EJECT expulsa una tarjeta inteligente insertada del lector. |
||||||||
RDF_CARD_POWER | La función de devolución de llamada RDF_CARD_POWER restablece o desactiva una tarjeta inteligente insertada. Es obligatorio que los controladores de lector de tarjetas inteligentes implementen esta función de devolución de llamada.
En la entrada, la estructura a la que apunta SmartcardExtension debe tener los siguientes valores de miembro:
|
||||||||
RDF_CARD_TRACKING | La función de devolución de llamada RDF_CARD_TRACKING instala un controlador de eventos para realizar un seguimiento cada vez que se inserta o quita una tarjeta de un lector de tarjetas. Es obligatorio que los controladores de lector de tarjetas inteligentes implementen esta función de devolución de llamada.
Al recibir una solicitud de IOCTL_SMARTCARD_IS_PRESENT , la biblioteca de controladores determina si la tarjeta inteligente ya está presente. Si la tarjeta inteligente está presente, la biblioteca de controladores completa la solicitud con un estado de STATUS_SUCCESS. Si no hay ninguna tarjeta inteligente presente, la biblioteca de controladores llama a la función de devolución de llamada de seguimiento de tarjetas inteligentes del controlador del lector y el controlador del lector comienza a buscar la tarjeta inteligente. Después de iniciar el seguimiento de tarjetas inteligentes, la biblioteca de controladores marca la solicitud como si tuviera un estado de STATUS_PENDING. La biblioteca de controladores completa la solicitud. Controladores de dispositivo WDM La biblioteca de controladores WDM correspondiente agrega un puntero a la solicitud en SmartcardExtension-OsData-NotificationIrp>>. El controlador del lector debe completar la solicitud tan pronto como detecte que se ha insertado o quitado una tarjeta inteligente. El controlador de lector completa la solicitud llamando a IoCompleteRequest, después de lo cual, el controlador de lector debe establecer el miembro NotificationIrp de SmartcardExtension -> OsData en NULL para informar a la biblioteca de controladores de que el controlador del lector puede aceptar más solicitudes de seguimiento de tarjetas inteligentes. Dado que esta llamada puede tener una duración indefinida y el autor de la llamada puede finalizar la solicitud antes de que se complete, es importante marcar este IRP como cancelable.
|
||||||||
RDF_IOCTL_VENDOR | La función de devolución de llamada RDF_IOCTL_VENDOR realiza operaciones IOCTL específicas del proveedor. Es opcional que los controladores de lector de tarjetas inteligentes implementen esta función de devolución de llamada.
En la entrada, el autor de la llamada debe pasar los siguientes valores a la función :
|
||||||||
RDF_READER_SWALLOW | La función de devolución de llamada RDF_READER_SWALLOW realiza una ingestión mecánica, que es lo que sucede cuando la tarjeta inteligente se inserta completamente en el lector de tarjetas inteligentes. Es opcional que los controladores de lector de tarjetas inteligentes implementen esta función de devolución de llamada. | ||||||||
RDF_SET_PROTOCOL | La función de devolución de llamada RDF_SET_PROTOCOL selecciona un protocolo de transmisión para la tarjeta inteligente insertada. Los controladores de lector de tarjetas inteligentes deben implementar esta función de devolución de llamada.
En la entrada, el autor de la llamada debe pasar los siguientes valores a la función :
|
||||||||
RDF_TRANSMIT | La función de devolución de llamada RDF_TRANSMIT realiza transmisiones de datos. Los controladores de lector de tarjetas inteligentes deben implementar esta función de devolución de llamada.
En la entrada, el autor de la llamada debe pasar los siguientes valores a la función :
El miembro dwProtocol debe contener el identificador de protocolo devuelto por una llamada a IOCTL_SMARTCARD_SET_PROTOCOL. El miembro cbPciLength contiene el tamaño, en bytes, de la estructura SCARD_IO_REQUEST. El tamaño de esta estructura suele ser de 8 bytes. La estructura de SCARD_IO_REQUEST va seguida de los datos (protocolo) que se van a transmitir a la tarjeta. Dependiendo del protocolo que se va a usar para la transmisión, la biblioteca ofrece varias funciones de soporte técnico. Para obtener más información sobre estas funciones de compatibilidad, vea SmartcardT0Request (WDM) y SmartcardT1Request (WDM). RequestBuffer y ReplyBuffer apuntan al mismo búfer del sistema. Si usa la función de biblioteca SmartcardxxRequest y SmartcardxxReply, no sobrescribirá el búfer de entrada. Si no usa estas funciones, realice una copia de RequestBuffer antes de iniciar las transmisiones. Debe copiar la estructura de SCARD_IO_REQUEST en el parámetro ReplyBuffer , seguido de los datos recibidos de la tarjeta. De nuevo, si usa las funciones SmartcardxxRequest y SmartcardxxReply , la biblioteca copiará la estructura. |
Requisitos
Requisito | Valor |
---|---|
Header | smclib.h (incluya Smclib.h) |