我有以系统身份运行的服务,我想在某些用户TS会话中以用户权限生成新进程。
我正在调用LogonUser,LoadUserProfile,CreateEnvironmentBlock,CreateProcessAsUser并在用户TS会话中执行该过程。
进程(cmd.exe)在用户TS会话中运行,但是当我尝试运行GUI应用程序时,我收到以下错误消息:
模块ntdll.dll中的EAccessViolation异常为00022272。
模块'ntdll.dll'中地址为77D22272的访问冲突。写地址0000000C。
我错过了什么吗?
非常感谢任何帮助!
谢谢, Lior
答案 0 :(得分:0)
看看Launching a process in user’s session from a service。主要问题是你应该在其他TS会话上开始处理。因此,您必须根据SetTokenInformation
和TokenSessionId
切换当前会话。为此,您必须启用SE_TCB_NAME
权限。
此外,您必须更改OpenWindowStation
,OpenDesktop
和SetUserObjectSecurity
的桌面和Windows Station对象的安全描述符(请参阅http://msdn.microsoft.com/en-us/library/ms681928.aspx,http://msdn.microsoft.com/en-us/library/ms687107.aspx和http://support.microsoft.com/kb/165194)