次の方法で共有


IOCTL_SMARTCARD_TRANSMIT IOCTL (winsmcrd.h)

IOCTL_SMARTCARD_TRANSMIT要求は、挿入されたスマート カードに対してデータを送信し、そこからデータを受信します。

メジャー コード

IRP_MJ_DEVICE_CONTROL

[入力バッファー]

入力バッファーの長さ

  • 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

こちらもご覧ください

近距離無線通信 (NFC) 設計ガイド

スマート カード設計ガイド