SMARTCARD_EXTENSION-Struktur (smclib.h)
Die SMARTCARD_EXTENSION-Struktur wird sowohl vom Smart Karte Readertreiber als auch von der Smart Karte Driver Library verwendet, um auf alle anderen smart Karte Datenstrukturen zuzugreifen.
Syntax
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;
Member
Version
Gibt die Version dieser Struktur an.
VendorAttr
Enthält Informationen, die den Readertreiber identifizieren, z. B. Den Namen des Anbieters, die Einheitennummer und die Seriennummer.
ReaderFunction[16]
Die Zeile im Syntaxblock sollte lesen. NTSTATUS (*ReaderFunction[16])(PSMARTCARD_EXTENSION);
Ein Zeiger auf ein Array von Rückruffunktionen für Leser. Die Rückruffunktionen, die ein vom Anbieter bereitgestellter Readertreiber implementieren kann. Ein Readertreiber stellt diese Rückruffunktionen für die smart Karte-Bibliotheksroutine SmartcardDeviceControl zur Verfügung, die aufgerufen werden soll, indem Zeiger auf sie in der Geräteerweiterung smart Karte gespeichert werden.
- RDF_ATR_PARSE
- RDF_CARD_EJECT
- RDF_CARD_POWER
- RDF_CARD_TRACKING
- RDF_IOCTL_VENDOR
- RDF_READER_SWALLOW
- RDF_SET_PROTOCOL
- RDF_TRANSMIT
CardCapabilities
Enthält Funktionen des eingefügten intelligenten Karte.
LastError
Wird nicht verwendet.
IoRequest
Eine -Struktur mit den folgenden Membern:
IoRequest.Information
Enthält die Anzahl der zurückgegebenen Bytes.
IoRequest.RequestBuffer
Ein Zeiger auf die Daten in der E/A-Anforderung des Benutzers, die an die Karte gesendet werden sollen.
IoRequest.RequestBufferLength
Gibt die Anzahl der Bytes an, die an den Karte gesendet werden sollen.
IoRequest.ReplyBuffer
Ein Zeiger auf den Puffer, der die Daten enthält, die von der E/A-Anforderung zurückgegeben werden.
IoRequest.ReplyBufferLength
Gibt die Anzahl der Byte der Daten an, die von der E/A-Anforderung zurückgegeben werden.
MajorIoControlCode
Enthält den Haupt-E/A-Steuerungscode.
MinorIoControlCode
Enthält den Neben-E/A-Steuerungscode.
OsData
Enthält informationen, die für das Betriebssystem und den Treibertyp spezifisch sind.
ReaderCapabilities
Enthält die Funktionen des Tastaturlesers.
ReaderExtension
Enthält Daten, die für den Leser des intelligenten Karte spezifisch sind.
SmartcardReply
Enthält Daten, die vom Reader stammen.
SmartcardRequest
Enthält den aktuellen Befehl und die Daten, die an die intelligente Karte gesendet werden.
T0
Enthält die Daten für die Verwendung mit dem T=0-Protokoll.
T1
Enthält die Daten, die mit dem T=1-Protokoll verwendet werden.
PerfInfo
Reserved[25 - sizeof(PPERF_INFO)]
Ist für das System reserviert.
Hinweise
Diese Struktur wird an alle Rückruffunktionen übergeben.
Einzelne Rückruffunktionen werden durch eine Reihe konstanter Werte identifiziert, die als Indizes im ReaderFunction-Array verwendet werden sollen.
Index | BESCHREIBUNG | ||||||||
---|---|---|---|---|---|---|---|---|---|
RDF_ATR_PARSE | Optional. Die RDF_ATR_PARSE Analysefunktion analysiert eine ATR (Answer-to-Reset) für die smart Karte-Treiberbibliothek, wenn die Treiberbibliothek die Smart Karte-Treiberbibliothek nicht erkennen oder analysieren kann. | ||||||||
RDF_CARD_EJECT | Optional. rückruffunktion RDF_CARD_EJECT Die RDF_CARD_EJECT Rückruffunktion wirft eine eingefügte intelligente Karte aus dem Reader aus. |
||||||||
RDF_CARD_POWER | Die RDF_CARD_POWER Rückruffunktion setzt eine eingefügte intelligente Karte zurück oder deaktiviert sie. Es ist obligatorisch, dass Treiber für intelligente Karte-Leser diese Rückruffunktion implementieren.
Bei der Eingabe sollte die Struktur, auf die smartcardExtension verweist, die folgenden Memberwerte aufweisen:
|
||||||||
RDF_CARD_TRACKING | Die RDF_CARD_TRACKING-Rückruffunktion installiert einen Ereignishandler, der jedes Mal nachverfolgt wird, wenn ein Karte in einen Karte Reader eingefügt oder daraus entfernt wird. Es ist obligatorisch, dass Treiber für intelligente Karte-Leser diese Rückruffunktion implementieren.
Nach Erhalt einer IOCTL_SMARTCARD_IS_PRESENT-Anforderung ermittelt die Treiberbibliothek, ob die intelligente Karte bereits vorhanden ist. Wenn die intelligente Karte vorhanden ist, schließt die Treiberbibliothek die Anforderung mit einem status STATUS_SUCCESS ab. Wenn kein intelligenter Karte vorhanden ist, ruft die Treiberbibliothek die Rückruffunktion smart Karte tracking des Lesertreibers auf, und der Readertreiber sucht nach dem intelligenten Karte. Nach dem Initiieren der intelligenten Karte-Nachverfolgung markiert die Treiberbibliothek die Anforderung als status STATUS_PENDING. Die Treiberbibliothek schließt die Anforderung ab. WDM-Gerätetreiber Die entsprechende WDM-Treiberbibliothek fügt einen Zeiger auf die Anforderung in SmartcardExtension-OsData-NotificationIrp>> hinzu. Der Readertreiber muss die Anforderung abschließen, sobald er erkennt, dass eine intelligente Karte eingefügt oder entfernt wurde. Der Readertreiber schließt die Anforderung ab, indem er IoCompleteRequest aufruft. Danach muss der Readertreiber das NotificationIrp-Mitglied von SmartcardExtension –> OsData wieder auf NULL festlegen, um die Treiberbibliothek darüber zu informieren, dass der Readertreiber weitere intelligente Karte-Nachverfolgungsanforderungen akzeptieren kann. Da dieser Aufruf eine unbegrenzte Dauer haben kann und der Aufrufer die Anforderung beenden kann, bevor er abgeschlossen ist, ist es wichtig, diesen IRP als abbruchfähig zu markieren.
|
||||||||
RDF_IOCTL_VENDOR | Die RDF_IOCTL_VENDOR-Rückruffunktion führt herstellerspezifische IOCTL-Vorgänge aus. Smart Karte Reader-Treiber können diese Rückruffunktion optional implementieren.
Bei der Eingabe muss der Aufrufer die folgenden Werte an die Funktion übergeben:
|
||||||||
RDF_READER_SWALLOW | Die RDF_READER_SWALLOW Rückruffunktion führt eine mechanische Schwalbe aus, was passiert, wenn die intelligente Karte vollständig in den smart Karte Reader eingefügt wird. Smart Karte Reader-Treiber können diese Rückruffunktion optional implementieren. | ||||||||
RDF_SET_PROTOCOL | Die rückruffunktion RDF_SET_PROTOCOL wählt ein Übertragungsprotokoll für die eingefügte smart Karte aus. Smart Karte Reader-Treiber müssen diese Rückruffunktion implementieren.
Bei der Eingabe muss der Aufrufer die folgenden Werte an die Funktion übergeben:
|
||||||||
RDF_TRANSMIT | Die RDF_TRANSMIT-Rückruffunktion führt Datenübertragungen durch. Smart Karte Reader-Treiber müssen diese Rückruffunktion implementieren.
Bei der Eingabe muss der Aufrufer die folgenden Werte an die Funktion übergeben:
Der dwProtocol-Member muss den Protokollbezeichner enthalten, der von einem Aufruf von IOCTL_SMARTCARD_SET_PROTOCOL zurückgegeben wird. Das cbPciLength-Element enthält die Größe der SCARD_IO_REQUEST-Struktur in Bytes. Die Größe dieser Struktur beträgt in der Regel 8 Byte. Auf die SCARD_IO_REQUEST-Struktur folgen (Protokoll-)Daten, die an die Karte übertragen werden. Abhängig vom Protokoll, das für die Übertragung verwendet werden soll, bietet die Bibliothek mehrere Unterstützungsfunktionen. Weitere Informationen zu diesen Unterstützungsfunktionen finden Sie unter SmartcardT0Request (WDM) und SmartcardT1Request (WDM). RequestBuffer und ReplyBuffer zeigen auf denselben Systempuffer. Wenn Sie die Bibliotheksfunktion SmartcardxxRequest und SmartcardxxReply verwenden, überschreiben Sie den Eingabepuffer nicht. Wenn Sie diese Funktionen nicht verwenden, erstellen Sie eine Kopie des RequestBuffers , bevor Sie mit der Übertragung beginnen. Sie müssen die SCARD_IO_REQUEST-Struktur in den ReplyBuffer-Parameter kopieren, gefolgt von den Daten, die vom Karte empfangen werden. Auch wenn Sie die Funktionen SmartcardxxRequest und SmartcardxxReply verwenden, kopiert die Bibliothek die Struktur für Sie. |
Anforderungen
Anforderung | Wert |
---|---|
Header | smclib.h (einschließen von Smclib.h) |