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 機能はスマート カードと同じドライバーを共有するため、検出の直後にカードを接続する必要があります。"送信" の明示的な接続は必要ありません。
入力バッファーと出力バッファーが同じメモリ領域を指しているため、ドライバーは入力データの上書きを回避する必要があります。 スマート カード ドライバー ライブラリを使用して、入力データが上書きされないようにします。
必要条件
要件 | 価値 |
---|---|
ヘッダー | winsmcrd.h |