LogonUser 返回 ERROR_NO_LOGON_SERVERS

Posted

技术标签:

【中文标题】LogonUser 返回 ERROR_NO_LOGON_SERVERS【英文标题】:LogonUser returns ERROR_NO_LOGON_SERVERS 【发布时间】:2015-03-09 07:38:43 【问题描述】:

我有一个应用程序需要检查用户的 Windows 会话密码。

为此,我正在使用 Windows API 中的 LogonUser 函数。用户可以连接到域。

result = LogonUserW(wUsername, wDomain, wPassword, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, pH);

当用户连接到域时,该函数运行良好,但是当用户关闭wifi,或拔掉局域网电缆使其离线时,该函数总是返回错误代码1311,即意思是“目前没有可用于服务登录请求的登录服务器”。

LogonUser 函数的第四个参数是要执行的登录操作的类型。 The documentation 表示如果此参数的值为“LOGON32_LOGON_INTERACTIVE”,则登录类型具有缓存断开操作的登录信息的额外费用,所以在用户在现场的情况下不应该这样做吗?

提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

我最终使用了安全支持提供程序接口 (SSPI),如本页所述作为 LogonUser API 的替代方案:How to validate user credentials on Microsoft operating systems

使用代码 sn-p 中提供的 SSPLogonUser 函数,我可以在连接到域时检查用户凭据,但也可以在无法访问域控制器时检查用户凭据(在这种情况下,LogonUser 失败) API)。

【讨论】:

以上是关于LogonUser 返回 ERROR_NO_LOGON_SERVERS的主要内容,如果未能解决你的问题,请参考以下文章

LogonUser 和其他人在 Windows Server 2003 x86 中返回错误 1337

如果登录失败,关闭 LogonUser 句柄?

LogonUser 函数在 c# 中失败,错误代码为 0

无密码的 CreateProcessAsUser 和 LogonUser

模拟用户时如何将 SecureZeroMemory 与 LogonUser 一起使用?

当用户名是 UPN 格式时,即使密码正确,Azure AD 用户的 LogonUser() 也会失败