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

Функция LsaLogonUser проверяет подлинность данных для входа субъекта безопасности с помощью сохраненных учетных данных.

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

При получении нового билета на предоставление билета (TGT) с использованием новых учетных данных сертификата очищаются все системные TGT и служебные билеты. Все запросы на обслуживание пользователей, имеющие составную идентификацию, также очищаются.

Синтаксис

NTSTATUS LsaLogonUser(
  [in]           HANDLE              LsaHandle,
  [in]           PLSA_STRING         OriginName,
  [in]           SECURITY_LOGON_TYPE LogonType,
  [in]           ULONG               AuthenticationPackage,
  [in]           PVOID               AuthenticationInformation,
  [in]           ULONG               AuthenticationInformationLength,
  [in, optional] PTOKEN_GROUPS       LocalGroups,
  [in]           PTOKEN_SOURCE       SourceContext,
  [out]          PVOID               *ProfileBuffer,
  [out]          PULONG              ProfileBufferLength,
  [out]          PLUID               LogonId,
  [out]          PHANDLE             Token,
  [out]          PQUOTA_LIMITS       Quotas,
  [out]          PNTSTATUS           SubStatus
);

Параметры

[in] LsaHandle

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

Вызывающий объект должен иметь SeTcbPrivilege только в том случае, если выполняется одно или несколько из следующих значений:

  • Используется пакет вложенной проверки подлинности.
  • KERB_S4U_LOGON используется, и вызывающий объект запрашивает маркер олицетворения.
  • Параметр LocalGroups не имеет значения NULL.
Если seTcbPrivilege не требуется, вызовите LsaConnectUntrusted , чтобы получить дескриптор.

[in] OriginName

Строка, определяющая источник попытки входа. Дополнительные сведения см. в подразделе "Примечания".

[in] LogonType

Значение перечисления SECURITY_LOGON_TYPE , указывающее тип запрошенного входа. Если LogonType имеет значение Interactive или Batch, создается основной маркер для представления нового пользователя. Если LogonType имеет значение Network, создается токен олицетворения.

[in] AuthenticationPackage

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

[in] AuthenticationInformation

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

Этот параметр может быть одной из следующих структур входных буферов для пакетов проверки подлинности MSV1_0 и Kerberos.

Значение Значение
MSV1_0_INTERACTIVE_LOGON
MSV1_0
Проверка подлинности интерактивного входа пользователя.

Элементы LogonDomainName, UserName и Password структуры MSV1_0_INTERACTIVE_LOGON должны указывать на буферы в памяти, которые являются смежными с самой структурой. Значение параметра AuthenticationInformationLength должно учитывать длину этих буферов.

KERB_INTERACTIVE_LOGON
Kerberos
Проверка подлинности интерактивного входа пользователя.
KERB_TICKET_LOGON
Kerberos
Проверка подлинности пользователя при первоначальном входе в сеть или отключении.
KERB_TICKET_UNLOCK_LOGON
Kerberos
Проверка подлинности пользователя при обновлении билета— разновидность обычного входа в систему разблокировки рабочей станции.
KERB_CERTIFICATE_LOGON
Kerberos
Проверка подлинности пользователя с помощью интерактивного смарт-карта входа.
KERB_CERTIFICATE_S4U_LOGON
Kerberos
Проверка подлинности пользователя с помощью службы для входа пользователя (S4U).
KERB_CERTIFICATE_UNLOCK_LOGON
Kerberos
Проверка подлинности пользователя для разблокировки рабочей станции, которая была заблокирована во время интерактивного сеанса интеллектуального карта входа.
KERB_SMARTCARD_LOGON
Kerberos
Проверка подлинности интеллектуального карта входа пользователя с помощью LOGON32_PROVIDER_WINNT50 или LOGON32_PROVIDER_DEFAULT.
KERB_SMARTCARD_UNLOCK_LOGON
Kerberos
Проверка подлинности пользователя для разблокировки рабочей станции, которая была заблокирована во время сеанса интеллектуального карта входа.
KERB_S4U_LOGON
Kerberos
Проверка подлинности пользователя с помощью клиентских запросов S4U. Для ограниченного делегирования вызов LsaLogonUser не требуется, если клиент выполнил вход с помощью пакета проверки подлинности в режиме LSA. В операционных системах Windows к ним относятся Kerberos, NTLM, Secure Channel и Digest. Для успешного выполнения этого вызова должно быть выполнено следующее:
  • Вызывающий объект должен быть учетной записью домена (в том числе LOCAL_SYSTEM, если компьютер является членом домена).
  • При использовании учетной записи службы для получения токена олицетворения в учетной записи должен быть задан параметр SeTcbPrivilege на локальном компьютере. В противном случае используется маркер удостоверения.
  • Вызывающий объект должен быть участником доступа, совместимого до Windows 2000 , или иметь доступ на чтение для членства клиента в группах. Членство в группе Windows Authorization Access гарантирует доступ на чтение для членства клиента в группе. Сведения о настройке группы доступа авторизации Windows см. в базе знаний Майкрософт.
