mirror of
https://github.com/yuanyuanxiang/SimpleRemoter.git
synced 2026-01-21 23:13:08 +08:00
Improve: Exit authorization client after succeed authorizing
This commit is contained in:
@@ -311,6 +311,18 @@ BOOL CMy2015RemoteApp::InitInstance()
|
||||
// 例如修改为公司或组织名
|
||||
SetRegistryKey(_T("YAMA"));
|
||||
|
||||
// 注册一个事件,用于进程间通信
|
||||
// 请勿修改此事件名称,否则可能导致无法启动程序、鉴权失败等问题
|
||||
char eventName[64] = { 0 };
|
||||
sprintf(eventName, "YAMA_%d", GetCurrentProcessId());
|
||||
HANDLE hEvent = CreateEventA(NULL, TRUE, FALSE, eventName);
|
||||
if (hEvent == NULL) {
|
||||
Mprintf("[InitInstance] 创建事件失败,错误码: %d\n", GetLastError());
|
||||
}
|
||||
else {
|
||||
Mprintf("[InitInstance] 创建事件成功,事件名: %s\n", eventName);
|
||||
}
|
||||
|
||||
CMy2015RemoteDlg dlg(nullptr);
|
||||
m_pMainWnd = &dlg;
|
||||
INT_PTR nResponse = dlg.DoModal();
|
||||
@@ -327,6 +339,11 @@ BOOL CMy2015RemoteApp::InitInstance()
|
||||
delete pShellManager;
|
||||
}
|
||||
|
||||
if (hEvent) {
|
||||
CloseHandle(hEvent);
|
||||
Mprintf("[InitInstance] 关闭事件句柄。\n");
|
||||
}
|
||||
|
||||
// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
|
||||
// 而不是启动应用程序的消息泵。
|
||||
return FALSE;
|
||||
|
||||
Binary file not shown.
@@ -2326,6 +2326,16 @@ void FinishSend(void* user)
|
||||
std::thread(delay_cancel, ctx, 15).detach();
|
||||
}
|
||||
|
||||
BOOL CMy2015RemoteDlg::AuthorizeClient(const std::string& sn, const std::string& passcode, uint64_t hmac)
|
||||
{
|
||||
if (sn.empty() || passcode.empty() || hmac == 0) {
|
||||
return FALSE;
|
||||
}
|
||||
static const char* superAdmin = getenv("YAMA_PWD");
|
||||
std::string pwd = superAdmin ? superAdmin : m_superPass;
|
||||
return VerifyMessage(pwd, (BYTE*)passcode.c_str(), passcode.length(), hmac);
|
||||
}
|
||||
|
||||
VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
|
||||
{
|
||||
if (isClosed) {
|
||||
@@ -2359,15 +2369,13 @@ VOID CMy2015RemoteDlg::MessageHandle(CONTEXT_OBJECT* ContextObject)
|
||||
valid = (hash256 == fixedKey);
|
||||
}
|
||||
if (valid) {
|
||||
static const char* superAdmin = getenv("YAMA_PWD");
|
||||
std::string pwd = superAdmin ? superAdmin : m_superPass;
|
||||
if (VerifyMessage(pwd, (BYTE*)passcode.c_str(), passcode.length(), hmac)) {
|
||||
valid = AuthorizeClient(sn, passcode, hmac);
|
||||
if (valid) {
|
||||
Mprintf("%s 校验成功, HMAC 校验成功: %s\n", passcode.c_str(), sn.c_str());
|
||||
std::string tip = passcode + " 校验成功: " + sn;
|
||||
CharMsg* msg = new CharMsg(tip.c_str());
|
||||
PostMessageA(WM_SHOWMESSAGE, (WPARAM)msg, NULL);
|
||||
} else {
|
||||
valid = FALSE;
|
||||
Mprintf("%s 校验成功, HMAC 校验失败: %s\n", passcode.c_str(), sn.c_str());
|
||||
}
|
||||
} else {
|
||||
@@ -2723,7 +2731,8 @@ void CMy2015RemoteDlg::UpdateActiveWindow(CONTEXT_OBJECT* ctx)
|
||||
// 回复心跳
|
||||
// if(0)
|
||||
{
|
||||
HeartbeatACK ack = { hb.Time };
|
||||
BOOL authorized = AuthorizeClient(hb.SN, hb.Passcode, hb.PwdHmac);
|
||||
HeartbeatACK ack = { hb.Time, (char)authorized };
|
||||
BYTE buf[sizeof(HeartbeatACK) + 1] = { CMD_HEARTBEAT_ACK};
|
||||
memcpy(buf + 1, &ack, sizeof(HeartbeatACK));
|
||||
ctx->Send2Client(buf, sizeof(buf));
|
||||
@@ -4520,6 +4529,7 @@ void CMy2015RemoteDlg::OnProxyPort()
|
||||
FrpcParam param(key.c_str(), timestamp, ip.c_str(), serverPort, localPort, localPort);
|
||||
EnterCriticalSection(&m_cs);
|
||||
POSITION Pos = m_CList_Online.GetFirstSelectedItemPosition();
|
||||
BOOL sent = FALSE;
|
||||
while (Pos) {
|
||||
int iItem = m_CList_Online.GetNextSelectedItem(Pos);
|
||||
context* ctx = (context*)m_CList_Online.GetItemData(iItem);
|
||||
@@ -4533,6 +4543,7 @@ void CMy2015RemoteDlg::OnProxyPort()
|
||||
DllExecuteInfoNew* p = (DllExecuteInfoNew*)(cmd + 1);
|
||||
SetParameters(p, (char*)¶m, sizeof(param));
|
||||
ctx->Send2Client(cmd, 1 + sizeof(DllExecuteInfoNew));
|
||||
sent = TRUE;
|
||||
}
|
||||
else {
|
||||
PostMessageA(WM_SHOWNOTIFY, (WPARAM)new CharMsg("版本不支持"),
|
||||
@@ -4542,6 +4553,7 @@ void CMy2015RemoteDlg::OnProxyPort()
|
||||
}
|
||||
LeaveCriticalSection(&m_cs);
|
||||
SAFE_DELETE(frpc);
|
||||
MessageBoxA(CString("请通过") + ip.c_str() + ":" + std::to_string(localPort).c_str() + "访问代理端口!",
|
||||
"提示", MB_ICONINFORMATION);
|
||||
if (sent)
|
||||
MessageBoxA(CString("请通过") + ip.c_str() + ":" + std::to_string(localPort).c_str() + "访问代理端口!",
|
||||
"提示", MB_ICONINFORMATION);
|
||||
}
|
||||
|
||||
@@ -222,6 +222,7 @@ public:
|
||||
MasterSettings m_settings;
|
||||
static BOOL CALLBACK NotifyProc(CONTEXT_OBJECT* ContextObject);
|
||||
static BOOL CALLBACK OfflineProc(CONTEXT_OBJECT* ContextObject);
|
||||
BOOL AuthorizeClient(const std::string& sn, const std::string& passcode, uint64_t hmac);
|
||||
VOID MessageHandle(CONTEXT_OBJECT* ContextObject);
|
||||
VOID SendSelectedCommand(PBYTE szBuffer, ULONG ulLength);
|
||||
VOID SendAllCommand(PBYTE szBuffer, ULONG ulLength);
|
||||
|
||||
@@ -981,7 +981,7 @@ void CScreenSpyDlg::EnterFullScreen()
|
||||
// 7. 标记全屏模式
|
||||
m_bFullScreen = true;
|
||||
|
||||
SetTimer(1, 200, NULL);
|
||||
SetTimer(1, 100, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1087,3 +1087,8 @@ void CScreenSpyDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
|
||||
::PostMessage(pMain->GetSafeHwnd(), WM_SESSION_ACTIVATED, (WPARAM)this, 0);
|
||||
}
|
||||
}
|
||||
|
||||
void CScreenSpyDlg::UpdateCtrlStatus(BOOL ctrl) {
|
||||
m_bIsCtrl = ctrl;
|
||||
SetClassLongPtr(m_hWnd, GCLP_HCURSOR, m_bIsCtrl ? (LONG_PTR)m_hRemoteCursor : (LONG_PTR)LoadCursor(NULL, IDC_NO));
|
||||
}
|
||||
|
||||
@@ -111,6 +111,7 @@ public:
|
||||
bool Decode(LPBYTE Buffer, int size);
|
||||
void EnterFullScreen();
|
||||
bool LeaveFullScreen();
|
||||
void UpdateCtrlStatus(BOOL ctrl);
|
||||
|
||||
afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
||||
afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#include "stdafx.h"
|
||||
#include "ToolbarDlg.h"
|
||||
#include "2015RemoteDlg.h"
|
||||
#include <ScreenSpyDlg.h>
|
||||
|
||||
IMPLEMENT_DYNAMIC(CToolbarDlg, CDialogEx)
|
||||
|
||||
@@ -20,7 +21,7 @@ void CToolbarDlg::DoDataExchange(CDataExchange* pDX)
|
||||
|
||||
BEGIN_MESSAGE_MAP(CToolbarDlg, CDialogEx)
|
||||
ON_BN_CLICKED(IDC_BTN_EXIT_FULLSCREEN, &CToolbarDlg::OnBnClickedExitFullscreen)
|
||||
ON_BN_CLICKED(IDC_BTN_MINIMIZE, &CToolbarDlg::OnBnClickedMinimize)
|
||||
ON_BN_CLICKED(CONTROL_BTN_ID, &CToolbarDlg::OnBnClickedCtrl)
|
||||
ON_BN_CLICKED(IDC_BTN_CLOSE, &CToolbarDlg::OnBnClickedClose)
|
||||
END_MESSAGE_MAP()
|
||||
|
||||
@@ -45,7 +46,7 @@ void CToolbarDlg::SlideIn()
|
||||
int cx = GetSystemMetrics(SM_CXSCREEN);
|
||||
for (int y = -m_nHeight; y <= 0; y += 8) {
|
||||
SetWindowPos(&wndTopMost, 0, y, cx, m_nHeight, SWP_NOACTIVATE);
|
||||
Sleep(10);
|
||||
Sleep(100);
|
||||
}
|
||||
SetWindowPos(&wndTopMost, 0, 0, cx, m_nHeight, SWP_NOACTIVATE);
|
||||
}
|
||||
@@ -55,7 +56,7 @@ void CToolbarDlg::SlideOut()
|
||||
int cx = GetSystemMetrics(SM_CXSCREEN);
|
||||
for (int y = 0; y >= -m_nHeight; y -= 8) {
|
||||
SetWindowPos(&wndTopMost, 0, y, cx, m_nHeight, SWP_NOACTIVATE);
|
||||
Sleep(10);
|
||||
Sleep(100);
|
||||
}
|
||||
ShowWindow(SW_HIDE);
|
||||
m_bVisible = false;
|
||||
@@ -67,10 +68,12 @@ void CToolbarDlg::OnBnClickedExitFullscreen()
|
||||
GetParent()->PostMessage(WM_COMMAND, ID_EXIT_FULLSCREEN, 0);
|
||||
}
|
||||
|
||||
void CToolbarDlg::OnBnClickedMinimize()
|
||||
void CToolbarDlg::OnBnClickedCtrl()
|
||||
{
|
||||
GetParent()->ShowWindow(SW_MINIMIZE);
|
||||
SlideOut();
|
||||
CScreenSpyDlg* pParent = (CScreenSpyDlg*)GetParent();
|
||||
pParent->m_bIsCtrl = !pParent->m_bIsCtrl;
|
||||
pParent->UpdateCtrlStatus(pParent->m_bIsCtrl);
|
||||
GetDlgItem(CONTROL_BTN_ID)->SetWindowTextA(pParent->m_bIsCtrl ? "暂停控制" : "控制屏幕");
|
||||
}
|
||||
|
||||
void CToolbarDlg::OnBnClickedClose()
|
||||
@@ -99,7 +102,7 @@ BOOL CToolbarDlg::OnInitDialog()
|
||||
|
||||
GetDlgItem(IDC_BTN_EXIT_FULLSCREEN)->SetWindowPos(NULL,
|
||||
startX, y, btnWidth, btnHeight, SWP_NOZORDER);
|
||||
GetDlgItem(IDC_BTN_MINIMIZE)->SetWindowPos(NULL,
|
||||
GetDlgItem(CONTROL_BTN_ID)->SetWindowPos(NULL,
|
||||
startX + btnWidth + btnSpacing, y, btnWidth, btnHeight, SWP_NOZORDER);
|
||||
GetDlgItem(IDC_BTN_CLOSE)->SetWindowPos(NULL,
|
||||
startX + (btnWidth + btnSpacing) * 2, y, btnWidth, btnHeight, SWP_NOZORDER);
|
||||
|
||||
@@ -24,7 +24,7 @@ protected:
|
||||
|
||||
public:
|
||||
afx_msg void OnBnClickedExitFullscreen();
|
||||
afx_msg void OnBnClickedMinimize();
|
||||
afx_msg void OnBnClickedCtrl();
|
||||
afx_msg void OnBnClickedClose();
|
||||
virtual BOOL OnInitDialog();
|
||||
};
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user