WinCE冷啟動自動修改IP

來源:互聯網
上載者:User
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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.