IOCTL_SMARTCARD_TRANSMIT IOCTL (winsmcrd.h)
IOCTL_SMARTCARD_TRANSMIT要求は、挿入されたスマート カードに対してデータを送信し、そこからデータを受信します。
メジャー コード
[入力バッファー]
- Irp->AssociatedIrp.SystemBuffer挿入されたスマート カードに送信するデータが続くSCARD_IO_REQUEST構造体へのポインター。
入力バッファーの長さ
- Parameters.DeviceIoControl.InputBufferLength 構造体のサイズと末尾のデータ バイトの長さ (存在する場合) が含まれます。 dwProtocol メンバーは、以前に選択したプロトコルに設定する必要があり、cbPciLength メンバーは、SCARD_IO_REQUEST構造体自体のサイズ (通常は 8 バイト) に設定する必要があります。 構造体は、将来のプロトコルに使用されます。 カードに送信されるデータは、直ちにこの構造に従う必要があります。
出力バッファー
バイト バッファーには、送信の結果が含まれます。 バッファーは、受信したデータの直後にSCARD_IO_REQUEST構造体を指します。
- Irp->AssociatedIrp.SystemBuffer 送信の結果を受信します。 このバッファーは 、SCARD_IO_REQUEST 構造体で始まる必要もあります。 カードから受信したデータは、構造体の直後に格納する必要があります。
出力バッファーの長さ
- Parameters.DeviceIoControl.OutputBufferLength 出力バッファーの長さを格納します。
ステータス ブロック
Irp->IoStatus.Status は、次のいずれかの値に設定されます。
値 | 意味 |
---|---|
STATUS_SUCCESS | 送信が成功しました。 |
STATUS_NO_MEDIA | リーダーでスマート カードが検出されません。 |
STATUS_IO_TIMEOUT | 操作はタイムアウトしました。 |
STATUS_INVALID_DEVICE_STATE | ヘッダー ファイル内のプロトコルが、以前に選択したスマート カード プロトコルと一致しません。 |
STATUS_BUFFER_TOO_SMALL | 出力バッファーが小さすぎて、戻りデータが返されません。 |
STATUS_DEVICE_POWERED_OFF | 近接無線制御がオフです。 |
注釈
IOCTL_SMARTCARD_TRANSMITは、クライアントから、ISO7816-4 準拠 APDU で検出されたスマート カードにデータを送信します。 これらの APDU は、PC/SC 仕様に関して解釈されます (セクション 4.3.7 には、さまざまな NFC 非接触タグ形式のサポートに関するより詳細な要件があります)。 NFP 機能はスマート カードと同じドライバーを共有するため、検出の直後にカードを接続する必要があります。"送信" の明示的な接続は必要ありません。
入力バッファーと出力バッファーは同じメモリ領域を指しているため、ドライバーは入力データの上書きを回避する必要があります。 スマート カード ドライバー ライブラリを使用して、入力データが上書きされないようにします。
要件
要件 | 値 |
---|---|
Header | winsmcrd.h |