📄 mainframe.cpp
字号:
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 + -