| Предыдущий | Следующий |
| SEC_I_LOCAL_LOGON | SEC_I_INCOMPLETE_CREDENTIALS |
SEC_I_CONTEXT_EXPIRED
Практический разбор SEC_I_CONTEXT_EXPIRED
SEC_I_CONTEXT_EXPIRED — HRESULT, относящийся к области SSPI/Schannel. Удалённая сторона завершила использование соединения Schannel и начала штатное закрытие TLS-контекста.
Для SEC_I_CONTEXT_EXPIRED код относится к Security Support Provider Interface или Schannel и описывает состояние пакета безопасности, credential handle, контекста либо защищённого сообщения.
Практический вывод для SEC_I_CONTEXT_EXPIRED: этот HRESULT фиксирует описанное условие, но сам по себе не показывает, какой участник операции первым нарушил контракт. Для SEC_I_CONTEXT_EXPIRED найдите первый вызов, вернувший статус, и только после этого меняйте конфигурацию подсистемы SSPI/Schannel.
Как читать имя SEC_I_CONTEXT_EXPIRED
Имя SEC_I_CONTEXT_EXPIRED помогает сузить поиск: I — технический маркер «i»; CONTEXT — контекст выполнения; EXPIRED — истёкший срок действия. Эти части имени не заменяют документацию API, но позволяют проверить, что журнал и код относятся к одному и тому же условию.
Что проверить в первую очередь
Для SEC_I_CONTEXT_EXPIRED статус указывает на завершившийся жизненный цикл объекта или контекста. Применительно к SEC_I_CONTEXT_EXPIRED повтор через прежний дескриптор обычно неверен — требуется заново получить или создать объект.
- Для SEC_I_CONTEXT_EXPIRED найдите момент закрытия/удаления объекта и исключите использование устаревшей ссылки после этого события.
- При разборе SEC_I_CONTEXT_EXPIRED для Schannel сохраните TLS-версию, cipher suite, сертификаты сторон и факт получения close_notify.
- При разборе SEC_I_CONTEXT_EXPIRED не переиспользуйте истёкший или завершённый контекст; создайте новый handshake.
- При разборе SEC_I_CONTEXT_EXPIRED запишите имя security package, функцию SSPI, входные/выходные флаги и состояние handshake.
- При разборе SEC_I_CONTEXT_EXPIRED проверьте владельца и время жизни CredHandle/CtxtHandle, а также границы impersonation и потока.
Как воспроизвести проблему
- Для SEC_I_CONTEXT_EXPIRED сохраните первый SECURITY_STATUS и результат последующего CompleteAuthToken/EncryptMessage/DecryptMessage.
- Для SEC_I_CONTEXT_EXPIRED включите журнал Schannel на время воспроизведения и сопоставьте события с сетевой трассировкой.
- Для SEC_I_CONTEXT_EXPIRED проверяйте пакет безопасности отдельно на минимальном клиенте с теми же параметрами.
Как подтвердить исправление
Для SEC_I_CONTEXT_EXPIRED исправление SEC_I_CONTEXT_EXPIRED подтверждено, когда исходный сценарий завершается ожидаемо, журналы больше не содержат этого статуса, а отдельный отрицательный тест по-прежнему корректно обнаруживает описанное условие.
Ссылки по SEC_I_CONTEXT_EXPIRED
Нужно найти другой код? Найти другой код состояния или ошибки.