window 在注册表上修改IP 地址

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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值