⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainframe.cpp

📁 用PC机访问wince的远程桌面,还可以上传文件,杀进程等功能,服务端在wince,客服端在windows下
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	dataList->size = nLen;
	if(Listhead == NULL)
		Listhead = dataList;
	else
		tmpList->next = dataList;
	tmpList = dataList;
	memcpy(dataList->data,pInBuf+sizeof(DFileUp),nLen);
	sendbufleng += nLen;
	WriteLog1("add %d\n",sendbufleng);
	if(sendbufleng == pIn->nSize)
	{
//		ll = -1;
		SetEvent(g_eventKill);
		WriteLog1("sendbufleng %d\n",sendbufleng);
	}
	WaitForSingleObject(g_eventlist, INFINITE); 
	listLen++;
	SetEvent(g_eventlist);

	return 0;
}/*
int CMainFrame::DealUploadFile(LPVOID lpvoid, int sk, sockaddr_in sa, char *pInBuf, PReqPackHead pReq)
{
	CMainFrame	*pMf	= (CMainFrame *)lpvoid;
	PDFileUp pIn = (PDFileUp)pInBuf;
//	FILE*fp;
	int pos = pIn->nPos;
	if(pos == 0)
	{
		if(fp != 0)
			fclose(fp);
		fp = fopen(pIn->szFileName,"wb");
		sendbufleng = 0;
	}
//	else
//		fp = fopen(pIn->szFileName,"ab");
	if( 0 == fp )
	{
		pMf->OnError(sk,sa,pReq,ERR_FILE_OPEN);
		return 1;
	}
	
	WriteLog("file pos %d\n",pos);
	
	int nsize = pReq->nSize;

	int nLen;
	nLen = nsize - sizeof(DFileUp) - sizeof(ReqPackHead);
	WriteLog("DFileUp len %d\n",sizeof(DFileUp));
	if(fwrite(pInBuf+sizeof(DFileUp),1,nLen,fp) != nLen)
	{
		pMf->OnError(sk,sa,pReq,ERR_FILE_WRITE);
		fclose(fp);
		return 1;
	}
	sendbufleng += nLen;
	if(sendbufleng == pIn->nSize)
		fclose(fp);
	return 0;
}*/
int CMainFrame::DealDelFile(LPVOID lpvoid, int sk, sockaddr_in sa, char *pInBuf, PReqPackHead pReq)
{
	CMainFrame	*pMf	= (CMainFrame *)lpvoid;
	PDFileDelect pIn = (PDFileDelect)pInBuf;
	TCHAR filename[1024];
	MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, pIn->szFileName, -1,filename, 1024);
	if((FILE_ATTRIBUTE_READONLY | GetFileAttributes(filename)) == GetFileAttributes(filename))
	{
		SetFileAttributes(filename,FILE_ATTRIBUTE_NORMAL);
	}
	int err = DeleteFile((filename));
	int nHeadLen = sizeof(ReplyPackHead);
	pMf->CreateReplyHead(pReq,nHeadLen,err);
	pMf->Send(g_szRet,nHeadLen, sk, sa, sizeof(sa));
	return 1;
}
int CMainFrame::DealCopyScreen(LPVOID lpvoid, int sk, sockaddr_in sa, char *pInBuf, PReqPackHead pReq)
{
	CMainFrame	*pMf	= (CMainFrame *)lpvoid;
	PDScCpyParams pIn = (PDScCpyParams)pInBuf;
	int nWidth = 640;
	int nHeight = 480;
	WriteLog("DealCopyScreen\n");
	BYTE *pBits = 0;
    BITMAPINFO bmpInfo = {0};
    bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    bmpInfo.bmiHeader.biWidth = nWidth;
    bmpInfo.bmiHeader.biHeight = nHeight;
    bmpInfo.bmiHeader.biPlanes = 1;
    bmpInfo.bmiHeader.biBitCount = 16;
    bmpInfo.bmiHeader.biCompression = BI_RGB;
    bmpInfo.bmiHeader.biSizeImage = 0;
    bmpInfo.bmiHeader.biXPelsPerMeter = 0;
    bmpInfo.bmiHeader.biYPelsPerMeter = 0;
    bmpInfo.bmiHeader.biClrUsed = 0;
    bmpInfo.bmiHeader.biClrImportant = 0;
	
	HDC hdc = CreateDC(L"DISPLAY", NULL, NULL, NULL);
    HDC hdcMem = ::CreateCompatibleDC(hdc);
	if( 0 == hdcMem ) 
	{
		::DeleteDC(hdc);
		return 0;
	}
    HBITMAP hBitMap = ::CreateDIBSection(hdcMem,&bmpInfo,
		DIB_RGB_COLORS,(void **)&pBits,NULL,0);
	
	// printf("one,hBitMap=%x,pBits=%x::%d\n",hBitMap,pBits,GetLastError());
	if( 0 == hBitMap )
	{
		::DeleteDC(hdcMem);
		::DeleteDC(hdc);
		if(pBits)
			free(pBits);
		return 0;
	}
	::SelectObject(hdcMem,hBitMap);
	DWORD ddd1 = GetTickCount();
	::BitBlt(hdcMem,0,0,nWidth,nHeight,hdc,0,0,SRCCOPY);
	int iBMPBytes = nWidth*nHeight*2;
	
	int nHeadLen = sizeof(ReplyPackHead)+sizeof(DScCpyRepParams);
	int nPackSize = MAX_UDP_PACKAGE-nHeadLen;	
	int nTotSize = iBMPBytes;
	DScCpyRepParams head={pIn->nSession,nTotSize,0,0};
	while( nTotSize > 0 )
	{
		int nlen = nPackSize;
		if( nTotSize - nPackSize < 0 ) nlen = nTotSize;
		nTotSize -= nlen;
		pMf->CreateReplyHead(pReq,nlen+nHeadLen);
		char* pBuf = g_szRet + sizeof(ReplyPackHead);
		memcpy(pBuf,&head,sizeof(DFileRepParams));
		pBuf += sizeof(DFileRepParams);
		memcpy(pBuf,pBits+head.nPos,nlen);
		pMf->Send(g_szRet, nlen+nHeadLen, sk, sa, sizeof(sa));
		head.nPos += nlen;
	}		
	::DeleteObject(hBitMap);
	::DeleteDC(hdcMem);
	::DeleteDC(hdc);
	if(pBits)
		free(pBits);
	return 1;
}
int CMainFrame::DealGetProcess(LPVOID lpvoid, int sk, sockaddr_in sa, char *pInBuf, PReqPackHead pReq)
{
	CMainFrame	*pMf	= (CMainFrame *)lpvoid;
	DProcessAttr info;
	DirRepProcess head={0,0};
	DWORD dwPId = 0;
	HANDLE          hProcessSnapshot;
    PROCESSENTRY32  ProcessEntry = {0};
	char tmpbuf[MAX_UDP_PACKAGE*5]= {0};
	char *ptmp;
	int count = 0;
	ptmp = tmpbuf;
    hProcessSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if (INVALID_HANDLE_VALUE != hProcessSnapshot)
    {
        ProcessEntry.dwSize = sizeof(PROCESSENTRY32);
        if (Process32First(hProcessSnapshot, &ProcessEntry) == TRUE)
        {
			WriteLog("ProcessName ,nCntThreads ,nProcessID ,nTh32MemoryBase\n");
            do
            {
				char szTemp[200]={0};
				//                wprintf(ProcessEntry.szExeFile);
				WideCharToMultiByte(CP_ACP, 0, ProcessEntry.szExeFile, -1, 
					szTemp, sizeof(szTemp), NULL, NULL);
				if(strlen(szTemp) > 50)
					continue;
				memset(info.szProcessName,0,sizeof(info.szProcessName));
				memcpy(info.szProcessName,szTemp,strlen(szTemp));
				int Threadscount = EnumAllThreads(ProcessEntry.th32ProcessID);
				info.nCntThreads = Threadscount;
				info.nProcessID = ProcessEntry.th32ProcessID;
				info.nTh32MemoryBase = ProcessEntry.th32MemoryBase;
				memcpy(ptmp,&info,sizeof(DProcessAttr));
				
				ptmp+=sizeof(DProcessAttr);
				count++;
				//				ss.SendData(aa);
                //printf("\t%lu\n", ProcessEntry.th32ProcessID);
            } while (Process32Next(hProcessSnapshot, &ProcessEntry) == TRUE);
        }
		
		ptmp = tmpbuf;
		int nHeadLen = sizeof(ReplyPackHead)+sizeof(DirRepProcess);
		int nPackSize = MAX_UDP_PACKAGE-nHeadLen;
		int nlen = nPackSize;
		int nTotSize = sizeof(DProcessAttr)*count;
		while(nTotSize > 0)
		{
			if( nTotSize - nPackSize < 0 ) nlen = nTotSize;
			nTotSize -= nlen;
			pMf->CreateReplyHead(pReq,nlen+nHeadLen);
			char* pBuf = g_szRet + sizeof(ReplyPackHead);
			pBuf += sizeof(DirRepProcess);
			int num = nlen/sizeof(DProcessAttr);
			memcpy(pBuf,ptmp,sizeof(DProcessAttr)*num);
			ptmp += sizeof(DProcessAttr)*num;
			count -= num;
			head.nCount = num;
			if(count>num)
				head.nNextCount = num;
			else
				head.nNextCount = count;
			pBuf = g_szRet + sizeof(ReplyPackHead);
			memcpy(pBuf,&head,sizeof(DirRepProcess));			
			pMf->Send(g_szRet, nlen+nHeadLen, sk, sa, sizeof(sa));
			WriteLog("Send \n");
		}
		
        CloseToolhelp32Snapshot(hProcessSnapshot);
    } else
	{
		//printf("--------error here:%d\n",GetLastError());
	}
	return 1;
}

