WinCE冷启动自动修改IP

原创 2007年09月25日 09:42:00
include   <winioctl.h>
#include   <ntddndis.h>

void main()
{
 CString m_strIp,m_strMask,m_strGateWay,m_strServerIP;
 DWORD m_dwServerPort = 0;
 FILE * fp;
 if ((fp = fopen("//Flash Disk//IP.txt","r")) == NULL)//读取存卡中的配置文件
 {
  MessageBox(NULL,_T("打开Ip.txt文件失败"),NULL,0);
  return;
 }
 char buf[MAX_PATH];
 memset(buf,0,MAX_PATH);
 fscanf(fp,"%s",buf);
 fclose(fp);
 char * p = buf;

//读取IP地址
 while (*p && *p !=',')
 {
  m_strIp += *p++;
 }
 p++;

//读取子网掩码

 while (*p && *p !=',')
 {
  m_strMask += *p++;
 }
 p++;

//读取网关
 while (*p && *p !=',')
 {
  m_strGateWay += *p++;
 }
 p++;

//读取服务器IP

 while (*p && *p !=',')
 {
  m_strServerIP += *p++;
 }
 p++;

//读取服务器端口
 while (*p && *p !=',')
 {
  m_dwServerPort *= 10;
  m_dwServerPort += (*p++ -'0');
 }

 //获得网卡的设备名
 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;
 }
 
 // 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;
 }
 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;
 }
    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;
 }
 
 // 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 );

//下面为把服务器的IP和端口存入注册表

 HKEY hOpenKey;
 DWORD dwOpenStyle;
 long lResult = 0;

 LPCTSTR keyName = L"MySoftware//CEClient";
 lResult = RegCreateKeyEx(HKEY_CURRENT_USER,keyName,0,L"",0,0,NULL,&hOpenKey,&dwOpenStyle);
 ASSERT(lResult == ERROR_SUCCESS);
 
    //write host
 lResult = RegSetValueEx(hOpenKey, L"host",0,REG_SZ,(BYTE *)m_strServerIP.GetBuffer(0),m_strServerIP.GetLength() * 2);
 ASSERT(lResult == ERROR_SUCCESS);

 //write port
 lResult = RegSetValueEx(hOpenKey, L"port",0,REG_SZ,(BYTE *)&m_dwServerPort,sizeof(m_dwServerPort));
 ASSERT(lResult == ERROR_SUCCESS);

 RegCloseKey(hOpenKey);
 

附:IP.txt文件内容如下:

10.18.3.103,255.255.0.0,10.18.3.1,10.18.3.191,8062

 

wince2416 更改IP不重启系统

// if(result1!=TRUE) // return -1; #if 1 CString m_strIp=_T("192.168.1.104"); CString m_strMask=...
  • SVS4414
  • SVS4414
  • 2016年12月06日 16:55
  • 159

Wince中修改IP地址而无需重启

namespace Utitlity.Windows { using System; using System.Runtime.InteropServices; using M...

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

#include bool SetIpAddress(CString m_strIp,CString m_strMask,CString m_strGateWay){ //获得网卡的设备名 WCHAR...

WinCE下冷启动程序自动安装<装载>

http://hi.baidu.com/yzyseal/blog/item/303a27fe090993225d60086b.html 为了避免冷启后频繁安装应用程序和环境包,想到冷却后保存系统或冷...
  • JUNGOU1
  • JUNGOU1
  • 2012年04月15日 14:23
  • 801

8051-stc冷启动自动下载线原理及DIY

什么是自动冷启? 正常情况下,要想给STC单片机下载程序,必须在下载软件发送下载命令之后再给STC单片机上电(如果之前已经上电,就要断电再上电),这样STC单片机才能进入到下载状态,这是STC定...

Wince中修改IP地址而无需重启

namespace Utitlity.Windows { using System; using System.Runtime.InteropServices; usi...
  • lxy866
  • lxy866
  • 2013年01月08日 13:21
  • 1143

Android冷启动过程培训文档

  • 2014年09月20日 15:18
  • 1.6MB
  • 下载

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

#include bool SetIpAddress(CString m_strIp,CString m_strMask,CString m_strGateWay){ //获得网卡的设备名 WCHAR...

通过注册表修改WINCE系统IP参数

紧跟《注册表中RegSetValueEx用法》文章,自己写了一个测试程序,用到的注册表函数有: RegCreateKeyEx、RegSetValueEx、RegFlushKey、RegCloseKe...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:WinCE冷启动自动修改IP
举报原因:
原因补充:

(最多只允许输入30个字)