如何修改wince的网络配置

如何修改wince的网络配置呢?
首先,必须知道网卡驱动名字。在s3c2410上,名字叫“CS8900”,用工具连接上wince查看他的注册表。你将可以得到下面的东西。
[HKEY_LOCAL_MACHINE/Comm/CS8900]
"DisplayName"="CS8900"
"Group"="NDIS"
"ImagePath"="CS8900.dll"

[HKEY_LOCAL_MACHINE/Comm/CS8900/Linkage]
"Route"=hex(7):/
      43,53,38,39,30,30,31,00,00,00,00
上面的hex值其实是:CS89001,同样可以在[HKEY_LOCAL_MACHINE/Comm/CS8900]项下面看到关于CS89001的表述。
[HKEY_LOCAL_MACHINE/Comm/CS89001]
"DisplayName"="CS8900"
"Group"="NDIS"
"ImagePath"="CS8900.dll"

[HKEY_LOCAL_MACHINE/Comm/CS89001/Parms]
"BusNumber"=dword:00000000
"BusType"=dword:00000000
"InterruptNumber"=dword:0000000a
"Sysintr"=dword:0000001a
"DuplexMode"=dword:00000001
"IoBaseAddress"=dword:a7000300
"Transceiver"=dword:00000003
"CardType"=dword:00000001

[HKEY_LOCAL_MACHINE/Comm/CS89001/Parms/TcpIp]
"IpAddress"="192.168.1.109"
"EnableDHCP"=dword:00000000
"LeaseObtainedLow"=dword:6a806780
"AutoInterval"=dword:0000012c
"AutoMask"="255.255.0.0"
"AutoSubnet"="169.254.0.0"
"AutoIP"="0.0.0.0"
"AutoSeed"=dword:00000000
"PrevReqOptions"=hex:/
      07,01,03,06,0f,2c,2e,2f
"T2"=dword:000bae0a
"T1"=dword:0006ac98
"Lease"=dword:000d5930
"LeaseObtainedHigh"=dword:01c84915
"DhcpDNS"=hex(7):/
      31,39,32,2e,31,36,38,2e,31,2e,38,00,00,00,00
"DhcpDefaultGateway"="0.0.0.0"
"DhcpServer"="192.168.1.8"
"DhcpSubnetMask"="255.255.255.0"
"DhcpIPAddress"="192.168.1.63"
"AutoCfg"=dword:00000001
"DefaultGateway"=hex(7):/
      31,39,32,2e,31,36,38,2e,31,2e,38,00,00,00,00
"DNS"=hex(7):/
      31,39,32,2e,31,36,38,2e,31,2e,31,00,00,00,00
"Subnetmask"=hex(7):/
      32,35,35,2e,32,35,35,2e,32,35,35,2e,30,00,00,00,00
"LLInterface"=""
"UseZeroBroadcast"=dword:00000000

内容很多,但是我们一般关心的就只有[HKEY_LOCAL_MACHINE/Comm/CS89001/Parms/TcpIp]下的几个。
   "EnableDHCP"=dword:0
   "DefaultGateway"="192.168.1.1"
   "IpAddress"="192.168.1.100"
   "Subnetmask"="255.255.255.0"
   "DNS"="192.168.1.1"
   "DefaultGateway"=hex(7):/
      31,39,32,2e,31,36,38,2e,31,2e,38,00,00,00,00
"EnableDHCP"--控制DHCP,如果把他的值改为1,那么系统将用DHCP分配IP,设置的IP等信息是没有效果的。也就是自动获取。
如果"EnableDHCP"为0,那么可以通过"IpAddress","Subnetmask","DefaultGateway"等设置网络信息。其他信息如果有需要自己修改。
至于修改注册表的编程也不是难事,在wince中有函数可以帮助你完成这件事情。
RegCreateKeyEx
RegQueryValueEx
RegSetValueEx
RegCloseKey
其中RegSetValueEx函数可以通过不同的宏写如不同类型的值,比如:
REG_SZ
REG_BINARY
REG_DWORD
还有更多的,具体看winnt.h头文件。
已于读取我想就不用说了,自己看看evc的帮助吧。
DHCP自动获取IP的具体信息相信你也从上面的注册表信息看到了,需要就读取一下。
PS:注册表操作还有其他函数,根据自己情况用吧。 


面先贴出我的代码

 

  1.  WCHAR Name[]=_T("CS89001/0");    
  2.  HANDLE m_hFileHandle = CreateFile(_T("NDS0:"), 0, 0, NULL,
  3.   OPEN_EXISTING,  FILE_ATTRIBUTE_NORMAL, (HANDLE) INVALID_HANDLE_VALUE);
  4.  if( m_hFileHandle == INVALID_HANDLE_VALUE )
  5.  {
  6.   //获得网卡名时打开设备错误 
  7.   return;
  8.  }
  9.  //重启网络驱动 
  10.  DeviceIoControl( m_hFileHandle, IOCTL_NDIS_REBIND_ADAPTER, Name, 
  11.    sizeof(Name),   NULL, 0, NULL, NULL );
  12.  CloseHandle( m_hFileHandle );

需要注意的问题:

1.Name是网络接口设备的名字,最后必须添加多一个‘/0’,我测试了一下,必须以2个0结束才可以。

2.DeviceIoControl函数的nInBufferSize 参数是按byte计算,Name是WCHAR ,需要注意。所以我用sizeof计算。

3.不要用DeviceIoControl(...,IOCTL_NDIS_GET_ADAPTER_NAMES,...)这样的代码去读取名字,没有必要,读取出来的名字不仅仅包括网卡的,还包括拨号接口,同步接口等的名字,中间以0间隔,如果不自己做分析,好像DeviceIoControl也不支持直接这样使用,我测试过没有效果。也就是说获取到一系列名字后你依然需要判断那个才是网卡的名字,所以我认为没有必要。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值