如何让Windows 2008 服务程序启动另一个进程windows media player

时间:2022-08-29 14:55:00
我想让在windows2008上的一个服务程序,启动一个子进程(windows media player), 但是失败了。 
试过msdn上的例子, CreateProcessAsUser 和CreateProcessWithLogonW 。 
  
 谁做过类似的吗? 

12 个解决方案

#1


CreateProcessAsUser 绝对没有问题,楼主开启用户进程的时候,传入的token对不对?我看csdn上有个大牛贴过代码,是先获取了 explorer.exe的token,把他作为CreateProcessAsUser 的参数,我试过,楼主肯定参数没搞好

#2


CreateProcessAsUser 绝对没有问题,楼主开启用户进程的时候,传入的token对不对?我看csdn上有个大牛贴过代码,是先获取了 explorer.exe的token,把他作为CreateProcessAsUser 的参数,我试过,楼主肯定参数没搞好

#3


我不是用这种方法,而是用msdn 上的一个例子。
获取explorer.exe的token,要求已经有用户登陆了。 但是如果系统系统了,还没有用户登陆的话,这时候只有session0。所以这时候显然行不通。


引用 1 楼 hfz8867879 的回复:
CreateProcessAsUser 绝对没有问题,楼主开启用户进程的时候,传入的token对不对?我看csdn上有个大牛贴过代码,是先获取了 explorer.exe的token,把他作为CreateProcessAsUser 的参数,我试过,楼主肯定参数没搞好

#4


引用 3 楼 alan_tan 的回复:
我不是用这种方法,而是用msdn 上的一个例子。
获取explorer.exe的token,要求已经有用户登陆了。 但是如果系统系统了,还没有用户登陆的话,这时候只有session0。所以这时候显然行不通。


引用 1 楼 hfz8867879 的回复:CreateProcessAsUser 绝对没有问题,楼主开启用户进程的时候,传入的token对不对?我看cs……

session0里也是可以启动进程管理器的吧亲?

#5


引用 4 楼 hfz8867879 的回复:
引用 3 楼 alan_tan 的回复:我不是用这种方法,而是用msdn 上的一个例子。
获取explorer.exe的token,要求已经有用户登陆了。 但是如果系统系统了,还没有用户登陆的话,这时候只有session0。所以这时候显然行不通。


引用 1 楼 hfz8867879 的回复:CreateProcessAsUser 绝对没有问题,楼主开启用户进程……

那个获取explorer.exe的token,这个explorer.exe进程是其它登陆用于运行的。 我要启动的是windows media player,肯定不能是system用户的token

#6


引用 5 楼 alan_tan 的回复:
引用 4 楼 hfz8867879 的回复:引用 3 楼 alan_tan 的回复:我不是用这种方法,而是用msdn 上的一个例子。
获取explorer.exe的token,要求已经有用户登陆了。 但是如果系统系统了,还没有用户登陆的话,这时候只有session0。所以这时候显然行不通。


引用 1 楼 hfz8867879 的回复:CreateProcess……

我觉得是。。。你测一下吧亲

#7


引用 6 楼 hfz8867879 的回复:
引用 5 楼 alan_tan 的回复:引用 4 楼 hfz8867879 的回复:引用 3 楼 alan_tan 的回复:我不是用这种方法,而是用msdn 上的一个例子。
获取explorer.exe的token,要求已经有用户登陆了。 但是如果系统系统了,还没有用户登陆的话,这时候只有session0。所以这时候显然行不通。


引用 1 楼 hfz88678……


我先测一下,回头再说

#8


引用 6 楼 hfz8867879 的回复:
引用 5 楼 alan_tan 的回复:引用 4 楼 hfz8867879 的回复:引用 3 楼 alan_tan 的回复:我不是用这种方法,而是用msdn 上的一个例子。
获取explorer.exe的token,要求已经有用户登陆了。 但是如果系统系统了,还没有用户登陆的话,这时候只有session0。所以这时候显然行不通。


引用 1 楼 hfz88678……

未登录情况下,不能取得token

#9


引用 8 楼 alan_tan 的回复:
引用 6 楼 hfz8867879 的回复:引用 5 楼 alan_tan 的回复:引用 4 楼 hfz8867879 的回复:引用 3 楼 alan_tan 的回复:我不是用这种方法,而是用msdn 上的一个例子。
获取explorer.exe的token,要求已经有用户登陆了。 但是如果系统系统了,还没有用户登陆的话,这时候只有session0。所以这时候显然行不通……

