Функция LsaCallAuthenticationPackage (ntsecapi.h)

Функция LsaCallAuthenticationPackage используется приложением для входа в систему для взаимодействия с пакетом проверки подлинности.

Эта функция обычно используется для доступа к службам, предоставляемым пакетом проверки подлинности.

Синтаксис

NTSTATUS LsaCallAuthenticationPackage(
  [in]  HANDLE    LsaHandle,
  [in]  ULONG     AuthenticationPackage,
  [in]  PVOID     ProtocolSubmitBuffer,
  [in]  ULONG     SubmitBufferLength,
  [out] PVOID     *ProtocolReturnBuffer,
  [out] PULONG    ReturnBufferLength,
  [out] PNTSTATUS ProtocolStatus
);

Параметры

[in] LsaHandle

Дескриптор, полученный при предыдущем вызове LsaRegisterLogonProcess или LsaConnectUntrusted.

[in] AuthenticationPackage

Предоставляет идентификатор пакета проверки подлинности. Это значение получается путем вызова LsaLookupAuthenticationPackage.

[in] ProtocolSubmitBuffer

Буфер сообщений для конкретного пакета проверки подлинности, передаваемый в пакет проверки подлинности.

Сведения о формате и содержимом этого буфера см. в документации по отдельному пакету проверки подлинности.

[in] SubmitBufferLength

Указывает длину буфера ProtocolSubmitBuffer (в байтах).

[out] ProtocolReturnBuffer

Указатель, получающий адрес буфера, возвращаемого пакетом проверки подлинности.

Сведения о формате и содержимом этого буфера см. в документации по отдельному пакету проверки подлинности.

Этот буфер выделяется этой функцией. Завершив использование этого буфера, освободите память, вызвав функцию LsaFreeReturnBuffer .

[out] ReturnBufferLength

Указатель на ULONG , получающий длину возвращаемого буфера в байтах.

[out] ProtocolStatus

Если функция выполнена успешно, этот параметр получает код NTSTATUS , указывающий состояние завершения пакета проверки подлинности.

Возвращаемое значение

Если функция выполняется успешно, возвращаемое значение будет STATUS_SUCCESS. Проверьте параметр ProtocolStatus , чтобы получить состояние, возвращаемое пакетом проверки подлинности.

Если функция завершается сбоем, возвращаемым значением будет код NTSTATUS . Ниже приведены возможные коды ошибок.

Код возврата Описание
STATUS_QUOTA_EXCEEDED
Не удалось выполнить вызов, так как квоты памяти клиента недостаточно для выделения возвращаемого буфера.
STATUS_NO_SUCH_PACKAGE
Указанный пакет проверки подлинности не распознается LSA.
STATUS_PKINIT_FAILURE
Клиент Kerberos получил недопустимый сертификат KDC. Для входа устройства требуется строгая проверка KDC, поэтому центр сертификации должен иметь сертификаты, использующие шаблон проверки подлинности Kerberos или эквивалентный шаблон. Кроме того, срок действия сертификата KDC может быть просрочен, отозван или клиент подвергается активной атаке, отправляя запросы на неправильный сервер.
STATUS_PKINIT_CLIENT_FAILURE
Клиент Kerberos использует недопустимый системный сертификат. Для входа устройства должно быть DNS-имя. Кроме того, срок действия системного сертификата может быть истек или выбран неправильный.
 

Дополнительные сведения см. в разделе Возвращаемые значения функции политики LSA.

Функция LsaNtStatusToWinError преобразует код NTSTATUS в код ошибки Windows.

Комментарии

Приложения для входа могут вызывать LsaCallAuthenticationPackage для взаимодействия с пакетом проверки подлинности. Это может сделать приложение по нескольким причинам.

  • Реализация протоколов проверки подлинности с несколькими сообщениями, таких как протокол NTLM Challenge-Response.
  • Передача сведений об изменении состояния в пакет проверки подлинности. Например, NTLM может уведомить пакет MSV1_0 о том, что ранее недоступный контроллер домена теперь доступен. Затем пакет проверки подлинности повторно войдет в систему всех пользователей, вошедшего в этот контроллер домена.
Как правило, эта функция используется для обмена информацией с пользовательским пакетом проверки подлинности. Эта функция не требуется приложению, использующим один из пакетов проверки подлинности, поставляемых с Windows, например MSV1_0 или Kerberos.

Необходимо вызвать LsaCallAuthenticationPackage , чтобы очистить учетные данные устройства PKINIT для LOCAL_SYSTEM и NETWORK_SERVICE. Если учетные данные устройства PKINIT отсутствуют, успешный вызов не выполняет никаких операций. При наличии учетных данных устройства PKINIT успешный вызов очищает учетные данные устройства PKINIT, чтобы остались только учетные данные пароля.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header ntsecapi.h
Библиотека Secur32.lib
DLL Secur32.dll

См. также раздел

LsaFreeReturnBuffer

LsaLookupAuthenticationPackage

LsaNtStatusToWinError