IOCTL_SMARTCARD_SET_PROTOCOL IOCTL (winsmcrd.h)
Запрос IOCTL_SMARTCARD_SET_PROTOCOL задает протокол, который драйвер будет использовать для связи со смарт-карта после обнаружения (вставки) карта.
Основной код
Входной буфер
Irp->AssociatedIrp.SystemBuffer Содержит маску протоколов, допустимых для следующих передач. Маска может быть побитовой ИЛИ следующих значений:
- SCARD_PROTOCOL_RAW
- SCARD_PROTOCOL_T0
- SCARD_PROTOCOL_T1
- SCARD_PROTOCOL_DEFAULT
- SCARD_PROTOCOL_OPTIMAL
Последние два значения — это дополнительные битовые определения, которые указывают, что драйвер должен либо явно выбрать тип протокола (PTS) с наилучшими возможными параметрами связи (SCARD_PROTOCOL_OPTIMAL), либо использовать неявный протокол карта со стандартными параметрами (SCARD_PROTOCOL_DEFAULT). Если карта поддерживает только один протокол с одним набором параметров связи, биты игнорируются.
Parameters.DeviceIoControl.InputBufferLength Необходимо задать значение sizeof(ULONG). Драйвер решает, какой протокол из маски использовать с вставленным карта.
Выходной буфер
- Irp->AssociatedIrp.SystemBuffer Драйвер хранит выбранный протокол здесь (например, SCARD_PROTOCOL_T1). Можно задать только один бит маски.
Длина выходного буфера
- 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 |