Функция 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.
[in] OriginName
Строка, определяющая источник попытки входа. Дополнительные сведения см. в подразделе "Примечания".
[in] LogonType
Значение перечисления SECURITY_LOGON_TYPE , указывающее тип запрошенного входа. Если LogonType имеет значение Interactive или Batch, создается основной маркер для представления нового пользователя. Если LogonType имеет значение Network, создается токен олицетворения.
[in] AuthenticationPackage
Идентификатор пакета проверки подлинности, используемый для проверки подлинности. Это значение можно получить, вызвав LsaLookupAuthenticationPackage.
[in] AuthenticationInformation
Указатель на входной буфер, содержащий сведения для проверки подлинности, такие как имя пользователя и пароль. Формат и содержимое этого буфера определяются пакетом проверки подлинности.
Этот параметр может быть одной из следующих структур входных буферов для пакетов проверки подлинности MSV1_0 и Kerberos.
Значение | Значение |
---|---|
|
Проверка подлинности интерактивного входа пользователя.
Элементы LogonDomainName, UserName и Password структуры MSV1_0_INTERACTIVE_LOGON должны указывать на буферы в памяти, которые являются смежными с самой структурой. Значение параметра AuthenticationInformationLength должно учитывать длину этих буферов. |
|
Проверка подлинности интерактивного входа пользователя. |
|
Проверка подлинности пользователя при первоначальном входе в сеть или отключении. |
|
Проверка подлинности пользователя при обновлении билета— разновидность обычного входа в систему разблокировки рабочей станции. |
|
Проверка подлинности пользователя с помощью интерактивного смарт-карта входа. |
|
Проверка подлинности пользователя с помощью службы для входа пользователя (S4U). |
|
Проверка подлинности пользователя для разблокировки рабочей станции, которая была заблокирована во время интерактивного сеанса интеллектуального карта входа. |
|
Проверка подлинности интеллектуального карта входа пользователя с помощью LOGON32_PROVIDER_WINNT50 или LOGON32_PROVIDER_DEFAULT. |
|
Проверка подлинности пользователя для разблокировки рабочей станции, которая была заблокирована во время сеанса интеллектуального карта входа. |
|
Проверка подлинности пользователя с помощью клиентских запросов S4U. Для ограниченного делегирования вызов LsaLogonUser не требуется, если клиент выполнил вход с помощью пакета проверки подлинности в режиме LSA. В операционных системах Windows к ним относятся Kerberos, NTLM, Secure Channel и Digest. Для успешного выполнения этого вызова должно быть выполнено следующее:
|
|
Обработка второй половины входа по протоколу NTLM 2.0. Первая половина этого типа входа выполняется путем вызова LsaCallAuthenticationPackage с сообщением MsV1_0Lm20ChallengeRequest . Дополнительные сведения см. в описании MsV1_0Lm20ChallengeRequest в MSV1_0_PROTOCOL_MESSAGE_TYPE.
Этот тип входа может использовать пакет вложенной проверки подлинности. |
|
Проверка подлинности пользователя с помощью вложенной проверки подлинности. |
Дополнительные сведения о буфере, используемом другими пакетами проверки подлинности, см. в документации по этим пакетам проверки подлинности.
[in] AuthenticationInformationLength
Длина буфера AuthenticationInformation в байтах.
[in, optional] LocalGroups
Список дополнительных идентификаторов групп для добавления в токен пользователя, прошедшего проверку подлинности. Эти идентификаторы групп будут добавлены вместе с группой по умолчанию WORLD и группой типа входа (Interactive, Batch или Network), которые автоматически включаются в каждый маркер пользователя.
[in] SourceContext
Структура TOKEN_SOURCE , которая определяет исходный модуль, например диспетчер сеансов, и контекст, который может быть полезен для этого модуля. Эти сведения включаются в маркер пользователя и могут быть получены путем вызова GetTokenInformation.
[out] ProfileBuffer
Указатель на указатель void, который получает адрес выходного буфера, содержащего сведения для проверки подлинности, такие как оболочка входа и домашний каталог.
Этот параметр может быть одной из следующих структур буфера вывода для пакетов проверки подлинности MSV1_0 и Kerberos.
Дополнительные сведения о буфере, используемом другими пакетами проверки подлинности, см. в документации по пакету проверки подлинности.
Если этот буфер больше не нужен, вызывающее приложение должно освободить его, вызвав функцию LsaFreeReturnBuffer .
[out] ProfileBufferLength
Указатель на ULONG , получающий длину возвращаемого буфера профиля в байтах.
[out] LogonId
Указатель на буфер, получающий LUID , который однозначно идентифицирует сеанс входа. Этот LUID назначается контроллером домена, который прошел проверку подлинности сведений о входе в систему.
[out] Token
Указатель на дескриптор, который получает новый маркер пользователя, созданный для этого сеанса. Завершив использование маркера, отпустите его, вызвав функцию CloseHandle .
[out] Quotas
При возвращении основного маркера этот параметр получает структуру QUOTA_LIMITS , которая содержит ограничения квоты процесса, назначенные только что вошедшим в систему начальным процессом пользователя.
[out] SubStatus
Если не удалось выполнить вход из-за ограничений учетной записи, этот параметр получает сведения о причине сбоя входа. Это значение задается только в том случае, если данные учетной записи пользователя действительны и вход отклонен.
Этот параметр может быть одним из следующих значений SubStatus для пакета проверки подлинности MSV1_0.
Возвращаемое значение
Если функция завершается успешно, функция возвращает STATUS_SUCCESS.
Если функция завершается сбоем, она возвращает код NTSTATUS , который может иметь одно из следующих значений.
Значение | Описание |
---|---|
|
Квота памяти вызывающего абонента недостаточна для выделения выходного буфера, возвращаемого пакетом проверки подлинности. |
|
Учетная запись пользователя и пароль являются допустимыми, но учетная запись пользователя имеет ограничение, которое запрещает вход в систему в настоящее время. Дополнительные сведения см. в разделе Значение, хранящееся в параметре SubStatus . |
|
Предоставленные сведения о проверке подлинности не распознаются пакетом проверки подлинности. |
|
Неудачная попытка входа. Причина сбоя не указана, но к типичным причинам относятся имена пользователей и пароли с ошибками. |
|
Контроллеры домена недоступны для обслуживания запроса проверки подлинности. |
|
Указанный пакет проверки подлинности не распознается LSA. |
|
Клиент Kerberos получил недопустимый сертификат KDC. Для входа устройства требуется строгая проверка KDC, поэтому центр сертификации должен иметь сертификаты, использующие шаблон "Проверка подлинности Kerberos" или эквивалент. Кроме того, срок действия сертификата KDC может быть просрочен, отозван, или клиент находится под активной атакой, отправляя запросы на неправильный сервер. |
|
Клиент 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 |