当计算机不在域上时,LogonUser()不对无效域的用户进行身份验证

时间:2014-01-30 08:39:43

标签: c++ winapi testing login

我在使用C ++中的LogonUser()API函数时遇到了一些问题。我正在测试它的计算机不在域上。我正在测试的帐户存在于计算机上,但是当我提供无效域时,它会对登录进行身份验证。

这对我来说似乎不对。

HANDLE token;

if (!LogonUser("LocalUser", "InvalidDomain", "Password",
                LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, &token))
{
    unsigned long error = GetLastError();
}

这是正确的行为吗?

2 个答案:

答案 0 :(得分:6)

我认为工作组成员不支持域登录,因此会忽略domain参数。这解释了你所看到的。

您可以确认这一点。尝试使用真实域用户进行身份验证(确保没有具有相同名称的本地帐户)。登录失败。

有一个例外。如果使用LOGON32_LOGON_NEW_CREDENTIALS标志(修改现有登录而不是创建新登录),则域登录将始终成功,因为在您尝试访问远程资源之前,它不会进行身份验证。

答案 1 :(得分:1)

根据此网站,您应该使用“。” (或“”,但未记录)作为域仅使用本地数据库。 我相信“”的无证行为解释了您的登录信息。如果它无法识别域中的用户,它将尝试在本地识别它。

我的答案基于此页:http://msdn.microsoft.com/en-us/library/windows/desktop/aa378184(v=vs.85).aspx