主题 : 求助:如何在Windows CE下面修改以太口的IP地址 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 81754
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
贡献值: 0 点
综合积分: 2 分
注册时间: 2012-11-13
最后登录: 2012-11-15
楼主  发表于: 2012-11-13 17:49

 求助:如何在Windows CE下面修改以太口的IP地址

平台:MINI 2440
系统:Windows CE6.0
问题描述:代码如下,之前在CE5.0下是能够正常使用的,而现在虽然能够通过修改注册表的方式修改IP地址,但是修改地址后调用DeviceIoControl函数来重启网卡失败;代码的返回值为9,也就是在REBIND的时候出错了。
初步分析:在创建了句柄后,使用DeviceIoControl函数获取网卡名时获取到的不是网卡的名字DM9CE1,而是另一个连接的名字USB Cable,可能正因为这个原因导致了后面对USB Cable做rebind的操作失败;
想要获得的帮助:这种在系统存在多个网络连接的情况下应该怎么对指定的网卡进行REBIND的操作呢?谢谢大家了。

                    //获得网卡的设备名
    WCHAR Names[50];
    DWORD bytes;
    HANDLE m_hFileHandle = CreateFile(_T("NDS0:"), 0, 0, NULL,
        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
        (HANDLE) INVALID_HANDLE_VALUE);
    
    if( m_hFileHandle == INVALID_HANDLE_VALUE )
    {
        //获得网卡名时打开设备错误
        return 1;
    }
    
    // Get list of adapter names
    if (!DeviceIoControl(m_hFileHandle,
        IOCTL_NDIS_GET_ADAPTER_NAMES,
        NULL,0,
        Names,MAX_PATH,&bytes,NULL))
    {
        //获得网卡名错误
        CloseHandle(m_hFileHandle);
        return 2;
    }
    MessageBox(NULL, Names, L"dll", MB_OK);        //此处输出的网卡名为USB Cable,感觉找到的不是以太网卡
    CloseHandle(m_hFileHandle);
    

    //因为网卡实际名为DM9CE1,因此下面的修改和重启操作都使用的Names2这个数组来存放的网卡名
    WCHAR Names2[50] = _T("DM9CE1");
    
    DWORD len = wcslen(Names2);
    Names2[len] = 0;
    Names2[len+1] = 0;
    
    //修改IP地址、掩码、网关等,此处省略,因为可以看到这些信息是成功设置了的

    ……………………
    
    // 重启网卡,不用机器热启动
    HANDLE hNdis = CreateFile(_T("NDS0:"), 0, 0, NULL,
        OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
        (HANDLE) INVALID_HANDLE_VALUE);

    if( hNdis == INVALID_HANDLE_VALUE )
    {
        //重启网络驱动时打开设备错误
        return 8;
    }
    
    // Send the device command.
    //调用DeviceIoControl来重启网卡就出现问题,感觉是重启的操作并没有对网卡做这个操作,因为上面返回的信息是
           //USB连接,不知道是不是系统上另外建立了一个基于USB的连接的原因。
    
    BOOL retValue = DeviceIoControl( hNdis, IOCTL_NDIS_REBIND_ADAPTER,
        Names2, _tcslen( Names2) + sizeof( TCHAR ),    // buf contains the name of the
        NULL, 0, NULL, NULL );
    
    if (!retValue)
    {
        //重启网络驱动错误
        CloseHandle( hNdis );
        //return err_code;
        return 9;
    }

    //这种有多个连接的情况该怎么处理呢?怎么样来实现对网卡的重启呢?

请大家帮帮忙啊,后天就要交货了,现在突然出现了这个问题。