WinCE冷启动自动修改IP
来源:互联网 发布:如何做程序员 编辑:程序博客网 时间:2024/05/17 22:59
#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
- WinCE冷启动自动修改IP
- WinCE下冷启动程序自动安装<装载>
- wince在CF卡上实现冷启动自动保存注册表(Windows CE5.0)
- wince在CF卡上实现冷启动自动保存注册表(Windows CE5.0)
- IP自动修改Bat
- 自动修改ip地址
- 通过注册表修改WINCE系统IP参数
- 通过注册表修改WINCE系统IP参数
- WinCE下面的关机,重新启动和冷启动
- 批处理 自动修改 IP 地址
- 批处理自动修改 IP 地址
- 《原创》 IP自动修改器
- 自动修改IP的脚本
- 冷启动
- Wince中修改IP地址而无需重启
- Wince中修改IP地址而无需重启
- Wince中修改IP地址而无需重启
- -------------------MC1000 下冷启动后自动安装程序-------------------------------
- JSTL 入门: 表达式语言
- Java语言中的IO系统
- 弹出提示要输入密码
- 利用数据库复制技术实现数据同步更新
- 利用 Oracle 10g 技能学习 DB2 9.1 for Linux, UNIX and Windows
- WinCE冷启动自动修改IP
- JMF和MIDI冲突的解决办法
- 向系统发送英文汉字混合消息的函数void SendKeys(char * str)
- 页面加载进度条..
- 信息化名词注解:BPR
- VSS使用
- MySQL数据库备份
- servlet_image
- MS SQLServer数据库开发常用汇总(陆续添加..)