c++停用服务,重启后却自动运行解决方案
c++停用服务,重启后却自动运行
c++停用服务,重启电脑后却自动运行,如何让停用的服务在重启后不自动运行?
系统是WIN7.代码如下,跪谢。
------解决思路----------------------
c++停用服务,重启电脑后却自动运行,如何让停用的服务在重启后不自动运行?
系统是WIN7.代码如下,跪谢。
void disableFirewall()
{
SERVICE_STATUS sStatus;
SC_HANDLE hManager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
if (hManager == NULL)
{
return;
}
SC_HANDLE hService = OpenService(hManager,"MpsSvc", SERVICE_ALL_ACCESS);
if (hService == NULL)
{
return;
}
BOOL bControl = ControlService(hService, SERVICE_CONTROL_STOP, &sStatus);
if (bControl == 0)
{
return;
}
CloseServiceHandle(hManager);
CloseServiceHandle(hService);
return;
}
------解决思路----------------------
DWORD StopService(SC_HANDLE hSCM, SC_HANDLE hService, BOOL fStopDependencies, DWORD dwTimeout)
{
SERVICE_STATUS ss;
DWORD dwStartTime = GetTickCount();
// 服务已经停止
if(!QueryServiceStatus(hService, &ss))
return GetLastError();
if(ss.dwCurrentState == SERVICE_STOPPED)
return ERROR_SUCCESS;
// 正在停止服务,稍等...
while(ss.dwCurrentState == SERVICE_STOP_PENDING) {
Sleep(ss.dwWaitHint);
if(!QueryServiceStatus(hService, &ss))
return GetLastError();
if(ss.dwCurrentState == SERVICE_STOPPED)
return ERROR_SUCCESS;
if(GetTickCount() - dwStartTime > dwTimeout)
return ERROR_TIMEOUT;
}
// 如果服务正在运行,先停止那些依赖此服务的子服务。
// 注意,这些子服务停止了,下次将无法再次被启动了。
if(fStopDependencies) {
DWORD i;
DWORD dwBytesNeeded;
DWORD dwCount;
LPENUM_SERVICE_STATUS lpDependencies = NULL;
ENUM_SERVICE_STATUS ess;
SC_HANDLE hDepService;
// 枚举这些子服务(获取缓冲区大小)
if(EnumDependentServices(hService, SERVICE_ACTIVE, lpDependencies, 0, &dwBytesNeeded, &dwCount))
{
// 没有...
}
else
{
if(GetLastError() != ERROR_MORE_DATA)
return GetLastError();
// 枚举这些子服务(获取缓冲区)
lpDependencies = (LPENUM_SERVICE_STATUS)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwBytesNeeded);
if(!lpDependencies)
return GetLastError();
__try
{
if(!EnumDependentServices(hService, SERVICE_ACTIVE, lpDependencies, dwBytesNeeded, &dwBytesNeeded, &dwCount))
return GetLastError();
for(i = 0; i < dwCount; i++)
{
ess = *(lpDependencies + i);
hDepService = OpenService(hSCM, ess.lpServiceName, SERVICE_STOP
------解决思路----------------------
SERVICE_QUERY_STATUS);
if(!hDepService)
return GetLastError();
__try
{
if(!ControlService(hDepService, SERVICE_CONTROL_STOP, &ss))
return GetLastError();
while(ss.dwCurrentState != SERVICE_STOPPED)
{
Sleep(ss.dwWaitHint);
if(!QueryServiceStatus(hDepService, &ss))
return GetLastError();
if(ss.dwCurrentState == SERVICE_STOPPED)
break;
if(GetTickCount() - dwStartTime > dwTimeout)
return ERROR_TIMEOUT;
}
}
__finally
{
CloseServiceHandle(hDepService);
}
}
}
__finally
{
HeapFree(GetProcessHeap(), 0, lpDependencies);
}
}
}
// 停止这个服务
if(!ControlService(hService, SERVICE_CONTROL_STOP, &ss))
return GetLastError();
// 等等看
while(ss.dwCurrentState != SERVICE_STOPPED)
{
Sleep(ss.dwWaitHint);
if(!QueryServiceStatus(hService, &ss))
return GetLastError();
if(ss.dwCurrentState == SERVICE_STOPPED)
break;
if(GetTickCount() - dwStartTime > dwTimeout)
return ERROR_TIMEOUT;
}
return ERROR_SUCCESS;
}