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

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

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

Если LsaApLogonUser выполняется успешно, создается сеанс входа. Он также возвращает сведения, используемые для создания маркера, представляющего только что вошедшего в систему пользователя.

Синтаксис

LSA_AP_LOGON_USER LsaApLogonUser;

NTSTATUS LsaApLogonUser(
  [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] PLSA_UNICODE_STRING *AccountName,
  [out] PLSA_UNICODE_STRING *AuthenticatingAuthority
)
{...}

Параметры

[in] ClientRequest

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

[in] LogonType

Значение SECURITY_LOGON_TYPE , определяющее тип запрошенного входа.

[in] AuthenticationInformation

Предоставляет сведения о проверке подлинности, относящиеся к пакету проверки подлинности. LSA освободит этот буфер. Это тот же входной буфер, который передается в LsaLogonUser.

[in] ClientAuthenticationBase

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

[in] AuthenticationInformationLength

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

[out] ProfileBuffer

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

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

[out] ProfileBufferLength

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

[out] LogonId

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

[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 для платформы.

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

[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.

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

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

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

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

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

Комментарии

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

Требования

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

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

LSA_CLIENT_REQUEST

LSA_TOKEN_INFORMATION_TYPE

LSA_UNICODE_STRING

LsaApLogonUserEx

LsaApLogonUserEx2

LsaCallAuthenticationPackage