wince 修改dns_如何修改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:注册表操作还有其他函数,根据自己情况用吧。

面先贴出我的代码

WCHARName[]=_T("CS89001/0");

HANDLEm_hFileHandle = CreateFile(_T("NDS0:"), 0, 0, NULL,

OPEN_EXISTING,  FILE_ATTRIBUTE_NORMAL, (HANDLE) INVALID_HANDLE_VALUE);

if( m_hFileHandle == INVALID_HANDLE_VALUE )

{

//获得网卡名时打开设备错误

return;

}

//重启网络驱动

DeviceIoControl( m_hFileHandle, IOCTL_NDIS_REBIND_ADAPTER, Name,

sizeof(Name),   NULL, 0, NULL, NULL );

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、付费专栏及课程。

余额充值