estructura SMARTCARD_EXTENSION (smclib.h)
Tanto el controlador del 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 tarjetas inteligentes.
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 leer 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 biblioteca de tarjetas inteligentes, SmartcardDeviceControl, para llamar almacenando punteros a ellos 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 va a 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 secundaria.
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 que se usan 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.
Observaciones
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. El RDF_ATR_PARSE función de análisis 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 | El RDF_CARD_POWER función de devolución de llamada 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.
Tras 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 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 del lector debe establecer el NotificationIrp miembro de SmartcardExtension -> OsData volver a NULL para informar a la biblioteca de controladores que el controlador 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 para 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 tragar mecánica, que es lo que sucede cuando la tarjeta inteligente se inserta completamente en el lector de tarjetas inteligentes. Es opcional para 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 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, consulte 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 del RequestBuffer antes de iniciar las transmisiones. Debe copiar la estructura SCARD_IO_REQUEST en el parámetro ReplyBuffer, seguido de los datos recibidos de la tarjeta. De nuevo, si usa el smartcardxxRequest y funciones smartcardxxReply, la biblioteca copiará la estructura por usted. |
Requisitos
Requisito | Valor |
---|---|
encabezado de | smclib.h (incluya Smclib.h) |