我想知道是否存在用于服务于用户会话创建过程的简单方法?

我的服务正在运行作为一个用户(管理员)的帐户,而不是作为一个本地系统acount,因此我不能使用WTSQueryUserToken功能。

我试图调用

OpenProcessToken(GetCurrentProcess,TOKEN_ALL_ACCESS,TokenHandle);

但是当我使用该令牌来运行

 CreateProcessAsUser(TokenHandle,.....)

我的进程仍然在会话0运行。 我怎样才能解决这个问题呢?

我使用OLE自动化,所以我真的不关心哪个会话的进程将在运行,只要它不是会话0 - 因为某些原因,奥莱不会创建进程(WINWORD .EXE例如)在会话0,而是在其他用户会话创建它们。

任何建议将受到欢迎。 由于事先。

有帮助吗?

解决方案

我已经能够解决这个问题我自己,感谢所有那些谁看这个问题的。

好了,正如我上面提到 - 令牌属于哪个是在会话0运行的进程...

所以我做了什么......是寻找未在会话0中运行的进程的令牌。 当你把它的进程ID为OpenProcessToken参数。 比CreateProcessAsUser将创建在同一会话中的处理(也可能具有相同的cridentals作为已选择的过程);

但问题是,我不能得到大多数使用功能过程的任何细节:QueryFullProcessImageName - 因为它有一个错误,它并不对从包含空格的路径中创建proccesses工作(如C:\ Program Files文件为例) 并与该功能我想另一个问题是,由于我使用的是用户cridentals运行原始过程中,我不能访问使用本地系统帐户运行的进程的信息。这是非常糟糕的,因为我想借此WINLOGON.EXE为我的过程(因为它表明一个新打开的会话)。

也是为了在招succeeed,你必须发挥一点点与系统的安全性,为了让这个进程要求提高安全性: 我选择得到提升的是: SeDebugPrivilege - 寻找对正在运行的进程信息 SeAssignPrimaryTokenPrivilege - 为了运行,其中i从用户会话处理中提取的令牌的新进程(即explorer.exe的) SeCreateTokenPrivilege - 我不如果需要的话知道,但我还是做了,因为它听起来相关

。 你必须添加在运行 - >输入gpedit.msc或运行 - > secpol.msc运行过程中的相关用户在所有这些特权(本地计算机策略\用户 -

为了提升在此权限才能成功计算机配置\ Windows设置\安全设置\ LocalPolicies \用户权限分配)

您的帐户添加到以下权利(compaitable与上面的Previleges):点击 创建令牌对象点击 调试程序点击 替换进程级别令牌结果

和那就是它! :) 它一直致力于伟大的! 顺便说一句,你可能需要禁用所有的UAC的东西...我不知道这是否是相关或不相关,但它使工作与2008年减少痛苦 - 没有更多的烦人的弹出窗口。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top