亲,应该是没开吧,你开一下explorer.exe进程,再去获取啊。。。开进程很简单的啊

#10


该回复于2013-01-25 08:49:29被管理员删除

#11


楼主可参见: Administrator用户直接获取System权限(创建新System权限Token并调用CreateProcessAsUser)
说来真是沮丧,我连接两周都在研究跨seesion注入,跨session是没有问题,但是没有与CSRSS通信,导致注入后无法创建控制台、无法创建线程等必须调用CsrClientCallServer函数的功能,google翻遍了,kernel32.dll等源代码、汇编代码都跟到快速系统调用了还是不行,想尽了一切办法,都无法解决,半小时前才放弃,不再研究。
我这儿给楼主几个思路:
1.获取系统进程(比如winlogon.exe等的)Token,然后用此Token创建新进程;
2.创建系统权限的Token,用此Token创建新进程;
3.本地HOOK nt native api(好像是ZwCreateProcessEx还是NtCreateProcessEx,记不得了,没心情,都不想查了),这些native api创建进程有一个句柄,表示父进程的句柄,把winlogon等系统进程的句柄传进入,其他不变,然后创建进程,就会是system的进程;
4.远程注入winlogon(可使用CreateRemoteThread),然后在注入的dll里创建进程,自然这个进程就是系统进程了;
5.使用更加内核的nt native api RtlCreateUserThread和NtQueueApcThread进入注入,这个方法可以跨session,也是我所知目前*的方法,问题就是上面我所提及的,无法创建进程。
2008下的服务,session好像是0,而且权限也比一般程序高,很难搞定。
楼主上想以系统权限启动windows media player,还是仅仅想让一个服务启动windows media player?

#12


再多说一句:使用Token创建进程的方法,要需要很多权限,各种麻烦,最主要的是SE_ASSIGNPRIMARYTOKEN_NAME和SE_CREATE_TOKEN_NAME,可以通过编程实现获得,也可以通过组策略来改,但都必须注销才生效,这也是我所不想用的原因。楼主若想用这种办法,多看看MSDN,打开什么句柄,干什么以,需要什么权限这些,MSDN上说得很详细。

#1


CreateProcessAsUser 绝对没有问题,楼主开启用户进程的时候,传入的token对不对?我看csdn上有个大牛贴过代码,是先获取了 explorer.exe的token,把他作为CreateProcessAsUser 的参数,我试过,楼主肯定参数没搞好

#2


CreateProcessAsUser 绝对没有问题,楼主开启用户进程的时候,传入的token对不对?我看csdn上有个大牛贴过代码,是先获取了 explorer.exe的token,把他作为CreateProcessAsUser 的参数,我试过,楼主肯定参数没搞好

#3


我不是用这种方法,而是用msdn 上的一个例子。
获取explorer.exe的token,要求已经有用户登陆了。 但是如果系统系统了,还没有用户登陆的话,这时候只有session0。所以这时候显然行不通。


引用 1 楼 hfz8867879 的回复:
CreateProcessAsUser 绝对没有问题,楼主开启用户进程的时候,传入的token对不对?我看csdn上有个大牛贴过代码,是先获取了 explorer.exe的token,把他作为CreateProcessAsUser 的参数,我试过,楼主肯定参数没搞好

#4


引用 3 楼 alan_tan 的回复:
我不是用这种方法,而是用msdn 上的一个例子。
获取explorer.exe的token,要求已经有用户登陆了。 但是如果系统系统了,还没有用户登陆的话,这时候只有session0。所以这时候显然行不通。


引用 1 楼 hfz8867879 的回复:CreateProcessAsUser 绝对没有问题,楼主开启用户进程的时候,传入的token对不对?我看cs……

session0里也是可以启动进程管理器的吧亲?

#5


引用 4 楼 hfz8867879 的回复:
引用 3 楼 alan_tan 的回复:我不是用这种方法,而是用msdn 上的一个例子。
获取explorer.exe的token,要求已经有用户登陆了。 但是如果系统系统了,还没有用户登陆的话,这时候只有session0。所以这时候显然行不通。


