模拟和CreateProcess

3
该文档指出CreateProcess创建一个在调用进程的安全上下文中运行的进程,而不是当前模拟令牌的安全上下文。这是否意味着无论是否模拟,新进程的权限都将相同?
我有以下代码,它会因为ACCESS_DENIED错误而失败: 1. 进程A在管理员下运行; 2. 进程A冒充普通用户“test”; 3. 进程A通过调用CreateProcess启动了一个新进程B; 4. 进程B调用OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, ..); 第4步失败并显示ACCESS_DENIED错误(5)。 我检查了进程B正在像进程A一样以管理员身份运行。为什么在运行在与进程A相同的用户上下文中时会失败?

1
我猜你真正需要使用CreateProcessAsUser()。 - Hans Passant
@Hans,听起来Ranta想让新进程使用调用进程的令牌,而不是模拟令牌。 - David Heffernan
1
如果您直接启动B进程会发生什么? - Harry Johnston
1个回答

2

正如一位评论者所说,您需要使用CreateProcessAsUser。您可能会发现MSDN上的以下示例代码有所帮助,我在几年前成功地使用了它:http://support.microsoft.com/kb/165194


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接