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 つの値は、ドライバーがプロトコルの種類の選択 (PTS) を可能な限り最適な通信パラメーター (SCARD_PROTOCOL_OPTIMAL) で明示的に実行するか、標準パラメーター (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 値」を参照してください。

要件

要件
Header winsmcrd.h

こちらもご覧ください

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

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