WEB开发网
开发学院软件开发VC 不重起Windows直接更改IP地址 阅读

不重起Windows直接更改IP地址

 2006-07-21 11:10:54 来源:WEB开发网   
核心提示:本文示例源代码或素材下载 注:本文适用于WINDOWS NT/2000/XP/2003源代码运行效果图如下:设置IP地址只需要更改注册表中关于适配器的相应设置,但更改后需要重新启动系统才能生效,不重起Windows直接更改IP地址,而AddIPAddress函数只能添加IP而不是更改当前的IP,我们在Windo

本文示例源代码或素材下载

注:本文适用于WINDOWS NT/2000/XP/2003

源代码运行效果图如下:

设置IP地址只需要更改注册表中关于适配器的相应设置,但更改后需要重新启动系统才能生效,而AddIPAddress函数只能添加IP而不是更改当前的IP,我们在Windows NT/2000界面上操作不需要重新启动就可以生效,那系统到底做了什么额外的工作才使IP设置直接生效呢?笔者通过跟踪explorer.exe中API的调用发现在netcfgx.dll中调用了dhcpcsvc.dll中一个未公开的API:DhcpNotifyConfigChange,现将不重新启动WINDOWS直接更改IP地址的详细方法介绍如下:

一、获取适配器名称

这里指的适配器名称要区别于适配器描述,比如我的一块网卡,适配器描述是:Realtek RTL8139(A) PCI Fast Ethernet Adapter,适配器名称为:{66156DC3-44A4-434C-B8A9-0E5DB4B3EEAD}。获取适配器名称的方法有多种:

1.1 调用IP helper API取得适配器名称

ULONG ulAdapterInfoSize = sizeof(IP_ADAPTER_INFO);
IP_ADAPTER_INFO *pAdapterInfoBkp, *pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
if( GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == ERROR_BUFFER_OVERFLOW ) // 缓冲区不够大
{
  delete pAdapterInfo;
  pAdapterInfo = (IP_ADAPTER_INFO*)new char[ulAdapterInfoSize];
  pAdapterInfoBkp = pAdapterInfo;
}
if( GetAdaptersInfo(pAdapterInfo, &ulAdapterInfoSize) == ERROR_SUCCESS )
{
  do{ // 遍历所有适配器
    if(pAdapterInfo->Type == MIB_IF_TYPE_ETHERNET)  // 判断是否为以太网接口
    {
      // pAdapterInfo->Description 是适配器描述
      // pAdapterInfo->AdapterName 是适配器名称
    }
    pAdapterInfo = pAdapterInfo->Next;
  }while(pAdapterInfo);
}
delete pAdapterInfoBkp;

1.2 读取注册表取得适配器名称

1 2 3  下一页

Tags:Windows 直接 更改

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接