Элементы ClientUpn и ClientRealm структуры KERB_S4U_LOGON должны указывать на буферы в памяти, которые являются смежными с самой структурой. Значение параметра AuthenticationInformationLength должно учитывать длину этих буферов.
MSV1_0_LM20_LOGON
MSV1_0
Обработка второй половины входа по протоколу NTLM 2.0. Первая половина этого типа входа выполняется путем вызова LsaCallAuthenticationPackage с сообщением MsV1_0Lm20ChallengeRequest . Дополнительные сведения см. в описании MsV1_0Lm20ChallengeRequest в MSV1_0_PROTOCOL_MESSAGE_TYPE.

Этот тип входа может использовать пакет вложенной проверки подлинности.

MSV1_0_SUBAUTH_LOGON
MSV1_0
Проверка подлинности пользователя с помощью вложенной проверки подлинности.
 

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

[in] AuthenticationInformationLength

Длина буфера AuthenticationInformation в байтах.

[in, optional] LocalGroups

Список дополнительных идентификаторов групп для добавления в токен пользователя, прошедшего проверку подлинности. Эти идентификаторы групп будут добавлены вместе с группой по умолчанию WORLD и группой типа входа (Interactive, Batch или Network), которые автоматически включаются в каждый маркер пользователя.

[in] SourceContext

Структура TOKEN_SOURCE , которая определяет исходный модуль, например диспетчер сеансов, и контекст, который может быть полезен для этого модуля. Эти сведения включаются в маркер пользователя и могут быть получены путем вызова GetTokenInformation.

[out] ProfileBuffer

Указатель на указатель void, который получает адрес выходного буфера, содержащего сведения для проверки подлинности, такие как оболочка входа и домашний каталог.

Этот параметр может быть одной из следующих структур буфера вывода для пакетов проверки подлинности MSV1_0 и Kerberos.

Значение Значение
MSV1_0_INTERACTIVE_PROFILE
MSV1_0
Интерактивный профиль входа пользователя.
KERB_TICKET_PROFILE
Kerberos
Выходные данные проверки подлинности входа, отключения и обновления билета.
MSV1_0_LM20_LOGON
MSV1_0
Выходные данные при обработке второй половины входа по протоколу NTLM 2.0.
MSV1_0_LM20_LOGON_PROFILE
MSV1_0
Выходные данные при использовании проверки подлинности с вложенной проверкой подлинности.
 

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

Если этот буфер больше не нужен, вызывающее приложение должно освободить его, вызвав функцию LsaFreeReturnBuffer .

[out] ProfileBufferLength

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

[out] LogonId

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

[out] Token

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

[out] Quotas

При возвращении основного маркера этот параметр получает структуру QUOTA_LIMITS , которая содержит ограничения квоты процесса, назначенные только что вошедшим в систему начальным процессом пользователя.

[out] SubStatus

Если не удалось выполнить вход из-за ограничений учетной записи, этот параметр получает сведения о причине сбоя входа. Это значение задается только в том случае, если данные учетной записи пользователя действительны и вход отклонен.

Этот параметр может быть одним из следующих значений SubStatus для пакета проверки подлинности MSV1_0.

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

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

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

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

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

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

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

Комментарии

Параметр OriginName должен указывать значимые сведения. Например, он может содержать "TTY1" для обозначения терминала один или "NTLM - удаленный узел JAZZ", чтобы указать сетевой вход, использующий NTLM через удаленный узел с именем "JAZZ".

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

Требования

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

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

Разрешение анонимного доступа

LsaCallAuthenticationPackage

LsaFreeReturnBuffer

LsaLookupAuthenticationPackage