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 つの値は、ドライバーが可能な限り最適な通信パラメーター (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 |