Msv1_0SubAuthenticationFilter 函数 (subauth.h)
Msv1_0SubAuthenticationFilter 函数执行特定于域控制器的用户登录身份验证。
函数接收用户的登录数据和在域控制器 的安全帐户管理器 (SAM) 数据库中为用户找到的所有信息。
此函数由自定义子身份验证包 DLL 实现,用于 Kerberos 和MSV1_0身份验证包。
语法
NTSTATUS Msv1_0SubAuthenticationFilter(
[in] NETLOGON_LOGON_INFO_CLASS LogonLevel,
[in] PVOID LogonInformation,
[in] ULONG Flags,
[in] PUSER_ALL_INFORMATION UserAll,
[out] PULONG WhichFields,
[out] PULONG UserFlags,
[out] PBOOLEAN Authoritative,
[out] PLARGE_INTEGER LogoffTime,
[out] PLARGE_INTEGER KickoffTime
);
参数
[in] LogonLevel
指定 LogonInformation 中给定的信息级别。 此参数通常设置为 NetlogonInteractiveInformation。
[in] LogonInformation
指向 NETLOGON_LOGON_IDENTITY_INFO 结构的指针。 此结构的成员包含有关登录用户的信息。 LogonDomainName 成员将被忽略。
[in] Flags
可选。 包含描述登录情况的标志。 此参数的取值可为下列值之一:
值 | 含义 |
---|---|
|
直通身份验证。 用户未连接到此计算机。 |
|
这是使用来宾帐户进行登录的重试。 |
[in] UserAll
指向 USER_ALL_INFORMATION 结构的指针,该结构包含从 SAM 数据库返回的用户说明。
[out] WhichFields
返回需要写回到 SAM 数据库的 USER_ALL_INFORMATION 结构的成员。 仅当 Msv1_0SubAuthenticationFilter 返回成功时,才会写入这些成员。 只有以下值有效。
值 | 含义 |
---|---|
|
将 UserAll 结构的 Parameters 成员中包含的数据写回到 SAM 数据库。
如果 Parameters 成员 UNICODE_STRING 缓冲区的大小发生更改, Msv1_0SubAuthenticationFilter 必须使用 MIDL_user_free 函数删除缓冲区,并使用 MIDL_user_allocate 函数重新分配该 缓冲区 。 |
[out] UserFlags
要从该函数的 ProfileBuffer 参数中的 LsaLogonUser 函数返回的值。 此参数的取值可为下列值之一:
值 | 含义 |
---|---|
|
这是来宾登录。 |
|
调用方未指定加密凭据。 |
[out] Authoritative
指向布尔值的指针,该值指示返回的状态是否为应返回给原始调用方的权威状态。 如果返回的值为 FALSE,则可以在另一个域控制器上再次尝试登录请求。 无论函数调用的返回值如何,此参数都应返回有效信息。 此参数不与 Kerberos 身份验证包一起使用。
[out] LogoffTime
指向一个值的指针,该值接收用户应注销系统的时间。 此时间用于控制登录生存期,并指定为相对于 GMT 的 Windows 系统时间。
[out] KickoffTime
指向值的指针,该值接收用户应从系统注销的时间。 此时间用于控制登录生存期,并指定为相对于 GMT 的系统时间。 如果用户不自动注销,请指定较大的正值,如下所示:
KickoffTime->HighPart = 0x7FFFFFFF;
KickoffTime->LowPart = 0xFFFFFFFF;
返回值
此函数必须返回以下值之一。
返回代码 | 说明 |
---|---|
|
没有错误。 |
|
帐户已禁用。 |
|
帐户已过期。 |
|
帐户已锁定。 |
|
LogonLevel 无效。 |
|
用户目前无权登录。 |
|
用户无权登录到指定的工作站。 |
|
指定的用户没有帐户。 |
|
密码已过期。 |
|
密码必须在下次登录时更改。 |
|
密码无效。 |
将 Msv1_0SubAuthenticationFilter 函数与 Kerberos 身份验证包一起使用时,如果函数调用返回STATUS_SUCCESS并且两个参数之一 LogoffTime 或 KickoffTime 具有非零值,则此值将用作票证生存期。 另一方面,如果两个参数的值为非零值,则使用这两个值中的较小值。
如果用于票证生存期的值 (LogoffTime 和 KickoffTime) 的最快时间大于默认票证生存期,则该值将用作票证的最长续订时间。 相反,如果两个值中的较大值 (LogoffTime 和 KickoffTime) 的后期小于默认票证生存期,则此值将用作票证生存期。 有关详细信息,请参阅 Microsoft Kerberos。
与 Kerberos 身份验证包一起使用时,如果此函数返回错误, 密钥分发中心 (KDC) 将返回 Kerberos 错误KDC_ERR_POLICY,状态值作为扩展错误代码。
注解
此函数的实现不应执行导致 轻型目录访问协议 (LDAP) 流量的任何操作。 例如,不要连接到 Active Directory 数据库并对其进行查询。
MSV1_0或 Kerberos 身份验证包验证登录后, Msv1_0SubAuthenticationFilter 函数可以执行其他验证,以确定用户是否可以登录到网络帐户。 如果在域控制器的注册表中将子身份验证包 DLL 正确注册为“Auth0”,则调用此函数。 注册表路径会有所不同,具体取决于函数是位于 MSV1_0 还是 Kerberos 子身份验证包 DLL 中。
此筛选器例程可能会返回STATUS_SUCCESS(指示应继续登录)或失败代码(指示其他验证失败)。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows XP [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2003 [仅限桌面应用] |
目标平台 | Windows |
标头 | subauth.h |