c++停用服务,重启后却自动运行解决方案

c++停用服务,重启后却自动运行
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;
}