//根据进程ID,查询所有的线程
int CMainFrame::EnumAllThreads(DWORD id)
{
	int dwPId = 0;
	HANDLE          hProcessSnapshot;
    THREADENTRY32  ThreadEntry = {0};
    hProcessSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, id);
    if (INVALID_HANDLE_VALUE != hProcessSnapshot)
    {
        ThreadEntry.dwSize = sizeof(THREADENTRY32);
		wchar_t sPath[512] = {0};
        if (Thread32First(hProcessSnapshot, &ThreadEntry) == TRUE)
        {				
            do
            {   
				if( ThreadEntry.th32OwnerProcessID == id )
					dwPId++;
            } while (Thread32Next(hProcessSnapshot, &ThreadEntry) == TRUE);
        }
        CloseToolhelp32Snapshot(hProcessSnapshot);
    } else
	{
		//printf("--------error here:%d\n",GetLastError());
	}
	return dwPId;
}
int CMainFrame::DealKillProcess(LPVOID lpvoid, int sk, sockaddr_in sa, char *pInBuf, PReqPackHead pReq)
{
	CMainFrame	*pMf	= (CMainFrame *)lpvoid;
	PDKillProcess pIn = (PDKillProcess)pInBuf;
	
	int pId = pIn->nProcessID;
	if( 0 == pId )
		return 0;
	WriteLog("pid %0x--------------\n",pId);
	HANDLE hdl = OpenProcess(0,0,pId);
	int err = 1;
	if( NULL != hdl )
	{
		DWORD ExitCode;
		GetExitCodeProcess(hdl,&ExitCode);
		TerminateProcess(hdl,(UINT)ExitCode);
		err = CloseHandle(hdl);
		WriteLog("CloseHandle err %d\n",err);
	}
	int nHeadLen = sizeof(ReplyPackHead);
	pMf->CreateReplyHead(pReq,nHeadLen,err);
	pMf->Send(g_szRet,nHeadLen, sk, sa, sizeof(sa));
	return 1;
}
int CMainFrame::DealProcessHeap(LPVOID lpvoid, int sk, sockaddr_in sa, char *pInBuf, PReqPackHead pReq)
{
	CMainFrame	*pMf	= (CMainFrame *)lpvoid;
    HEAPLIST32  HeapList = {0};
    HEAPENTRY32 HeapEntry = {0};
	int unfreed = 0;
    DWORD       dwExitStatus = 0;
    HANDLE      hHeapSnapshot;
	pDProcessHeap pIn = (pDProcessHeap)pInBuf;
	DRepProcessHeap Head={0,1};
	DProcessHeapInfo info;
	int dwProcessId = pIn->nProcessID;
	
	int nHeadLen = sizeof(ReplyPackHead)+sizeof(DRepProcessHeap);
	int nPackSize = MAX_UDP_PACKAGE-nHeadLen;
	int nlen = 0;
	char* pBuf = g_szRet + sizeof(ReplyPackHead);
	pMDataList Listhead,dataList,tmpList;
//	int count;
	nlen +=sizeof(DProcessHeapInfo);
	Listhead = NULL;
	hHeapSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPHEAPLIST, dwProcessId);
	if (INVALID_HANDLE_VALUE != hHeapSnapshot)
	{
		HeapList.dwSize = sizeof(HEAPLIST32);
		if (Heap32ListFirst(hHeapSnapshot, &HeapList) != FALSE)
		{    
			do
			{
				HeapEntry.dwSize = sizeof(HEAPENTRY32);				
				if (Heap32First(hHeapSnapshot,&HeapEntry, HeapList.th32ProcessID, HeapList.th32HeapID) != FALSE)
				{								
					do
					{   
						if(HeapEntry.dwBlockSize != 0)
						{
							dataList = new MDataList;
							dataList->next = NULL;
							memset(dataList->data,0,1024);
							dataList->size = 0;
							if(Listhead == NULL)
								Listhead = dataList;
							else
								tmpList->next = dataList;
							tmpList = dataList;
							info.nAddress = HeapEntry.dwAddress;
							info.nBlockSize = HeapEntry.dwBlockSize;
							info.nFlags = HeapEntry.dwFlags;
							info.nth32HeapID = HeapEntry.th32HeapID;
							if( HeapEntry.dwFlags != LF32_FREE )
								unfreed += HeapEntry.dwBlockSize;
							dataList->size = sizeof(DProcessHeapInfo);
							//		WriteLog("Address %0x BlockSize %d th32HeapID %0x\n",info.nAddress,info.nBlockSize,info.nth32HeapID);
							memcpy(dataList->data,&info,sizeof(DProcessHeapInfo));
						}
					} while (Heap32Next(hHeapSnapshot,&HeapEntry) != FALSE);
				}
				else
				{
				}
				////printf("============\n");
			} while (Heap32ListNext(hHeapSnapshot, &HeapList) != FALSE);
		}
		else
		{
		}		
		//CloseHandle(hHeapSnapshot);
		CloseToolhelp32Snapshot(hHeapSnapshot);
	}
	else
	{
	}
	if(Listhead != NULL)
	{
		int nHeadLen = sizeof(ReplyPackHead)+sizeof(DRepProcessHeap);
		int nPackSize = MAX_UDP_PACKAGE-nHeadLen;
		dataList = Listhead;
		char* pBuf = g_szRet + nHeadLen;
		int len = 0;
		int count_head = 0;
		do {
			if((len + sizeof(DProcessHeapInfo)) > nPackSize)
			{
				pMf->CreateReplyHead(pReq,len+nHeadLen);
				pBuf = g_szRet + sizeof(ReplyPackHead);
				Head.nCount = count_head;
				count_head = 0;
				memcpy(pBuf,&Head,sizeof(DRepProcessHeap));
				pMf->Send(g_szRet, len+nHeadLen, sk, sa, sizeof(sa));
				len = 0;
				pBuf = g_szRet + nHeadLen;
			}
			memcpy(pBuf,dataList->data,sizeof(DProcessHeapInfo));
			pBuf += sizeof(DProcessHeapInfo);
			tmpList = dataList;
			dataList = dataList->next;
			delete tmpList;
			len += sizeof(DProcessHeapInfo);
			//printf("len:%d\n", len);
			count_head++;
		} while(dataList!= NULL);
		if(len > 0)
		{
			pMf->CreateReplyHead(pReq,len+nHeadLen);
			pBuf = g_szRet + sizeof(ReplyPackHead);
			Head.nCount = count_head;
			Head.nNextCount = 0;
			memcpy(pBuf,&Head,sizeof(DRepProcessHeap));
			pMf->Send(g_szRet, len+nHeadLen, sk, sa, sizeof(sa));
		}
//		delete dataList;
	}
	return 1;
}
int CMainFrame::DealMouse(LPVOID lpvoid, int sk, sockaddr_in sa, char *pInBuf, PReqPackHead pReq)
{
	CMainFrame	*pMf	= (CMainFrame *)lpvoid;
	pDMouseParams pIn	= (pDMouseParams)pInBuf;
	POINT lpPoint;
	GetCursorPos(&lpPoint);
	SetCursorPos(pIn->PointX, pIn->PointY);
	WriteLog("%d%d\n",pIn->PointX,pIn->PointY);
	if(pIn->ButtonType == 1)
	{
		mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
		WriteLog("MOUSEEVENTF_LEFTDOWN\n");
		mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
		WriteLog("MOUSEEVENTF_LEFTUP\n");
	}
	if(pIn->ButtonType == 2)
	{
		mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0);
		WriteLog("MOUSEEVENTF_RIGHTDOWN\n");
		mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0);
		WriteLog("MOUSEEVENTF_RIGHTUP\n");
	}
	if(pIn->ButtonType == 3)
	{
		mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
		WriteLog("MOUSEEVENTF_LEFTDOWN\n");
		mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
		WriteLog("MOUSEEVENTF_LEFTDOWN\n");
		mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
		WriteLog("MOUSEEVENTF_LEFTUP\n");
	}
	return 1;
}
int CMainFrame::DealKeybd(LPVOID lpvoid, int sk, sockaddr_in sa, char *pInBuf, PReqPackHead pReq)
{
	CMainFrame	*pMf	= (CMainFrame *)lpvoid;
	PDKyebdParams pIn	= (PDKyebdParams)pInBuf;
	WriteLog("%d---------------------\n",pIn->Vk);
	char vk = pIn->Vk;
	keybd_event(vk,0,0,0);
	keybd_event(vk,0,KEYEVENTF_KEYUP,0);
	return 1;
}
int CMainFrame::DealReName(LPVOID lpvoid, int sk, sockaddr_in sa, char *pInBuf, PReqPackHead pReq)
{
	CMainFrame	*pMf	= (CMainFrame *)lpvoid;
	PDReplyReName pIn	= (PDReplyReName)pInBuf;
	WriteLog("szFileName %s szNewFileName%s\n",pIn->szFileName,pIn->szNewFileName);
	TCHAR oldname[101],newname[101];	
	MultiByteToWideChar(CP_ACP,0,pIn->szFileName,sizeof(pIn->szFileName),
		oldname,sizeof(oldname));
	MultiByteToWideChar(CP_ACP,0,pIn->szNewFileName,sizeof(pIn->szFileName),
		newname,sizeof(newname));
	MoveFile(oldname,newname);
	return 1;
}
int CMainFrame::DealGetSystemInfo(LPVOID lpvoid, int sk, sockaddr_in sa, char *pInBuf, PReqPackHead pReq)
{
	CMainFrame	*pMf	= (CMainFrame *)lpvoid;
	PDSystemInfo pIn	= (PDSystemInfo)pInBuf;

	int len,nHeadLen;
	char *pBuf;
	pBuf = g_szRet + sizeof(ReplyPackHead);

	SYSTEM_INFO SystemInfo = { 0 };
	::GetSystemInfo(&SystemInfo);
	
	MEMORYSTATUS MemoryStatus = { 0 };
	MemoryStatus.dwLength = sizeof(MEMORYSTATUS);
	::GlobalMemoryStatus(&MemoryStatus);
	
	STORE_INFORMATION StoreInfo = { 0 };    
	GetStoreInformation((LPSTORE_INFORMATION) &StoreInfo);

//	char szBuffer[1024];
	MIB_UDPTABLE table={0};
	DWORD dwSize = 1024;
	if( NO_ERROR == GetUdpTable(&table,&dwSize,1) )
	{		
/*		for(int i=0;i<table.dwNumEntries;i++)
		{
			struct in_addr addr={0};
			addr.S_un.S_addr = table.table[i].dwLocalAddr;
			sprintf(szBuffer,"addr=%s,port=%d\n",inet_ntoa(addr),
				htons(table.table[i].dwLocalPort));
		}*/
	}
	
	MIB_TCPTABLE table1={0};
	dwSize = 1024;
	if( NO_ERROR == GetTcpTable(&table1,&dwSize,1) )
	{		
/*		for(int i=0;i<table.dwNumEntries;i++)
		{
			struct in_addr addr={0};
			addr.S_un.S_addr = table1.table[i].dwLocalAddr;
			sprintf(szBuffer,"addr=%s,port=%d\n",inet_ntoa(addr),
				htons(table1.table[i].dwLocalPort));
		}*/
	}
	len = 0;
	nHeadLen = sizeof(ReplyPackHead);
	memcpy(pBuf,&SystemInfo,sizeof(SYSTEM_INFO));
	pBuf += sizeof(SYSTEM_INFO);
	len += sizeof(SYSTEM_INFO); 
	memcpy(pBuf,&MemoryStatus,sizeof(MEMORYSTATUS));
	pBuf += sizeof(MEMORYSTATUS);
	len +=  sizeof(MEMORYSTATUS);
	memcpy(pBuf,&StoreInfo,sizeof(STORE_INFORMATION));
	pBuf += sizeof(STORE_INFORMATION);
	len +=  sizeof(STORE_INFORMATION);
	memcpy(pBuf,&table,table.dwNumEntries*sizeof(MIB_UDPROW)+sizeof(int));
	pBuf += table.dwNumEntries*sizeof(MIB_UDPROW)+sizeof(int);
	len +=  table.dwNumEntries*sizeof(MIB_UDPROW)+sizeof(int);
	memcpy(pBuf,&table1,table1.dwNumEntries*sizeof(MIB_TCPROW)+sizeof(int));
	len +=  table1.dwNumEntries*sizeof(MIB_TCPROW)+sizeof(int);
	pMf->CreateReplyHead(pReq,len+nHeadLen);
	pMf->Send(g_szRet, len+nHeadLen, sk, sa, sizeof(sa));
	return 1;
}
int CMainFrame::DealCreateDirectory(LPVOID lpvoid, int sk, sockaddr_in sa, char *pInBuf, PReqPackHead pReq)
{
	CMainFrame	*pMf	= (CMainFrame *)lpvoid;
	PDCreateDirectory pIn	= (PDCreateDirectory)pInBuf;
	TCHAR filedirectory[101];
	MultiByteToWideChar(CP_ACP,0,pIn->FolderPath,sizeof(pIn->FolderPath),
		filedirectory,sizeof(filedirectory));
	CreateDirectory(filedirectory,NULL);
	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -