为什么LogonUser(...)不适用于域帐户?

时间:2011-09-20 16:53:17

标签: windows security winapi active-directory impersonation

我一直在尝试使用LogonUser(...)来获取用户帐户的访问令牌,例如this MSDN sample

// Call LogonUser to obtain a handle to an access token.
bool returnValue = LogonUser(userName, domainName, Console.ReadLine(),
    LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
    out safeTokenHandle);

当我运行示例(具有管理员权限)时,在给定.域和本地用户帐户名和密码时它可以正常工作,但无论我做什么,我都会收到错误代码1326(如果我尝试使用域帐户,则登录失败:未知用户名或密码错误)。如果我为域输入垃圾,我会得到相同的结果,这让我想知道它是否真的与DC联系。

什么可以阻止这种工作?

3 个答案:

答案 0 :(得分:1)

在我的情况下,事实是,虽然我作为域用户登录到我的计算机,但我的计算机本身并不是域的一部分。一旦添加到域中,样本就开始起作用了。

答案 1 :(得分:1)

就我而言,与问题提问者类似的问题是,我尝试进行身份验证的帐户位于我当前计算机不属于的域中。与原始海报不同,我的机器不应该也不能成为其他域名的一部分。我希望登录对该域上的资源执行操作。

答案是以下

bool success = LogonUser(
                userName,
                domain,
                password,
                (int)LOGON32_LOGON_NEW_CREDENTIALS, //9
                (int)LOGON32_PROVIDER_DEFAULT, //0
                out userToken);

定义了以下常量:

public const int LOGON32_LOGON_NEW_CREDENTIALS = 9;
public const int LOGON32_PROVIDER_DEFAULT = 0;

希望这可以帮助在类似情况下迷失的其他人。

答案 2 :(得分:0)

对于这种情况,请将DOMAIN\LOGIN与空域名一起使用...