struttura SMARTCARD_EXTENSION (smclib.h)
La struttura SMARTCARD_EXTENSION viene usata sia dal driver del lettore di smart card che dalla libreria di driver smart card per accedere a tutte le altre strutture di dati di smart card.
Sintassi
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;
Membri
Version
Indica la versione di questa struttura.
VendorAttr
Contiene informazioni che identificano il driver del lettore, ad esempio il nome del fornitore, il numero di unità e il numero di serie.
ReaderFunction[16]
La riga nel blocco di sintassi deve leggere NTSTATUS (*ReaderFunction[16])(PSMARTCARD_EXTENSION);
Puntatore a una matrice di funzioni di callback per i lettori. Le funzioni di callback che un driver lettore fornito dal fornitore può implementare. Un driver lettore rende disponibili queste funzioni di callback per la routine della libreria di smart card, SmartcardDeviceControl, per chiamare archiviando i puntatori nelle estensioni del dispositivo smart card.
- 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 le funzionalità della smart card inserita.
LastError
Non utilizzato.
IoRequest
Struttura con i membri seguenti:
IoRequest.Information
Contiene il numero di byte restituiti.
IoRequest.RequestBuffer
Puntatore ai dati nella richiesta di I/O dell'utente da inviare alla scheda.
IoRequest.RequestBufferLength
Indica il numero di byte da inviare alla scheda.
IoRequest.ReplyBuffer
Puntatore al buffer che contiene i dati restituiti dalla richiesta di I/O.
IoRequest.ReplyBufferLength
Indica il numero di byte dei dati restituiti dalla richiesta di I/O.
MajorIoControlCode
Contiene il codice di controllo di I/O principale.
MinorIoControlCode
Contiene il codice di controllo di I/O secondario.
OsData
Contiene informazioni specifiche per il sistema operativo e il tipo di driver.
ReaderCapabilities
Contiene le funzionalità del lettore di tastiera.
ReaderExtension
Contiene dati specifici del lettore di smart card.
SmartcardReply
Contiene dati provenienti dal lettore.
SmartcardRequest
Contiene il comando corrente e i dati inviati alla smart card.
T0
Contiene i dati da usare con il protocollo T=0.
T1
Contiene i dati usati con il protocollo T=1.
PerfInfo
Reserved[25 - sizeof(PPERF_INFO)]
Riservato per l'uso del sistema.
Osservazioni
Questa struttura viene passata a tutte le funzioni di callback.
Le singole funzioni di callback sono identificate da una serie di valori costanti che devono essere usati come indici nella matrice ReaderFunction.
Indice | Descrizione | ||||||||
---|---|---|---|---|---|---|---|---|---|
RDF_ATR_PARSE | Opzionale. La funzione di analisi di RDF_ATR_PARSE analizza una risposta a reimpostazione (ATR) per la libreria di driver di smart card quando la libreria di driver non è in grado di riconoscere o analizzare la libreria di driver di smart card. | ||||||||
RDF_CARD_EJECT | Opzionale. RDF_CARD_EJECT funzione di callback La funzione di callback RDF_CARD_EJECT espelle una smart card inserita dal lettore. |
||||||||
RDF_CARD_POWER | La funzione di callback RDF_CARD_POWER reimposta o disattiva una smart card inserita. È obbligatorio che i driver del lettore di smart card implementino questa funzione di callback.
In caso di input, la struttura a cui punta SmartcardExtension deve avere i valori membro seguenti:
|
||||||||
RDF_CARD_TRACKING | La funzione di callback RDF_CARD_TRACKING installa un gestore eventi per tenere traccia ogni volta che una scheda viene inserita o rimossa da un lettore di schede. È obbligatorio che i driver del lettore di smart card implementino questa funzione di callback.
Quando si riceve una richiesta di IOCTL_SMARTCARD_IS_PRESENT, la libreria driver determina se la smart card è già presente. Se la smart card è presente, la libreria driver completa la richiesta con lo stato STATUS_SUCCESS. Se non è presente alcuna smart card, la libreria driver chiama la funzione di callback di rilevamento smart card del driver lettore e il driver lettore inizia a cercare la smart card. Dopo l'avvio del rilevamento delle smart card, la libreria driver contrassegna la richiesta come stato di STATUS_PENDING. La libreria driver completa la richiesta. driver di dispositivo WDM La libreria di driver WDM corrispondente aggiunge un puntatore alla richiesta in SmartcardExtension->OsData->NotificationIrp. Il driver del lettore deve completare la richiesta non appena rileva che una smart card è stata inserita o rimossa. Il driver lettore completa la richiesta chiamando IoCompleteRequest, dopo di che, il driver lettore deve impostare il NotificationIrp membro di SmartcardExtension -> OsData a NULL per informare la libreria driver che il driver lettore può accettare ulteriori richieste di rilevamento delle smart card. Poiché questa chiamata può avere una durata illimitata e il chiamante può terminare la richiesta prima del completamento, è importante contrassegnare questo IRP come annullabile.
|
||||||||
RDF_IOCTL_VENDOR | La funzione di callback RDF_IOCTL_VENDOR esegue operazioni IOCTL specifiche del fornitore. È facoltativo per i driver del lettore di smart card implementare questa funzione di callback.
All'input, il chiamante deve passare i valori seguenti alla funzione:
|
||||||||
RDF_READER_SWALLOW | La funzione di callback RDF_READER_SWALLOW esegue una rondine meccanica, che si verifica quando la smart card viene inserita completamente nel lettore di smart card. È facoltativo per i driver del lettore di smart card implementare questa funzione di callback. | ||||||||
RDF_SET_PROTOCOL | La funzione di callback RDF_SET_PROTOCOL seleziona un protocollo di trasmissione per la smart card inserita. I driver del lettore di smart card devono implementare questa funzione di callback.
All'input, il chiamante deve passare i valori seguenti alla funzione:
|
||||||||
RDF_TRANSMIT | La funzione di callback RDF_TRANSMIT esegue trasmissioni di dati. I driver del lettore di smart card devono implementare questa funzione di callback.
All'input, il chiamante deve passare i valori seguenti alla funzione:
Il membro dwProtocol deve contenere l'identificatore del protocollo restituito da una chiamata a IOCTL_SMARTCARD_SET_PROTOCOL. Il membro cbPciLength contiene le dimensioni, in byte, della struttura SCARD_IO_REQUEST. Le dimensioni di questa struttura sono in genere di 8 byte. La struttura SCARD_IO_REQUEST è seguita da dati (protocollo) da trasmettere alla scheda. A seconda del protocollo da usare per la trasmissione, la libreria offre diverse funzioni di supporto. Per altre informazioni su queste funzioni di supporto, vedere SmartcardT0Request (WDM) e SmartcardT1Request (WDM). RequestBuffer e ReplyBuffer puntano allo stesso buffer di sistema. Se si usa la funzione di libreria smartcardxxRequest e SmartcardxxReply, non si sovrascriverà il buffer di input. Se non si usano queste funzioni, creare una copia del RequestBuffer prima di avviare le trasmissioni. È necessario copiare la struttura SCARD_IO_REQUEST nel parametro ReplyBuffer, seguito dai dati ricevuti dalla scheda. Anche in questo caso, se si utilizza la SmartcardxxRequest e funzioni SmartcardxxReply, la libreria copierà la struttura. |
Fabbisogno
Requisito | Valore |
---|---|
intestazione | smclib.h (include Smclib.h) |