| Предыдущий | Следующий |
| SCARD_E_NO_MEMORY | SCARD_E_INSUFFICIENT_BUFFER |
SCARD_F_WAITED_TOO_LONG
Не путайте это с тайм-аутом вызывающей стороны
SCARD_F_WAITED_TOO_LONG — статус сбоя диспетчера ресурсов смарт-карт. Он отличается от SCARD_E_TIMEOUT, который означает истечение периода ожидания, заданного вызывающей стороной. Здесь стек PC/SC обнаружил, что один из его внутренних таймеров согласованности истёк при обслуживании считывателя, карты, контекста или незавершённой операции.
Поскольку код относится к уровню диспетчера ресурсов, немедленный цикл вокруг того же вызова может скрыть реальную проблему. Запишите API, вернувший ошибку, имя считывателя, контекст диспетчера ресурсов и наличие другого потока, ожидающего в SCardGetStatusChange или удерживающего транзакцию карты. Затем повторно запросите состояние считывателя и создайте новый контекст, если состояние службы или считывателя изменилось.
Полезные проверки
- Различайте в журналах ограничение ожидания приложения и сбой инфраструктуры PC/SC: для них нужны разные пути восстановления.
- Убедитесь, что длительные транзакции карты своевременно завершаются. Windows указывает, что бездействующая транзакция карты может привести к сбросу.
- Проверьте журналы считывателя и службы Smart Card до перезапуска приложения, особенно если результат стабильно воспроизводится с одним считывателем.
Ссылки
- Microsoft: возвращаемые значения смарт-карт
- PCSC-lite: коды ошибок
- PC/SC Workgroup: спецификации
- Microsoft: SCardBeginTransaction
Нужно найти другой код? Найти другой код состояния или ошибки.