Поделиться через


функция обратного вызова LSA_AP_LOGON_USER_EX (ntsecpkg.h)

Выполняет проверку подлинности учетных данных для входа пользователя.

Эта функция вызывается локальным центром безопасности (LSA) только для первоначального входа пользователя. Последующие запросы проверки подлинности должны использовать LsaCallAuthenticationPackage. Если LsaApLogonUserEx завершается успешно, он создает сеанс входа и возвращает сведения, используемые для создания маркера, представляющего только что вошедшего в систему пользователя.

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

Синтаксис

LSA_AP_LOGON_USER_EX LsaApLogonUserEx;

NTSTATUS LsaApLogonUserEx(
  [in]  PLSA_CLIENT_REQUEST ClientRequest,
  [in]  SECURITY_LOGON_TYPE LogonType,
  [in]  PVOID AuthenticationInformation,
  [in]  PVOID ClientAuthenticationBase,
  [in]  ULONG AuthenticationInformationLength,
  [out] PVOID *ProfileBuffer,
  [out] PULONG ProfileBufferLength,
  [out] PLUID LogonId,
  [out] PNTSTATUS SubStatus,
  [out] PLSA_TOKEN_INFORMATION_TYPE TokenInformationType,
  [out] PVOID *TokenInformation,
  [out] PUNICODE_STRING *AccountName,
  [out] PUNICODE_STRING *AuthenticatingAuthority,
  [out] PUNICODE_STRING *MachineName
)
{...}

Параметры

[in] ClientRequest

Указатель на непрозрачный LSA_CLIENT_REQUEST тип данных, представляющий запрос клиента LSA.

[in] LogonType

Структура SECURITY_LOGON_TYPE , которая определяет тип попытки входа.

[in] AuthenticationInformation

Предоставляет сведения о проверке подлинности, относящиеся к пакету проверки подлинности. LSA освободит этот буфер.

[in] ClientAuthenticationBase

Предоставляет адрес сведений о проверке подлинности в клиентском процессе. Это может потребоваться для повторного сопоставления любых указателей в буфере AuthenticationInformation .

[in] AuthenticationInformationLength

Указывает длину буфера AuthenticationInformation .

[out] ProfileBuffer

Указатель, получающий адрес буфера профиля в клиентском процессе. Пакет проверки подлинности отвечает за выделение буфера ProfileBuffer в клиентском процессе путем вызова функции AllocateClientBuffer . Однако если впоследствии LSA обнаруживает ошибку, которая препятствует успешному входу, LSA позаботится об освобождении этого буфера.

Содержимое этого буфера определяется пакетом проверки подлинности. LSA не изменяет этот буфер; он просто возвращает значение функции LsaLogonUser .

[out] ProfileBufferLength

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

[out] LogonId

Указатель на переменную LUID , которая получает новый идентификатор входа, который однозначно идентифицирует этот сеанс входа. Пакет проверки подлинности отвечает за выделение этого LUID и создание сеанса входа LSA для этого входа.

[out] SubStatus

Указатель на NTSTATUS, который получает причину сбоев из-за ограничений учетной записи. Значения, возвращаемые в SubStatus, определяются пакетом проверки подлинности.

Ниже приведены значения SubStatus для пакетов проверки подлинности MSV1_0 и Kerberos.

Значение Значение
STATUS_INVALID_LOGON_HOURS
Учетная запись пользователя имеет ограничения по времени и не может использоваться для входа в систему в настоящее время.
STATUS_INVALID_WORKSTATION
Учетная запись пользователя имеет ограничения рабочей станции и не может использоваться для входа с текущей рабочей станции.
STATUS_PASSWORD_EXPIRED
Срок действия пароля учетной записи пользователя истек.
STATUS_ACCOUNT_DISABLED
Учетная запись пользователя в настоящее время отключена и не может использоваться для входа.
 

Дополнительные сведения о кодах NTSTATUS можно найти в файле заголовка Subauth.h, поставляемом вместе с пакетом SDK для платформы.

[out] TokenInformationType

Указатель, получающий адрес LSA_TOKEN_INFORMATION_TYPE значения, указывающего тип сведений, возвращаемых для включения в создаваемый маркер. Сведения возвращаются с помощью параметра TokenInformation .

[out] TokenInformation

Указатель, получающий адрес сведений, которые будут включены в токен. Формат и содержимое TokenInformation указываются параметром TokenInformationType . Ваш пакет проверки подлинности отвечает за выделение памяти, используемой TokenInformation; однако эта память будет освобождена LSA.

[out] AccountName

Указатель на структуру LSA_UNICODE_STRING , которая получает имя учетной записи пользователя. Имя_учетной записи всегда должно возвращаться независимо от успешного или неудачного вызова; его строка включается в запись аудита для попытки проверки подлинности. Ваш пакет проверки подлинности отвечает за выделение памяти, используемой accountName . Он будет освобожден LSA.

[out] AuthenticatingAuthority

Необязательный элемент. Указатель на структуру LSA_UNICODE_STRING , которая получает описание центра проверки подлинности для входа. Этот параметр может иметь значение NULL. Эта строка включена в запись аудита для попытки проверки подлинности. Пакет проверки подлинности отвечает за выделение памяти, используемой AuthenticatingAuthority; однако эта память будет освобождена LSA.

Пакет проверки подлинности MSV1_0 возвращает доменное имя домена, проверяющего учетную запись. Пакет проверки подлинности Kerberos возвращает имя домена NetBIOS.

[out] MachineName

Необязательный элемент. Указатель, получающий адрес структуры LSA_UNICODE_STRING , содержащей имя рабочей станции клиента. Эти сведения включаются в запись аудита для попытки проверки подлинности. Пакет проверки подлинности отвечает за выделение памяти, используемой machineName; однако эта память будет освобождена LSA.

Пакет проверки подлинности MSV1_0 возвращает netBIOS-имя рабочей станции клиента.

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

Если функция завершается успешно, она должна вернуть STATUS_SUCCESS.

В противном случае он должен вернуть код ошибки NTSTATUS, который может быть одним из следующих значений или одним из возвращаемых значений функции политики LSA.

Код возврата Описание
STATUS_NO_MEMORY
Не удалось завершить вход, так как квота памяти клиента недостаточна для выделения возвращаемого буфера.
STATUS_NO_LOGON_SERVERS
Контроллеры домена недоступны для обслуживания запроса проверки подлинности.
STATUS_LOGON_FAILURE
Неудачная попытка входа. Причина сбоя не указана; Типичные причины включают в себя имена пользователей и пароли с ошибками.
STATUS_ACCOUNT_RESTRICTION
Учетная запись пользователя и пароль являются допустимыми, но ограничения учетной записи пользователя препятствуют успешному входу в систему в настоящее время.
STATUS_BAD_VALIDATION_CLASS
Предоставленные сведения о проверке подлинности распознаются пакетом проверки подлинности.
 

Вызывающие приложения могут использовать функцию LsaNtStatusToWinError для преобразования кода NTSTATUS в код ошибки Windows.

Комментарии

Пакеты проверки подлинности должны реализовывать одну из следующих функций: LsaApLogonUser, LsaApLogonUserEx или LsaApLogonUserEx2.

LsaApLogonUserEx был добавлен для сертификации C2. C2 — это классификация безопасности, определяемая США правительством.

Требования

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

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

LSA_CLIENT_REQUEST

LSA_TOKEN_INFORMATION_TYPE

LSA_UNICODE_STRING

LsaApLogonUser

LsaApLogonUserEx2

LsaCallAuthenticationPackage