首页
社区
课程
招聘
应用软件启动服务程序的权限问题?
2014-12-9 20:31 7324

应用软件启动服务程序的权限问题?

2014-12-9 20:31
7324
目的---------------在应用软件中判断服务有没有启动,没有启动的话就启动他。
/////////////////////////////启动服务//////////////////////////////////////////
void CheckStartService()
{
	SC_HANDLE hSC=OpenSCManager(NULL,NULL,GENERIC_EXECUTE);
	if(hSC==NULL)
	{
		return ;
	}
	//打开服务
	SC_HANDLE hSvc=OpenService(hSC,L"李多海",SERVICE_START|SERVICE_QUERY_STATUS|SERVICE_STOP);
	if(hSvc==NULL)
	{
		CloseServiceHandle(hSC);
	}
	//获取服务的状态
    SERVICE_STATUS status;
    if( ::QueryServiceStatus( hSvc, &status) == FALSE)
    {
        ::CloseServiceHandle( hSvc);
        ::CloseServiceHandle( hSC);
        return;
    }
	    //如果处于停止状态则启动服务

    if( status.dwCurrentState == SERVICE_STOPPED)
	{
		//启动服务
		if(StartService(hSvc,NULL,NULL)==FALSE)
		{
			::CloseServiceHandle( hSvc);
			::CloseServiceHandle( hSC);
			return;
		}
		//等待服务启动
		while( ::QueryServiceStatus( hSvc, &status) == TRUE)
		{
			::Sleep( status.dwWaitHint);
			if( status.dwCurrentState == SERVICE_RUNNING)
			{
				::CloseServiceHandle( hSvc);
				::CloseServiceHandle( hSC);
				return;
			}
		}
	}
	::CloseServiceHandle( hSvc);
	::CloseServiceHandle( hSC);
	return;
}

测试用管理员权限运行我的EXE就能启动服务,调试发现问题1:
OpenSCManager需要访问权限
问题2
StartService必须在OpenService的时候加上SERVICE_START权限,加上这个OpenService就GetLastError=5了,请问各位漂亮的姐姐妹妹英俊的哥哥弟弟,叔叔阿姨们,面对前方的路,我该何去何从?

ps:倘若问题解决,女的小弟愿意以身相许,男的小弟愿意捐出处菊以示感谢。

[CTF入门培训]顶尖高校博士及硕士团队亲授《30小时教你玩转CTF》,视频+靶场+题目!助力进入CTF世界

收藏
点赞0
打赏
分享
最新回复 (10)
雪    币: 1443
活跃值: (96)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cvrock 2014-12-9 20:45
2
0
OpenSCManager的第三个参数传SC_MANAGER_ALL_ACCESS。
雪    币: 128
活跃值: (214)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
yiruirui 1 2014-12-9 20:48
3
0
传SC_MANAGER_ALL_ACCESS,openscmanager的getlasterror=5,拒绝访问
雪    币: 337
活跃值: (133)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
地狱怪客 2 2014-12-9 21:02
4
0
太暴力了。。。又是以身相许,又是捐出处菊的。。。。
雪    币: 1443
活跃值: (96)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cvrock 2014-12-9 21:42
5
0
你应该是在session 0调用的这段代码吧?换成SC_MANAGER_CONNECT试试,忘了哪个了,记得在session 0确实不能申请all access,换一个就好了。
雪    币: 209
活跃值: (118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
shilyx 2014-12-10 09:26
6
0
不会是uac的问题吧,提权了没?
雪    币: 128
活跃值: (214)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
yiruirui 1 2014-12-10 10:20
7
0
怎么提?
雪    币: 128
活跃值: (214)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
yiruirui 1 2014-12-10 10:21
8
0
用SC_MANAGER_CONNECT的话OpenSCManager是可以,但是后面的OpenService就不行了
雪    币: 5
活跃值: (164)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
maqianpxh 2014-12-11 15:43
9
0
提权不是链接器-清单文件-UAC执行级别-requireAdministrator吗?
不知道你们是不是讲这个
雪    币: 6267
活跃值: (2139)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
shuyangzjg 2015-3-22 17:48
10
0
楼主后来怎么解决的啊,OpenSCManager用SC_MANAGER_CONNECT,OpenService 又失败的情况,
我现在是xp sp3下 非管理员组用户检查服务状态的也遇到这情况
雪    币: 6267
活跃值: (2139)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
shuyangzjg 2015-3-22 18:05
11
0
OpenService  用 SERVICE_QUERY_STATUS 可以了
游客
登录 | 注册 方可回帖
返回