Что означает код HRESULT 0x80090309 (SEC_E_CANNOT_PACK)?

 
Предыдущий Следующий
SEC_E_INVALID_TOKEN SEC_E_QOP_NOT_SUPPORTED

SEC_E_CANNOT_PACK

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

SEC_E_CANNOT_PACK — HRESULT, относящийся к области SSPI/Schannel. Пакет безопасности не смог упаковать данные входа или учётные сведения в формат, требуемый для аутентификации.

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

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

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

Имя SEC_E_CANNOT_PACK помогает сузить поиск: CANNOT — невозможность действия; PACK — технический маркер «pack». Эти части имени не заменяют документацию API, но позволяют проверить, что журнал и код относятся к одному и тому же условию.

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

В случае SEC_E_CANNOT_PACK важно сохранить исходный контекст вызова: имя функции, параметры, состояние объекта и первый низкоуровневый статус. Для SEC_E_CANNOT_PACK без этого одинаковый HRESULT может ошибочно связываться с разными причинами.

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

Диагностический минимум

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

Как подтвердить исправление

В случае SEC_E_CANNOT_PACK проверка исправления SEC_E_CANNOT_PACK должна включать успешный рабочий путь, предсказуемый отказ на некорректном входе и отсутствие новых предупреждений в журналах подсистемы SSPI/Schannel.

Ссылки по SEC_E_CANNOT_PACK


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