Что означает код HRESULT 0x80090316 (SEC_E_BAD_PKGID)?

 
Предыдущий Следующий
SEC_E_NO_AUTHENTICATING_AUTHORITY SEC_E_CONTEXT_EXPIRED

SEC_E_BAD_PKGID

Как диагностировать SEC_E_BAD_PKGID

SEC_E_BAD_PKGID — HRESULT, относящийся к области SSPI/Schannel. Указан недействительный или недоступный идентификатор пакета безопасности SSP.

Для SEC_E_BAD_PKGID статус возник на уровне пакета безопасности Windows. Для SEC_E_BAD_PKGID он не всегда означает неверный пароль: возможны ошибки времени жизни контекста, алгоритма, маршалинга и завершения TLS.

Практический вывод для SEC_E_BAD_PKGID: этот HRESULT фиксирует описанное условие, но сам по себе не показывает, какой участник операции первым нарушил контракт. Для SEC_E_BAD_PKGID найдите первый вызов, вернувший статус, и только после этого меняйте конфигурацию подсистемы SSPI/Schannel.

Как читать имя SEC_E_BAD_PKGID

Имя SEC_E_BAD_PKGID помогает сузить поиск: BAD — неверные данные; PKGID — технический маркер «pkgid». Эти части имени не заменяют документацию API, но позволяют проверить, что журнал и код относятся к одному и тому же условию.

Разбор условия ошибки

Для SEC_E_BAD_PKGID формулировка указывает на недопустимые данные или состояние. Для SEC_E_BAD_PKGID сохраните исходное представление до нормализации и проверяйте структуру на той границе, где её принимает API.

  • Для SEC_E_BAD_PKGID сопоставьте фактическое значение, структуру и версию входных данных с документированным контрактом.
  • При разборе SEC_E_BAD_PKGID запишите имя security package, функцию SSPI, входные/выходные флаги и состояние handshake.
  • При разборе SEC_E_BAD_PKGID проверьте владельца и время жизни CredHandle/CtxtHandle, а также границы impersonation и потока.
  • При разборе SEC_E_BAD_PKGID для Schannel сохраните TLS-версию, cipher suite, сертификаты сторон и факт получения close_notify.
  • При разборе SEC_E_BAD_PKGID не переиспользуйте истёкший или завершённый контекст; создайте новый handshake.

Как воспроизвести проблему

  • Для SEC_E_BAD_PKGID сохраните первый SECURITY_STATUS и результат последующего CompleteAuthToken/EncryptMessage/DecryptMessage.
  • Для SEC_E_BAD_PKGID включите журнал Schannel на время воспроизведения и сопоставьте события с сетевой трассировкой.
  • Для SEC_E_BAD_PKGID проверяйте пакет безопасности отдельно на минимальном клиенте с теми же параметрами.

Критерий успешного исправления

Для SEC_E_BAD_PKGID для SEC_E_BAD_PKGID недостаточно скрыть ошибку повтором. Для SEC_E_BAD_PKGID после изменения воспроизведите исходную операцию, проверьте конечное состояние объекта и убедитесь, что ресурсы освобождаются без потери первичного HRESULT.

Ссылки по SEC_E_BAD_PKGID


Нужно найти другой код? Найти другой код состояния или ошибки.