我试过了, 在本机不能联入外网时(比如输入一个错误网关), 如果用该函数ping 外网IP, 一会该函数成功(返回非0), 一会不成功.
我是用线程循环调用该函数测的.在xp正常.IcmpSendEcho()在win7下可以用吗?BOOL SendPingByIp(char * sIP)
{
HANDLE hIcmpFile;
    unsigned long ipaddr = INADDR_NONE;
    DWORD dwRetVal = 0;
    char SendData[] = "Data Buffer";
    LPVOID ReplyBuffer = NULL;
    DWORD ReplySize = 0;
    ipaddr = inet_addr(sIP); if (ipaddr == INADDR_NONE)
return FALSE;
    
    hIcmpFile = IcmpCreateFile();
    if (hIcmpFile == INVALID_HANDLE_VALUE) {
        return FALSE;
    }        ReplySize = sizeof(ICMP_ECHO_REPLY) + sizeof(SendData);
    ReplyBuffer = (VOID*) malloc(ReplySize);
    if (ReplyBuffer == NULL) {
CloseHandle(hIcmpFile);
        return FALSE;
    }    
    
    
    dwRetVal = IcmpSendEcho(hIcmpFile, ipaddr, SendData, sizeof(SendData), 
        NULL, ReplyBuffer, ReplySize, 6000);
    if (dwRetVal == 0)
{
        free(ReplyBuffer);
CloseHandle(hIcmpFile);
return FALSE;
    } free(ReplyBuffer);
CloseHandle(hIcmpFile);
return TRUE;
}