其实根据我的实践,在wince下面重启网卡其实十分简单,直接把驱动程序和网卡分离然后再绑定一次就好了。怎么绑定呢。就是一个函数DeviceIoControl和底层通信下。

方法1 :把第二个参数设为IOCTL_NDIS_REBIND_ADAPTER。直接分离和绑定

方法2 :把第二个参数设为IOCTL_NDIS_UNBIND_ADAPTER分离,然后再IOCTL_NDIS_BIND_ADAPTER绑定也能达到相同的效果。

我测试用的平台是X86的wince5.0。当然用DeviceIoControl的第一个参数需要获取设备的句柄 :

hNdis = CreateFile(DD_NDIS_DEVICE_NAME, GENERIC_READ | GENERIC_WRITE,

FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_ALWAYS,

0, NULL);

其实wince对网卡的控制函数做的已经不错了。用DeviceIoControl后面第二个参数带IOCTL_NDIS_GET_ADAPTER_NAMES的话很容易获取到网卡的名字,可以用来遍历网卡。如果照我所说的方法,编译出现问题,你可能没包含ntddndis.h这个头文件。

//

///WinCE下重新设置IP地址无需重新启动

//

#include

bool SetIpAddress(CString m_strIp,CString m_strMask,CString m_strGateWay)

{

//获得网卡的设备名

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 )

{

MessageBox(NULL,_T("获得网卡名时打开设备错误"),NULL,0);

return false;

}

// Get list of adapter names

if (!DeviceIoControl(m_hFileHandle,

IOCTL_NDIS_GET_ADAPTER_NAMES,

NULL,0,

Names,MAX_PATH,&bytes,NULL))

{

MessageBox(NULL,_T("获得网卡名错误"),NULL,0);

return false;

}

DWORD len = wcslen(Names);

Names[len] = 0;

Names[len+1] = 0;

CString strKeyName;

strKeyName.Format(_T("Comm\\%s\\Parms\\TCPIP"),Names);

//打开注册表对网卡IP信息对应子健进行修改

HKEY   hkey;

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,strKeyName,0,KEY_WRITE,&hkey)   !=   ERROR_SUCCESS)

{

MessageBox(NULL,TEXT("打开注册表错误"),NULL,0);

return false;

}

DWORD   value;

value   =   0;

WCHAR buffer[50];

//set   EnableDHCP

if(RegSetValueEx(hkey,TEXT("EnableDHCP"),0,REG_DWORD,(const   unsigned   char   *)&value,sizeof(DWORD))   !=   ERROR_SUCCESS)

MessageBox(NULL,TEXT("关闭自动获得IP错误"),NULL,0);

//set   ip   address

memset(buffer,0,100);

memcpy(buffer,m_strIp.GetBuffer(0),m_strIp.GetLength()*2);

if(RegSetValueEx(hkey,TEXT("IpAddress"),0,REG_MULTI_SZ,(const   unsigned   char   *)buffer, m_strIp.GetLength()*2+2) !=   ERROR_SUCCESS)

MessageBox(NULL,TEXT("设置IP错误"),NULL,0);

//set   subnet   mask

memset(buffer,0,100);

memcpy(buffer,m_strMask.GetBuffer(0),m_strMask.GetLength()*2);

if(RegSetValueEx(hkey,TEXT("SubnetMask"),0,REG_MULTI_SZ,(const   unsigned   char   *)buffer, m_strMask.GetLength()*2+2) !=   ERROR_SUCCESS)

MessageBox(NULL,TEXT("设置子网掩码错误"),NULL,0);

//set   gateway

memset(buffer,0,100);

memcpy(buffer,m_strGateWay.GetBuffer(0),m_strGateWay.GetLength()*2);

if(RegSetValueEx(hkey,TEXT("DefaultGateway"),0,REG_MULTI_SZ,(const   unsigned   char   *)buffer, m_strGateWay.GetLength()*2+2) !=   ERROR_SUCCESS)

MessageBox(NULL,TEXT("设置网关错误"),NULL,0);

RegFlushKey(hkey);

RegCloseKey(hkey);

// 重启网卡,不用机器热启动

HANDLE hNdis = CreateFile(_T("NDS0:"), 0, 0, NULL,

OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,

(HANDLE) INVALID_HANDLE_VALUE);

if( hNdis == INVALID_HANDLE_VALUE )

{

MessageBox(NULL,_T( "重启网络驱动时打开设备错误"),NULL,0);

return false;

}

// Send the device command.

if (!DeviceIoControl( hNdis, IOCTL_NDIS_REBIND_ADAPTER,

Names, _tcslen( Names) + sizeof( TCHAR ),    // buf contains the name of the

NULL, 0, NULL, NULL ) )

