SOCKET连接代码没有问题,很简单就是
SOCKET CommonConnect()
{
        SOCKET CommonSocket = socket(AF_INET, SOCK_STREAM, 0);
        if(CommonSocket==INVALID_SOCKET) return 0;        struct sockaddr_in LocalAddr;
        LocalAddr.sin_family=AF_INET;
        LocalAddr.sin_port=htons(ServerPort);//ServerPort和ServerAddr都验证过了是合法的
        LocalAddr.sin_addr.S_un.S_addr=inet_addr(ServerAddr);
        
        if(connect(CommonSocket,(PSOCKADDR)&LocalAddr,sizeof(LocalAddr)) != SOCKET_ERROR)
                return CommonSocket;
                
        char szLog[50]={0};
        sprintf(szLog,"GetLastError %d",WSAGetLastError());
        OutputDebugString(szLog)
        flog(szLog);
        closesocket(CommonSocket);
        return 0;//connect error
}在XP下个建立一个监听(listen),这段连接代码放在win7下以SYSTEM权限进行连接就会出错(XP下没问题,win7管理员非管理员都没问题),错误码10013
寻思几天不知道解法,希望大家帮帮忙补充:
我的这个socket连接写在一个dll中,大概过程是这样的
Win7下面的系统服务启动的一个EXE程序,这个程序是SYSTEM权限,在EXE里面调用一个dll,在DllMain的DLL_PROCESS_ATTACH里面调用Rundll32来启动自身的一个线程函数(这么做是因为实在没法在DllMain里面创建线程),这个线程函数负责一切的SOCKET连接,由于Win7的权限继承机制,通过观察确实这个Rundll32启动也是SYSTEM身份,能做很多事,但是确无法进行SOCKET连接了,不知道有没有人碰到过类似的问题过程有点复杂,至于为什么不直接在EXE里面连接而要用dll,是由于其他原因限制,(EXE是系统自带的一个程序,不受我的控制,但它能帮我启动DLL,这是我调试到的一个可利用bug)