次の方法で共有


IOCTL_SMARTCARD_SET_PROTOCOL IOCTL (winsmcrd.h)

IOCTL_SMARTCARD_SET_PROTOCOL 要求は、カードが検出 (挿入) された後、ドライバーがスマート カードとの通信に使用するプロトコルを設定します。

メジャー コード

IRP_MJ_DEVICE_CONTROL

入力バッファー

  • Irp->AssociatedIrp.SystemBuffer 次の伝送に許容されるプロトコルのマスクが含まれています。 マスクには、次の値のビットごとの OR を指定できます。

    • SCARD_PROTOCOL_RAW
    • SCARD_PROTOCOL_T0
    • SCARD_PROTOCOL_T1
    • SCARD_PROTOCOL_DEFAULT
    • SCARD_PROTOCOL_OPTIMAL

    最後の 2 つの値は、ドライバーが可能な限り最適な通信パラメーター (SCARD_PROTOCOL_OPTIMAL) でプロトコルの種類の選択 (PTS) を明示的に実行するか、標準パラメーター (SCARD_PROTOCOL_DEFAULT) でカードの暗黙的なプロトコルを使用する必要があることを示す追加のビット定義です。 カードが 1 セットの通信パラメーターを持つプロトコルを 1 つだけサポートしている場合、ビットは無視されます。

  • Parameters.DeviceIoControl.InputBufferLength は sizeof(ULONG) に設定する必要があります。 ドライバーは、挿入されたカードで使用するマスクのプロトコルを決定します。

出力バッファー

  • Irp->AssociatedIrp.SystemBuffer ドライバーは、選択したプロトコルをここに格納します (たとえば、SCARD_PROTOCOL_T1)。 設定できるのは、マスクから 1 ビットだけです。

出力バッファーの長さ

  • Parameters.DeviceIoControl.OutputBufferLength は sizeof(ULONG) である必要があります。

状態ブロック

Irp->IoStatus.Information は sizeof(ULONG) に設定する必要があります。

Irp->IoStatus.Status は、次のいずれかの値に設定されます。

価値 意味
STATUS_SUCCESS プロトコルが正常に選択されました。
STATUS_NO_MEDIA リーダーでスマート カードが検出されません。
STATUS_IO_TIMEOUT 操作がタイムアウトしました。
STATUS_NOT_SUPPORTED スマート カードは、要求されたプロトコルをサポートしていません。
STATUS_INVALID_DEVICE_REQUEST マスクに既知のプロトコルが含まれています。

詳細については、「NTSTATUS 値 を参照してください。

必要条件

要件 価値
ヘッダー winsmcrd.h

関連項目

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

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