大家都知道wpe里面有一个可以直接模拟进程发送数据包的功能, 我现在想实现这个功能.
我已经通过   DuplicateHandle   将目标进程的socket复制到了当前的进程, 
选取了一些目标进程进行测试 
为什么对这个socket进行一些操作,比如说   send,getpeername的时候, 
函数运行始终是成功的, 但是有一些目标进程会崩溃,而有一些则不会. 下面是简单的代码及说明 //前面列举出系统所有句柄,代码从循环这些句柄开始if (pSHinfo->Handles[dwIdx].uIdProcess==目标进程id&&pSHinfo->Handles[dwIdx].Handle==句柄ID)
{
    printf("pid : %d", pSHinfo->Handles[dwIdx].uIdProcess);  //进程ID
    printf("  handle:%d", pSHinfo->Handles[dwIdx].Handle);  //句柄
    printf("  TYPE:%d", pSHinfo->Handles[dwIdx].ObjectType); //句柄的类型
    printf("  access:%x\n", pSHinfo->Handles[dwIdx].pObject);    //根据进程ID,打开进程
    HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,TRUE, pSHinfo->Handles[dwIdx].uIdProcess);
    if(hProcess != INVALID_HANDLE_VALUE)
    {
        HANDLE hObject = NULL;
        //这个函数用处很大,大概的作用就是,复制一个个内核对象的句柄
        //从目标进程中复制一个句柄出来
        if(DuplicateHandle(hProcess, (HANDLE)pSHinfo->Handles[dwIdx].Handle,
                            GetCurrentProcess(), &hObject, SPECIFIC_RIGHTS_ALL, TRUE, 0) != FALSE)
        {
                             //这里已经成功的将目标进程的Handle复制到了hObject
                        char Buff[1024];
                        struct sockaddr_in sa;
                    int len = sizeof(sa);
                   getpeername((SOCKET)hObject, (struct sockaddr *)&sa, &len);
                    sprintf(Buff,"对方IP:%s,端口:%d,SOCKET:%d\n", inet_ntoa(sa.sin_addr),htons(sa.sin_port),hObject);
                     TRACE0(Buff); 
                         //到此,Buff能正确的反映出hObject的远程信息,
                            但随之,目标进程崩溃!!!!!请问为什么?????
                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                                    }
        CloseHandle(hObject);
    }
    CloseHandle(hProcess);
    break;
}
解决了还可以再给分