domin
驱动牛犊
驱动牛犊
  • 注册日期2001-05-01
  • 最后登录2009-01-29
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望13点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
阅读:1947回复:10

服务中启动ring3应用程序,用什么函数?

楼主#
更多 发布于:2004-03-10 10:01
在服务中应该比从ring0中简单。但是我试了WinExec 还有 ShellExecut
等简单函数都搞不定。

用CreateProcess能搞定吗?另外如果用这种方式,应用程序出问题会影响服务吗。

比较初级。请指点
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2004-03-10 10:06
服务本身就处于RING3,启动进程应该不会有什么问题的。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
domin
驱动牛犊
驱动牛犊
  • 注册日期2001-05-01
  • 最后登录2009-01-29
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望13点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-10 10:22
是啊,
可是CreateProcess参数很多,特别是STARTUPINFO结构,不知道怎么设
domin
驱动牛犊
驱动牛犊
  • 注册日期2001-05-01
  • 最后登录2009-01-29
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望13点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-03-10 11:12
使用如下代码,在服务中不行(函数执行成功,但子进程没有创建)
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
// Start the child process.
if( !CreateProcess( "c:\\test.exe,
        NULL,
        NULL,      // Process handle not inheritable.
        NULL,      // Thread handle not inheritable.
        FALSE,     // Set handle inheritance to FALSE.
        0,         // No creation flags.
        NULL,      // Use parent's environment block.
        NULL,      // Use parent's starting directory.
        &si,     // Pointer to STARTUPINFO structure.
        &pi )// Pointer to PROCESS_INFORMATION structure.
    )
    {
        ErrorExit( "CreateProcess failed." );
    }       ///上面得代码来自MSDN
请大家帮帮忙啊
原来以为这里不会有什么问题,现在好急啊
其实我不需要控制子进程,只要启动它就可以了,有其它的方法吗?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2004-03-10 12:45
先GetStartupInfo,然后CreateProcess
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
domin
驱动牛犊
驱动牛犊
  • 注册日期2001-05-01
  • 最后登录2009-01-29
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望13点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-03-10 13:10
我才发现上面的代码实际上是成功了。
不过创建的进程没有窗口,我把STARTUPINFO结构中的showwindow改了也没用,而且该子进程居然也变成服务,kill不掉,我晕倒了
怎么会这样?
找到一篇文章,还是不知该怎么办
http://techsupt.winbatch.com/TS/T000001036004F33.html
我不要这么复杂,只要启动一个应用程序就可以了呀
能用其它的函数搞定吗?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
6楼#
发布于:2004-03-10 13:20
根据你的贴在来看,该进程并不是服务,但他同创建的他进程是同样的环境,所以和普通的进程不同
还可以考虑一个间接的方法通过CreateRemoteThread把CreateProcess代码放到EXPLORER的空间,通过EXPLORER来启动进程,你测试看看.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
kernel_kernel
驱动小牛
驱动小牛
  • 注册日期2002-12-08
  • 最后登录2009-02-06
  • 粉丝0
  • 关注0
  • 积分435分
  • 威望51点
  • 贡献值0点
  • 好评度41点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-03-10 13:59
我才发现上面的代码实际上是成功了。
不过创建的进程没有窗口,我把STARTUPINFO结构中的showwindow改了也没用,而且该子进程居然也变成服务,kill不掉,我晕倒了
怎么会这样?
找到一篇文章,还是不知该怎么办
http://techsupt.winbatch.com/TS/T000001036004F33.html
我不要这么复杂,只要启动一个应用程序就可以了呀
能用其它的函数搞定吗?
 


自己改一下si参数中的默认桌面就行了
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-03-10 20:03
调用CreateProcessAsUser()函数可以搞定。

1、缺省情况下新建立的进程将运行在“非交互、不可视”的工作站和桌面之上,意味着用户不能看见新进程的窗口。如果想让新进程和用户进行交互,必须明确指定STARTUPINFO结构的lpDesktop为“WinSta0-Default”。

2、第一个参数必须是当前登陆用户的Token。缺省情况下服务运行在LocalSystem帐号下面,而一般的应用程序运行在当前的登陆帐号下面,比如Guest、Administrator等。之所以一定要使用当前登陆用户的Token,而不采用服务进程的Toekn,是因为LocalSystem帐号有很多限制,比如不能访问网络,不能直接存取HKEY-Current-User注册表键等。

可以通过OpenProcess()和OpenProcessToken()函数得到当前登陆用户的Token。顺便说清楚一点,可以通过使用Toolhelp API查询进程的Process ID来作为OpenProcess()的最后一个参数。

注意:“WinSta0-Default”,这个“-”应该是反斜杠backslash,但是这个论坛不允许使用这个字符,所以使用“-”代替,使用时必须替换。

[编辑 -  3/10/04 by  slwqw]
zhangyj
驱动牛犊
驱动牛犊
  • 注册日期2002-07-17
  • 最后登录2009-07-17
  • 粉丝0
  • 关注0
  • 积分103分
  • 威望50点
  • 贡献值1点
  • 好评度9点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-03-17 10:27
服务程序和一般的应用程序不在同一个窗口环境,所以服务程序创建的程序是看不到窗口的。
domin
驱动牛犊
驱动牛犊
  • 注册日期2001-05-01
  • 最后登录2009-01-29
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望13点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-03-19 10:55
谢谢 slwqw 谢谢大家 分已给出
游客

返回顶部