从模拟令牌的网络登录

问题描述:

在模拟客户端的服务中(使用ImpersonateNamedPipeClient),我尝试调用CreateProcessAsUser。 可执行文件名是位于第三台计算机上的UNC路径(既不是服务器也不是连接到管道的客户端)。从模拟令牌的网络登录

调用失败,错误代码为5(ACCES DENIED)。我试图使用WNetAddConnection2在服务器调用ImpersonateNamedPipeClient之前从客户端(在将被模拟的令牌的上下文中)对客户端进行身份验证,但我仍然得到相同的错误。

我该如何验证模拟账户(假设服务器只有模拟令牌)才能访问可执行文件?

我的Win32相当生锈,所以这可能是在黑暗中拍摄的,但是您是否尝试过使用CreateProcessAsUser函数而不是CreateProcess?根据MSDN Documentation,它将在受限令牌上运行。如果我没有记错,模仿标记就足够了。

希望有所帮助。

+0

我在我的问题中犯了一个错误,当然我使用CreateProcessAsUser。关键是该令牌是从ImpersonateNamedPipeClient获取无法访问网络。 (我编辑了我的问题) – 2009-08-28 17:31:07

+0

正在模拟的用户需要网络访问权限,并且需要在第三台机器上拥有权限。你的情况是否属实? – 2009-09-02 00:34:41

CreateProcessAsUser()需要一个主令牌,而不是一个模拟的令牌。您可以使用DuplicateTokenEx()从模拟的令牌获取主令牌。 CreateProcessAsUser()的文档甚至可以这么说。

+0

感谢您的帮助。我已经使用DuplicateTokenEx。我刚刚将模拟级别从SecurityImpersonation更改为SecurityDelegation,但如果可执行文件是远程的,我仍然会得到相同的错误。 – 2009-09-02 12:55:17