加载用户配置文件后创建进程为用户

时间:2010-07-27 08:02:21

标签: winapi process profile

我有以系统身份运行的服务,我想在某些用户TS会话中以用户权限生成新进程。

我正在调用LogonUser,LoadUserProfile,CreateEnvironmentBlock,CreateProcessAsUser并在用户TS会话中执行该过程。

进程(cmd.exe)在用户TS会话中运行,但是当我尝试运行GUI应用程序时,我收到以下错误消息:

模块ntdll.dll中的EAccessViolation异常为00022272。

模块'ntdll.dll'中地址为77D22272的访问冲突。写地址0000000C。

我错过了什么吗?

非常感谢任何帮助!

谢谢, Lior

1 个答案:

答案 0 :(得分:0)

看看Launching a process in user’s session from a service。主要问题是你应该在其他TS会话上开始处理。因此,您必须根据SetTokenInformationTokenSessionId切换当前会话。为此,您必须启用SE_TCB_NAME权限。

此外,您必须更改OpenWindowStationOpenDesktopSetUserObjectSecurity的桌面和Windows Station对象的安全描述符(请参阅http://msdn.microsoft.com/en-us/library/ms681928.aspxhttp://msdn.microsoft.com/en-us/library/ms687107.aspxhttp://support.microsoft.com/kb/165194