引用 1 楼 hfz8867879 的回复:CreateProcessAsUser 绝对没有问题,楼主开启用户进程……

那个获取explorer.exe的token,这个explorer.exe进程是其它登陆用于运行的。 我要启动的是windows media player,肯定不能是system用户的token

#6


引用 5 楼 alan_tan 的回复:
引用 4 楼 hfz8867879 的回复:引用 3 楼 alan_tan 的回复:我不是用这种方法,而是用msdn 上的一个例子。
获取explorer.exe的token,要求已经有用户登陆了。 但是如果系统系统了,还没有用户登陆的话,这时候只有session0。所以这时候显然行不通。


引用 1 楼 hfz8867879 的回复:CreateProcess……

我觉得是。。。你测一下吧亲

#7


引用 6 楼 hfz8867879 的回复:
引用 5 楼 alan_tan 的回复:引用 4 楼 hfz8867879 的回复:引用 3 楼 alan_tan 的回复:我不是用这种方法,而是用msdn 上的一个例子。
获取explorer.exe的token,要求已经有用户登陆了。 但是如果系统系统了,还没有用户登陆的话,这时候只有session0。所以这时候显然行不通。


引用 1 楼 hfz88678……


我先测一下,回头再说

#8


引用 6 楼 hfz8867879 的回复:
引用 5 楼 alan_tan 的回复:引用 4 楼 hfz8867879 的回复:引用 3 楼 alan_tan 的回复:我不是用这种方法,而是用msdn 上的一个例子。
获取explorer.exe的token,要求已经有用户登陆了。 但是如果系统系统了,还没有用户登陆的话,这时候只有session0。所以这时候显然行不通。


引用 1 楼 hfz88678……

未登录情况下,不能取得token

#9


引用 8 楼 alan_tan 的回复:
引用 6 楼 hfz8867879 的回复:引用 5 楼 alan_tan 的回复:引用 4 楼 hfz8867879 的回复:引用 3 楼 alan_tan 的回复:我不是用这种方法,而是用msdn 上的一个例子。
获取explorer.exe的token,要求已经有用户登陆了。 但是如果系统系统了,还没有用户登陆的话,这时候只有session0。所以这时候显然行不通……

亲,应该是没开吧,你开一下explorer.exe进程,再去获取啊。。。开进程很简单的啊

#10


该回复于2013-01-25 08:49:29被管理员删除

#11


楼主可参见: Administrator用户直接获取System权限(创建新System权限Token并调用CreateProcessAsUser)
说来真是沮丧,我连接两周都在研究跨seesion注入,跨session是没有问题,但是没有与CSRSS通信,导致注入后无法创建控制台、无法创建线程等必须调用CsrClientCallServer函数的功能,google翻遍了,kernel32.dll等源代码、汇编代码都跟到快速系统调用了还是不行,想尽了一切办法,都无法解决,半小时前才放弃,不再研究。
我这儿给楼主几个思路:
1.获取系统进程(比如winlogon.exe等的)Token,然后用此Token创建新进程;
2.创建系统权限的Token,用此Token创建新进程;
3.本地HOOK nt native api(好像是ZwCreateProcessEx还是NtCreateProcessEx,记不得了,没心情,都不想查了),这些native api创建进程有一个句柄,表示父进程的句柄,把winlogon等系统进程的句柄传进入,其他不变,然后创建进程,就会是system的进程;
4.远程注入winlogon(可使用CreateRemoteThread),然后在注入的dll里创建进程,自然这个进程就是系统进程了;
5.使用更加内核的nt native api RtlCreateUserThread和NtQueueApcThread进入注入,这个方法可以跨session,也是我所知目前*的方法,问题就是上面我所提及的,无法创建进程。
2008下的服务,session好像是0,而且权限也比一般程序高,很难搞定。
楼主上想以系统权限启动windows media player,还是仅仅想让一个服务启动windows media player?

#12


再多说一句:使用Token创建进程的方法,要需要很多权限,各种麻烦,最主要的是SE_ASSIGNPRIMARYTOKEN_NAME和SE_CREATE_TOKEN_NAME,可以通过编程实现获得,也可以通过组策略来改,但都必须注销才生效,这也是我所不想用的原因。楼主若想用这种办法,多看看MSDN,打开什么句柄,干什么以,需要什么权限这些,MSDN上说得很详细。