struttura SMARTCARD_EXTENSION (smclib.h)
La struttura SMARTCARD_EXTENSION viene utilizzata sia dal driver del lettore di smart card che dalla libreria di driver di smart card per accedere a tutte le altre strutture di dati della 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;
Members
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 essere letta 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 queste funzioni di callback disponibili per la routine della libreria di smart card , SmartcardDeviceControl, per chiamare archiviando i puntatori ad essi nell'estensione 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 usato.
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 del sistema operativo e del 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'utilizzo nel sistema.
Commenti
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 | facoltativo. La funzione di analisi RDF_ATR_PARSE analizza una risposta alla 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 della smart card. | ||||||||
RDF_CARD_EJECT | facoltativo. 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.
Nell'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.
Al momento della ricezione di una richiesta di IOCTL_SMARTCARD_IS_PRESENT , la libreria di 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 con 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 reader completa la richiesta chiamando IoCompleteRequest, dopo di che, il driver reader deve impostare il membro NotificationIrp di SmartcardExtension -> OsData su NULL per informare la libreria driver che il driver di lettura può accettare ulteriori richieste di rilevamento delle smart card. Poiché questa chiamata può avere una durata indefinita e il chiamante può terminare la richiesta prima che venga completata, è 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.
In 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 completamente inserita nel lettore smart card. È facoltativo per i driver di lettura 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 di lettore smart card devono implementare questa funzione di callback.
In input, il chiamante deve passare i valori seguenti alla funzione:
|
||||||||
RDF_TRANSMIT | La funzione di callback RDF_TRANSMIT esegue trasmissioni di dati. I driver di lettore smart card devono implementare questa funzione di callback.
In 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 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 di 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 usano le funzioni SmartcardxxRequest e SmartcardxxReply , la libreria copia la struttura. |
Requisiti
Requisito | Valore |
---|---|
Intestazione | smclib.h (includere Smclib.h) |