Msv1_0SubAuthenticationRoutine 函数 (subauth.h)

Msv1_0SubAuthenticationRoutine 函数执行特定于客户端/服务器的身份验证。

安全帐户管理器 (SAM) 数据库中的安全主体凭据和信息将传递给此函数进行身份验证。

此函数由自定义子身份验证包 DLL 实现,用于MSV1_0身份验证包。

仅针对非交互式身份验证调用 Msv1_0SubAuthenticationRoutine 函数,仅在帐户所在的身份验证服务器上调用,并且仅当在注册表中的正确密钥下注册了子身份验证 DLL 时。

注意 Kerberos 身份验证包不调用此例程。
 

语法

NTSTATUS Msv1_0SubAuthenticationRoutine(
  [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

可选。 包含描述登录情况的标志。 此参数的取值可为下列值之一:

含义
MSV1_0_PASSTHRU
直通身份验证。 用户未连接到此计算机。
MSV1_0_GUEST_LOGON
这是使用 GUEST 用户帐户进行登录的重试。

[in] UserAll

指向 USER_ALL_INFORMATION 结构的指针,该结构包含从 SAM 数据库返回的用户说明。

[out] WhichFields

返回需要写回到 SAM 数据库的 USER_ALL_INFORMATION 结构的成员。 仅当 Msv1_0SubAuthenticationRoutine 向调用方返回成功时,才会写入这些成员。 只有以下值有效。

含义
USER_ALL_PARAMETERS
UserAll 结构的 Parameters 成员中包含的数据写回到 SAM 数据库。

如果 Parameters 成员UNICODE_STRING缓冲区的大小发生更改, Msv1_0SubAuthenticationRoutine 必须使用 MIDL_user_free 函数删除缓冲区,并使用 MIDL_user_allocate 函数重新分配该 缓冲区

[out] UserFlags

LsaLogonUser 函数的 ProfileBuffer 参数包含 MSV1_0_LM20_LOGON_PROFILE 结构时,要返回 的值 。 当前为 结构的 UserFlags 成员定义了以下值。

含义
LOGON_GUEST
这是来宾登录。
LOGON_NOENCRYPTION
调用方未指定加密凭据。
 
注意 按照约定,子身份验证包仅返回 UserFlags 的高阶字节中的位;但是,不强制执行此约定。
 

[out] Authoritative

指向布尔值的指针,该值指示返回的状态是否为应返回给原始调用方的权威状态。 如果返回的值为 FALSE,则可以在另一个域控制器上再次尝试登录请求。 无论函数调用的返回值如何,此参数都应返回有效信息。

[out] LogoffTime

指向一个值的指针,该值接收用户应注销系统的时间。 此时间用于控制登录生存期,并指定为相对于 GMT 的系统时间。

[out] KickoffTime

指向值的指针,该值接收用户应从系统注销的时间。 此时间用于控制登录生存期,并指定为相对于 GMT 的系统时间。 如果用户不注销,请指定较大的正值,例如:

KickoffTime->HighPart = 0x7FFFFFFF;
KickoffTime->LowPart = 0xFFFFFFFF;

返回值

此函数必须返回以下值之一。

返回代码 说明
STATUS_SUCCESS
没有错误。
STATUS_ACCOUNT_DISABLED
帐户已禁用。
STATUS_ACCOUNT_EXPIRED
帐户已过期。
STATUS_ACCOUNT_LOCKED_OUT
帐户已锁定。
STATUS_INVALID_INFO_CLASS
LogonLevel 无效。
STATUS_INVALID_LOGON_HOURS
用户目前无权登录。
STATUS_INVALID_WORKSTATION
用户无权登录到指定的工作站。
STATUS_NO_SUCH_USER
指定的用户没有帐户。
STATUS_PASSWORD_EXPIRED
密码已过期。
STATUS_PASSWORD_MUST_CHANGE
帐户标记为指示必须在下次登录时更改密码。
STATUS_WRONG_PASSWORD
密码无效。

注解

如果 AuthenticationInformation 参数的一部分指示要完成子身份验证,并且导出Msv1_0SubAuthenticationRoutine函数的子身份验证 DLL 已在工作站上正确注册,则MSV1_0身份验证包将调用 函数。

MSV1_0 身份验证包不支持交互式登录的子身份验证,这需要 MSV1_0_INTERACTIVE_LOGON 结构。 需要 MSV1_0_LM20_LOGON 结构的网络登录可以使用子身份验证。

Msv1_0SubAuthenticationRoutine函数是在找到正确的域控制器后调用的,并且已从 SAM 数据库中检索到有关要进行身份验证的安全主体的所有信息。 使用子身份验证时,身份验证由子身份验证 DLL 负责,必须由该 DLL 导出 的Msv1_0SubAuthenticationRoutine 函数完成。

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
目标平台 Windows
标头 subauth.h