C++ 停止并禁用服务

BOOL StopService()
{
	SC_HANDLE scm;
	SC_HANDLE service;
	if((scm=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS))==NULL)
	{
		CloseServiceHandle(scm);
		return 0;
	}
	service=OpenService(scm, "ShellHWDetection",SERVICE_ALL_ACCESS);
	if(!service)
	{
		CloseServiceHandle(service);
		CloseServiceHandle(scm);
		return 0;
	}

	SERVICE_STATUS status;
	if(QueryServiceStatus(service,&status)){
		if(status.dwCurrentState!=SERVICE_STOPPED) {    //如果服务当前状态为启用	
			ControlService(service,SERVICE_CONTROL_STOP,&status);

			SC_LOCK sclLockA;
			sclLockA = LockServiceDatabase(scm);
			if (sclLockA != NULL){
				if (! ChangeServiceConfig(
					service, // handle of service
					SERVICE_NO_CHANGE, // service type: no change
					SERVICE_DISABLED, // 这里做了更改
					SERVICE_NO_CHANGE, // error control: no change
					NULL, // binary path: no change
					NULL, // load order group: no change
					NULL, // tag ID: no change
					NULL, // dependencies: no change
					NULL, // account name: no change
					NULL, // password: no change
					NULL)) //displayname
				{
				}
			}
			
			UnlockServiceDatabase(sclLockA);
		}
		else
		{
			SC_LOCK sclLockB;
			sclLockB = LockServiceDatabase(scm);
			if (sclLockB != NULL){
				if (! ChangeServiceConfig(
					service, // handle of service
					SERVICE_NO_CHANGE, // service type: no change
					SERVICE_DISABLED, // 这里做了更改
					SERVICE_NO_CHANGE, // error control: no change
					NULL, // binary path: no change
					NULL, // load order group: no change
					NULL, // tag ID: no change
					NULL, // dependencies: no change
					NULL, // account name: no change
					NULL, // password: no change
					NULL)) //displayname
				{

				}
			}
			
			UnlockServiceDatabase(sclLockB);
		}
		CloseServiceHandle(service);
		CloseServiceHandle(scm);
	}
	return TRUE;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值