{

MessageBox(NULL,_T( "重启网络驱动错误"),NULL,0);

}

CloseHandle( hNdis );

return true;

}

需注意:1 使用标准SDK的朋友,可能用到的头文件有:pkfuncs.h,toolhelp.h,lss.h,自己需要到你的WINCE500目录下搜索这几个头文件;2 你的WINCE工程目录输出若不是debug版,上面头文件可能使用有错误,使用Release版将上面函数封装成一个静态库使用。

wince java_Wince之旅——设备控制(重启网卡为例)相关推荐

  1. freebsd重启网卡命令

    freebsd重启网卡命令 可以让修改过的配置立即生效: /etc/rc.d/netif restart 转载于:https://blog.51cto.com/lygdhl/292299

  2. Ubuntu14.04重启网卡不生效

    Ubuntu14.04重启网卡不生效 MAY 28TH, 2014 | COMMENTS Stopping or restarting the networking job is not suppor ...

  3. Ubutun重启网卡

    一.network 利用root帐户 # service network restart 或者/etc/init.d/networking restart 二.ifdown/ifup # ifdown ...

  4. bt5重启网卡命令_Linux文件的常用操作命令

    linux文件操作常用指令 1.系统命令 runlevel # 查看当前的运行级别 systemctl status firewalld # 开启网络服务功能 stop # 关闭 restart # ...

  5. bt5重启网卡命令_BackTrack 5 简单网络配置命令

    自动获取IP dhclient eth1 临时设置ip地址 ifconfig eth0 192.168.1.112/24 设置IP和子网掩码 route add default gw 192.168. ...

  6. RHEL5.X 重启网卡出现./network-functions: line 78: .: ifcfg-eth0: file not found

    错误信息: 红帽RHEL5.5系统,重启网卡报错 [root@localhost network-scripts]# service network restart Shutting down int ...

  7. Linux重启网卡的方法

    重启网卡的几种方法: 一.network 利用root帐户 # service network restart 二.ifdown/ifup # ifdown eth0 # ifup eth0 三.if ...

  8. linux重启网卡的命令行,linux系统重启网卡命令

    关于win10系统开机总是要禁用重启网卡才能联网如何解决就为大家介绍到这边了,有遇到同样情况的用户们可以采取上面的方法步骤来解决.问题2已知win7下不需要删除qos协议,在跑无盘模式下以前最好不要安 ...

  9. Linux查看网卡,重启网卡,查看网络数据的方法

    一.查看服务器上有几个网卡以及其基本信息: ifconfig 二.修改网卡或者DNS参数:用setup界面. 三.重启网卡的几种方法: 1.利用root帐户 # service network res ...

最新文章

  1. 网线传输速度测试_弱电工程CAT5eCAT6CAT6aCAT7网线怎么选择
  2. 7 年“键盘手”没在意!某程序员手疼查出骨肿瘤,已让骨头成了“豆腐渣”
  3. 一线城市中高端人才月薪超 2 万,电子通信行业应届生薪资涨幅最高
  4. 什么?欧洲也有个恩智浦杯?
  5. 细数人体十大最“无用”的器官。
  6. 《第一行代码》学习笔记18-广播接收器Broadcast_Receiver(1)
  7. AI会率先在汽车、安全和金融领域落地!不服来辩 | AI科技评论
  8. React Native中pointerEvent属性
  9. MySQL 表一列逗号分隔字段,按逗号切割
  10. SpringMVC配置静态资源加载, 中文乱码处理,注解驱动
  11. 简洁的个人导航主页API网站源码 随机背景图
  12. PowerDesigner模型分类
  13. WLAN安全问题详解
  14. 数字图像处理(一) 绪论
  15. mysql必知必会学习笔记
  16. mysql中like,limit,union及union all查询
  17. 工地物资出入库管理软件系统
  18. 独自封装windows 10系统详细教程(三)
  19. jmeter压力测试报告
  20. Django的defer和only方法详解

热门文章

  1. ADempiere3.6.0LTS - 创建国家地区城市(基于Ubuntu Desktop 12.04 LTS)
  2. android布局属性详解(转)
  3. DP--POJ 2241
  4. (转)也谈设计模式,实例票据打印 解析 Decorator
  5. 关于Struts+Spring+Hibernate的理解
  6. TDL(HDU-6641)
  7. C++语言基础 —— 函数
  8. 28 PP配置-生产车间控制-工序-定义报工屏幕默认值
  9. linux5.5救援模式,RHEL5救援模式简介RescueModeinRHEL5.PDF
  10. ae saber插件_【AE插件】 用于做动画制作/设计的五个免费插件 非常好用