LSA_AP_LOGON_USER_EX2回调函数 (ntsecpkg.h)
用于在用户初始登录时对用户登录尝试进行身份验证。 为用户建立新的登录会话,并返回用户的验证信息。
语法
LSA_AP_LOGON_USER_EX2 LsaApLogonUserEx2;
NTSTATUS LsaApLogonUserEx2(
[in] PLSA_CLIENT_REQUEST ClientRequest,
[in] SECURITY_LOGON_TYPE LogonType,
[in] PVOID ProtocolSubmitBuffer,
[in] PVOID ClientBufferBase,
[in] ULONG SubmitBufferSize,
[out] PVOID *ProfileBuffer,
[out] PULONG ProfileBufferSize,
[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,
[out] PSECPKG_PRIMARY_CRED PrimaryCredentials,
[out] PSECPKG_SUPPLEMENTAL_CRED_ARRAY *SupplementalCredentials
)
{...}
parameters
[in] ClientRequest
指向表示客户端请求 的LSA_CLIENT_REQUEST 不透明缓冲区的指针。
[in] LogonType
SECURITY_LOGON_TYPE 标识登录类型的值。
[in] ProtocolSubmitBuffer
提供特定于身份验证包的身份验证信息的缓冲区。
[in] ClientBufferBase
提供身份验证信息驻留在客户端进程中的地址的缓冲区。 这可能需要修复身份验证信息缓冲区中的任何指针。
[in] SubmitBufferSize
一个 ULONG 值,指示身份验证信息缓冲区的大小(以字节为单位)。
[out] ProfileBuffer
在客户端进程中接收配置文件缓冲区地址的指针。 身份验证包负责通过调用 AllocateClientBuffer 函数在客户端进程中分配 ProfileBuffer 。 但是,如果 LSA 随后遇到阻止成功登录的错误,则 LSA 将负责释放此缓冲区。
此缓冲区的内容由身份验证包确定。 LSA 不会更改此缓冲区;它只是将值返回到 LsaLogonUser 函数。
[out] ProfileBufferSize
指向接收 ProfileBuffer 缓冲区大小的 ULONG 的指针。
[out] LogonId
指向 LUID 变量的指针,该变量接收唯一标识此登录会话的新登录 ID。 身份验证包负责分配此 LUID 并为此登录创建 LSA 登录会话。
[out] SubStatus
指向 NTSTATUS 的指针,该 NTSTATUS 接收由于帐户限制而失败的原因。 SubStatus 中返回的值由身份验证包确定。
下表列出了 MSV1_0 和 Kerberos 身份验证包的 SubStatus 值。
值 | 含义 |
---|---|
|
用户帐户有时间限制;它目前不能用于登录。 |
|
用户帐户有工作站限制;它不能用于登录到当前工作站。 |
|
用户帐户密码已过期。 |
|
用户帐户当前已禁用,不能用于登录。 |
有关 NTSTATUS 代码的详细信息,请参阅平台 SDK 随附的 Subauth.h 头文件。
LsaNtStatusToWinError 函数将 NTSTATUS 代码转换为 Windows 错误代码。
[out] TokenInformationType
一个指针,用于接收 LSA_TOKEN_INFORMATION_TYPE 值的地址,该值指示要包含在要创建的令牌中返回的信息的类型。 此信息通过 TokenInformation 参数返回。
[out] TokenInformation
接收要包含在令牌中的信息的地址的指针。 TokenInformation 的格式和内容由 TokenInformationType 参数指示。 身份验证包负责分配 TokenInformation 使用的内存;但是,此内存将由 LSA 释放。
[out] AccountName
指向接收用户帐户名称 的LSA_UNICODE_STRING 结构的指针。 无论调用是成功还是失败,都必须始终返回 AccountName;其字符串包含在身份验证尝试的审核记录中。 身份验证包负责分配 AccountName 使用的内存;但是,此内存将由 LSA 释放。
[out] AuthenticatingAuthority
可选。 指向 LSA_UNICODE_STRING 结构的指针,该结构接收登录的身份验证机构的说明。 此参数可以为 NULL。 此字符串包含在身份验证尝试的审核记录中。 身份验证包负责分配 AuthenticatingAuthority 使用的内存;但是,此内存将由 LSA 释放。
MSV1_0身份验证包返回验证帐户的域的域名。 Kerberos 身份验证包返回 NetBIOS 域名。
[out] MachineName
可选。 接收包含客户端计算机名称 的UNICODE_STRING 结构的地址的指针。 可以选择省略此字符串。 此字符串包含在此身份验证尝试的审核记录中。 身份验证包负责分配 MachineName 使用的内存;但是,此内存将由 LSA 释放。
MSV1_0身份验证包返回客户端工作站的 NetBIOS 名称。
[out] PrimaryCredentials
指向 SECPKG_PRIMARY_CRED 结构的指针,该结构返回用于将主要凭据传递给其他包。
[out] SupplementalCredentials
指向SECPKG_SUPPLEMENTAL_CRED_ARRAY其他包的补充 凭据数组的 指针。
返回值
如果该函数成功,它应返回STATUS_SUCCESS。
否则,它应返回 NTSTATUS 错误代码,可以是以下值之一或 LSA 策略函数返回值之一。
返回代码 | 说明 |
---|---|
|
无法完成登录,因为客户端的内存配额不足以分配返回缓冲区。 |
|
没有域控制器可用于为身份验证请求提供服务。 |
|
登录尝试失败。 未指定失败的原因;典型原因包括用户名和密码拼写错误。 |
|
用户帐户和密码是合法的,但用户帐户限制阻止此时成功登录。 有关其他信息,请参阅 SubStatus 参数。 |
|
身份验证包无法识别提供的身份验证信息。 |
|
LogonType 无效。 |
|
(LogonId 参数中为此登录会话选择的登录 ID) 已经存在。 |
|
SAM 数据库或 Netlogon 服务是必需的,但不可用。 |
|
客户端的虚拟内存或页面文件配额不足以分配返回缓冲区。 |
调用应用程序可以使用 LsaNtStatusToWinError 函数将 NTSTATUS 代码转换为 Windows 错误代码。
注解
身份验证包必须实现以下函数之一: LsaApLogonUser、 LsaApLogonUserEx 或 LsaApLogonUserEx2。
要求
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | ntsecpkg.h |