window 在注册表上修改IP 地址

来源:互联网 发布:java神奇的海螺 编辑:程序博客网 时间:2024/05/16 05:07
1.IP地址设置栏,  自动获得IP地址的选项关联的是window 系统注册表 EnableDHCP , 为1是自动获取,0就是手动设置.



ip地址为自动获取时,IPAddress,SubnetMask,DefaultGateway 都为空.

DhcpIPAddress

Dhcpxxxxxxx不为空.

ip地址为手动设置时,IPAddress,SubnetMask,DefaultGateway 为对应设置的值,DhcpIPAddress没有这样的键值.



2.关于设置DSN服务器的问题:

自动获取和手动设置DSN服务器地址的选项 和注册表里面的NameServer相关联

NameServer为空时,代表是自动获取DSN服务器

NameServer为不为空时,代表就是备选的DSN服务器.



修改对应的ip后,必须要重启网卡才能使ip生效,因为发送通知window的函数无效,只能通过控制网卡来生效IP地址


BOOL CMyDlg::ChangeAdapterStatus(LPCTSTR AdapterDeviceDesc, int Flag)//Flag =DICS_DISABLE-->禁用网络
{                                                                          //Flag =DICS_ENABLE--->恢复网络
 if (INVALID_HANDLE_VALUE == (hDevInfo =
        SetupDiGetClassDevs(NULL,NULL,0,
        DIGCF_PRESENT|DIGCF_ALLCLASSES)))
    {
         printf("GetClassDevs");
    }

    DWORD i;
    SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
 unsigned char *guid[4]={0};
    char DeviceName[200]={0};
 wchar_t str[100]={0};
 
 int size=100;
 DWORD DataT;
 unsigned char *buffer=NULL;
 DWORD sz=0;

    for (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData);i++)
    {
  //DeviceInfoData.ClassGuid="{4D36E972-E325-11CE-BFC1-08002BE10318}";
  StringFromGUID2(DeviceInfoData.ClassGuid,str,size);
  
  char temp[100]={0};
  char Rtl[]="{4D36E972-E325-11CE-BFC1-08002BE10318}";
  for(int j=0;str[j]!='\0';j++)
  {
   temp[j]=(char)str[j];
  }

  if(strcmp(temp,Rtl)==0)
  {
   LPTSTR buffer=NULL ;
   DWORD buffersize=0 ;

   while(!SetupDiGetDeviceRegistryProperty(hDevInfo,&DeviceInfoData,\
   SPDRP_DEVICEDESC,&DataT, (PBYTE)buffer,buffersize,&buffersize))
   {
    if(GetLastError()==ERROR_INVALID_DATA)
    {
     break ;
    }
    else if(GetLastError()==ERROR_INSUFFICIENT_BUFFER)
    {
     if(buffer)
      LocalFree(buffer);
     buffer=(LPTSTR)LocalAlloc(LPTR,buffersize);
    }
    else
    {
     SetupDiDestroyDeviceInfoList(hDevInfo);
     return FALSE ;
    }
   }
   if(GetLastError()==ERROR_INVALID_DATA)
    continue ;

   if(strcmp(buffer,AdapterDeviceDesc)==0)
   {
    if (StateChange(Flag,i,hDevInfo))
    {
     break;
    }
    else
    {
     CString temp="对";
     temp+=AdapterDeviceDesc;
     temp+="的操作失败!";
     AfxMessageBox(temp);
     return FALSE;
    }
   }
  }
    }
 return TRUE;
}



0 0