我尝试了如下的方法,可是当我send的时候仍然返回错误10038
这是为什么呢??郁闷啊~~希望两位能帮帮我。。多谢拉~~~~
我的email: mysqls@sina.com-------------------------------------------------------
回复人: verybigbug() ( ) 信誉:100 2003-1-20 10:06:04 得分:20
不可以简单的将socket的值利用。应该通过DuplicateHandle进行。进程1:
WSAStartup();
s1 = socket();
connect();进程2:
WSAStartup();
hh = OpenProcess(p1Id);
DuplicateHandle(hh, s1, -1, &s2, PROCESS_ALL_ACCESS, FALSE, DUPLICATE_SAME_ACCESS);
connect(s2);
...注意:
进程2中的s1和p1Id为进程1中的s1值和进程1的进程ID.
这是为什么呢??郁闷啊~~希望两位能帮帮我。。多谢拉~~~~
我的email: mysqls@sina.com-------------------------------------------------------
回复人: verybigbug() ( ) 信誉:100 2003-1-20 10:06:04 得分:20
不可以简单的将socket的值利用。应该通过DuplicateHandle进行。进程1:
WSAStartup();
s1 = socket();
connect();进程2:
WSAStartup();
hh = OpenProcess(p1Id);
DuplicateHandle(hh, s1, -1, &s2, PROCESS_ALL_ACCESS, FALSE, DUPLICATE_SAME_ACCESS);
connect(s2);
...注意:
进程2中的s1和p1Id为进程1中的s1值和进程1的进程ID.
WSADATA wsaData;
DWORD dwProcessID; WSAStartup(MAKEWORD(1, 1), &wsaData);
HWND hWnd = FindWindow("TCliForm", "CliForm");
DWORD dwThreadId = GetWindowThreadProcessId(hWnd, &dwProcessID);
HANDLE hh = OpenProcess(PROCESS_DUP_HANDLE, true, dwProcessID); DWORD s1 = GetSocket();
//GetSocket是我在hook api的dll中写的一个函数,返回需要共享的socket
DuplicateHandle(hh, (HANDLE)s1, (HANDLE)(-1), (LPHANDLE)(&g_socket), PROCESS_ALL_ACCESS, false, DUPLICATE_SAME_ACCESS);
CloseHandle(hh);
或者在你B进程send之前A进程中的socket已经closesocket了。
这样在B进程中复制的socket就没有建立连接,就不会send成功了。
SOCKET s, s1;
int rc; sockaddr_in sd; s1 = socket(AF_INET, SOCK_STREAM, 0);
sd.sin_port = htons(80);
sd.sin_family = 2;
sd.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
rc = connect(s1, (const sockaddr*)&sd, sizeof(sd)); HANDLE hh = OpenProcess(PROCESS_ALL_ACCESS, FALSE, GetCurrentProcessId());
DuplicateHandle(hh, (HANDLE)s1, GetCurrentProcess(), (LPHANDLE)&s, PROCESS_ALL_ACCESS, FALSE, DUPLICATE_SAME_ACCESS);
rc = send(s, "adshf", 4, 0);看一下每个rc的值是不是对的。