IOCTL_SMARTCARD_SET_PROTOCOL IOCTL (winsmcrd.h)
IOCTL_SMARTCARD_SET_PROTOCOL要求は、カードが検出 (挿入) された後に、ドライバーがスマート カードとの通信に使用するプロトコルを設定します。
メジャー コード
[入力バッファー]
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 |