为什么不LogonUser(…)为域帐户工作?

我一直在尝试使用LogonUser(...)来获取用户帐户的访问令牌, 如此MSDN示例中所示 。

 // 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); 

当我运行示例(具有pipe理员权限)时,它可以正常工作,当给一个域. 和本地用户帐户的名称和密码,但无论我做什么,如果我尝试使用域帐户,我会得到错误代码1326( login失败:未知的用户名或错误的密码 )。 如果我为域input垃圾,我会得到相同的结果,这让我怀疑它是否实际上联系了DC。

有什么可以阻止这个工作?

在我的情况下,事实是,尽管我以域用户的身份登录到我的计算机,但我的计算机本身并不是域的一部分。 一旦添加到域,样本开始工作。

使用DOMAIN\LOGIN为这种情况下一个空的域名…

在我的情况下,这个问题,类似于提问者,是我试图验证的帐户是在我目前的机器不属于的域名。 不像原来的海报,我的机器不应该也不可能成为这个其他领域的一部分。 我希望登录对这个域上的资源执行操作。

答案如下

 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; 

希望这能帮助那些在相似情况下迷路的人。