SMARTCARD_EXTENSION 構造体 (smclib.h)
SMARTCARD_EXTENSION構造体は、スマート カード リーダー ドライバーとスマート カード ドライバー ライブラリの両方で使用され、他のすべてのスマート カード データ構造にアクセスします。
構文
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;
メンバー
Version
この構造体のバージョンを示します。
VendorAttr
ベンダー名、単位番号、シリアル番号など、リーダー ドライバーを識別する情報が含まれます。
ReaderFunction[16]
構文ブロック内の行を読み取る必要があります NTSTATUS (*ReaderFunction[16])(PSMARTCARD_EXTENSION);
リーダー用のコールバック関数の配列へのポインター。 ベンダーが提供するリーダー ドライバーが実装できるコールバック関数。 リーダー ドライバーを使用すると、スマート カード ライブラリ ルーチン SmartcardDeviceControl でこれらのコールバック関数を使用して、スマート カード デバイス拡張機能にポインターを格納して呼び出します。
- RDF_ATR_PARSE
- RDF_CARD_EJECT
- RDF_CARD_POWER
- RDF_CARD_TRACKING
- RDF_IOCTL_VENDOR
- RDF_READER_SWALLOW
- RDF_SET_PROTOCOL
- RDF_TRANSMIT
CardCapabilities
挿入されたスマート カードの機能が含まれています。
LastError
使用されていません。
IoRequest
次のメンバーを持つ 構造体。
IoRequest.Information
返されるバイト数を格納します。
IoRequest.RequestBuffer
カードに送信されるユーザーの I/O 要求内のデータへのポインター。
IoRequest.RequestBufferLength
カードに送信するバイト数を示します。
IoRequest.ReplyBuffer
I/O 要求によって返されるデータを保持するバッファーへのポインター。
IoRequest.ReplyBufferLength
I/O 要求によって返されるデータのバイト数を示します。
MajorIoControlCode
主要な I/O 制御コードが含まれます。
MinorIoControlCode
マイナー I/O 制御コードが含まれます。
OsData
オペレーティング システムとドライバーの種類に固有の情報が含まれます。
ReaderCapabilities
キーボード リーダーの機能が含まれています。
ReaderExtension
スマート カード リーダーに固有のデータが含まれます。
SmartcardReply
リーダーから取得したデータが含まれます。
SmartcardRequest
現在のコマンドと、スマート カードに送信されるデータが含まれます。
T0
T=0 プロトコルで使用するデータを格納します。
T1
T=1 プロトコルで使用されるデータを格納します。
PerfInfo
Reserved[25 - sizeof(PPERF_INFO)]
システムで使用するために予約されています。
注釈
この構造体は、すべてのコールバック関数に渡されます。
個々のコールバック関数は、 ReaderFunction 配列のインデックスとして使用する必要がある一連の定数値によって識別されます。
インデックス | 説明 | ||||||||
---|---|---|---|---|---|---|---|---|---|
RDF_ATR_PARSE | 省略可能。 RDF_ATR_PARSE解析関数は、ドライバー ライブラリがスマート カード ドライバー ライブラリを認識または解析できない場合に、スマート カード ドライバー ライブラリのリセット応答 (ATR) を解析します。 | ||||||||
RDF_CARD_EJECT | 省略可能。 RDF_CARD_EJECT コールバック関数 RDF_CARD_EJECT コールバック関数は、挿入されたスマート カードをリーダーから取り出します。 |
||||||||
RDF_CARD_POWER | RDF_CARD_POWERコールバック関数は、挿入されたスマート カードをリセットまたはオフにします。スマート カード リーダー ドライバーでは、このコールバック関数を実装する必要があります。
入力時に SmartcardExtension が指す構造体には、次のメンバー値が必要です。
|
||||||||
RDF_CARD_TRACKING | RDF_CARD_TRACKING コールバック関数は、カードがカード リーダーに挿入または削除されるたびに追跡するイベント ハンドラーをインストールします。スマート カード リーダー ドライバーでは、このコールバック関数を実装する必要があります。
IOCTL_SMARTCARD_IS_PRESENT要求を受信すると、ドライバー ライブラリはスマート カードが既に存在するかどうかを判断します。 スマート カードが存在する場合、ドライバー ライブラリは、STATUS_SUCCESSの状態で要求を完了します。 スマート カードが存在しない場合、ドライバー ライブラリはリーダー ドライバーのスマート カード追跡コールバック関数を呼び出し、リーダー ドライバーはスマート カードの検索を開始します。 スマート カード追跡を開始した後、ドライバー ライブラリは要求を STATUS_PENDING の状態としてマークします。 ドライバー ライブラリが要求を完了します。 WDM デバイス ドライバー 対応する WDM ドライバー ライブラリは、SmartcardExtension-OsData-NotificationIrp>> の要求にポインターを追加します。 リーダー ドライバーは、スマート カードが挿入または削除されたことを検出したらすぐに要求を完了する必要があります。 リーダー ドライバーは、IoCompleteRequest を呼び出して要求を完了します。その後、リーダー ドライバーは SmartcardExtension -> OsData の NotificationIrp メンバーを NULL に戻して、リーダー ドライバーがスマート カード追跡要求をさらに受け入れることができることをドライバー ライブラリに通知する必要があります。 この呼び出しには無期限の期間があり、呼び出し元は完了する前に要求を終了できるため、この IRP を取り消し可能としてマークすることが重要です。
|
||||||||
RDF_IOCTL_VENDOR | RDF_IOCTL_VENDOR コールバック関数は、ベンダー固有の IOCTL 操作を実行します。スマート カード リーダー ドライバーでは、このコールバック関数を実装することは省略可能です。
入力時に、呼び出し元は次の値を関数に渡す必要があります。
|
||||||||
RDF_READER_SWALLOW | RDF_READER_SWALLOWコールバック関数は、スマート カードがスマート カード リーダーに完全に挿入されたときに発生する機械的な飲み込み機能を実行します。スマート カード リーダー ドライバーでは、このコールバック関数を実装することは省略可能です。 | ||||||||
RDF_SET_PROTOCOL | RDF_SET_PROTOCOL コールバック関数は、挿入されたスマート カードの伝送プロトコルを選択します。スマート カード リーダー ドライバーは、このコールバック関数を実装する必要があります。
入力時に、呼び出し元は次の値を関数に渡す必要があります。
|
||||||||
RDF_TRANSMIT | RDF_TRANSMITコールバック関数は、データ転送を実行します。スマート カード リーダー ドライバーは、このコールバック関数を実装する必要があります。
入力時に、呼び出し元は次の値を関数に渡す必要があります。
dwProtocol メンバーには、IOCTL_SMARTCARD_SET_PROTOCOLの呼び出しによって返されるプロトコル識別子が含まれている必要があります。 cbPciLength メンバーには、SCARD_IO_REQUEST構造体のサイズ (バイト単位) が含まれています。 この構造体のサイズは通常 8 バイトです。 SCARD_IO_REQUEST構造の後に、カードに送信する (プロトコル) データが続きます。 転送に使用するプロトコルに応じて、ライブラリにはいくつかのサポート機能が用意されています。 これらのサポート関数の詳細については、「SmartcardT0Request (WDM)」および「SmartcardT1Request (WDM)」を参照してください。 RequestBuffer と ReplyBuffer は 、同じシステム バッファーを指します。 ライブラリ関数 SmartcardxxRequest と SmartcardxxReply を使用する場合、入力バッファーは上書きされません。 これらの関数を使用しない場合は、転送を開始する前に RequestBuffer のコピーを作成します。 SCARD_IO_REQUEST構造体を ReplyBuffer パラメーターにコピーし、その後にカードから受信したデータをコピーする必要があります。 ここでも、 SmartcardxxRequest 関数と SmartcardxxReply 関数を使用すると、ライブラリによって構造がコピーされます。 |
要件
要件 | 値 |
---|---|
Header | smclib.h (Smclib.h を含む) |