加入收藏 | 设为首页 | 会员中心 | 我要投稿 网站开发网_安阳站长网 (https://www.0372zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

在程序中修改IP win7 winXP(参考1)

发布时间:2021-01-09 17:44:27 所属栏目:站长百科 来源:网络整理
导读:副标题#e# https://blog.csdn.net/bbdxf/article/details/7548443 Windows下程序修改IP的三种方法 ????以下讨论的平台依据是Window?XP?+?SP1,?不考虑Windows其它版本的兼容性问题,?但对NT系列的系统,?理论上是通用的.? 方法一:?网卡重启? ????更改Windows网

/*?GetRegistryProperty是对SetupDiGetDeviceRegistryProperty封装***************/?
BOOL?GetRegistryProperty(HDEVINFO??DeviceInfoSet,?
?????????????????????????PSP_DEVINFO_DATA??DeviceInfoData,?
?????????????????????????ULONG?Property,?
?????????????????????????LPTSTR*?Buffer,?
?????????????????????????PULONG?Length)?
{?
????while?(!SetupDiGetDeviceRegistryProperty(?
????????DeviceInfoSet,?
????????DeviceInfoData,?
????????Property,?
????????NULL,?
????????(PBYTE)(*Buffer),?
????????*Length,?
????????Length?
????????))?
????{?
????????if?(GetLastError()?==?ERROR_INSUFFICIENT_BUFFER)?{?
????????????if?(*(LPTSTR?*)Buffer)??
????????????????LocalFree(*(LPTSTR?*)Buffer);?
????????????*Buffer?=?(LPTSTR)LocalAlloc(LPTR,?*Length);?
????????}else?{?
????????????return?FALSE;?
????????}?????????????
????}?
????return?TRUE;?
}?


/*?m_Adapter的数据结构?*/?
typedef?struct?adapter_info_s?{?
????char?name[NAME_LEN];????????/*?内部设备名,?UUID的字符串形式?*/?
????char?desc[NAME_LEN];????????/*?网卡描述?*/?
????char?driver[NAME_LEN];????????/*?网卡在注册表中的位置,?如{4D36E972-E325-11CE-BFC1-08002BE10318}011??
????实际完整的键名为SystemCurrentControlSetControlClass{4D36E972-E325-11CE-BFC1-08002BE10318}011??
????该键包含的内容与SetupDiGetDeviceRegistryProperty得到的设备属性基本相同?
????如NetCfgInstanceId即为内部设备名?DriverDesc为设备描述????*/?
????int?index;?
}adapter_info_t;?
?????


/*****************************************************************************?
?用何名称区分不同的网卡?
?有如下名称可供选择?
????本地连接名,?这是系统使用的方法,?调用的是netman.dll中的未公开函数HrLanConnectionNameFromGuidOrPath(其原型笔者正在调试之中,?成功之后会另行撰文); 其实也可从注册表中获得HKLMSystemCurrentControlSetControlNetwork{4D36E972-E325-11CE-BFC1-08002BE10318}{97EFDAD8-EB2D-4F40-9B07-0FCD706FCB6D}ConnectionName?
????网卡类型描述?
????设备友好名????????它与网卡类型描述基本相同,?当存在同种类型的网卡,?它会加#n(n?=?2,?3,?4...)以示区分?
????如本程序中笔者即以设备友好名区分网卡?
?*****************************************************************************/?

/*?重启网卡的过程************************************************************/?
????k?=?pAdapter->GetCurSel();????????/*?m_Adapter[k]即当前网卡?*/?
????if?(SetupDiEnumDeviceInfo(m_hDevInfo,?m_Adapter[k].index?,&DeviceInfoData))?
????{?
????????hCursor?=?SetCursor(LoadCursor(NULL,?IDC_WAIT));?????????
????????ChangeDeviceState(m_hDevInfo,?&DeviceInfoData,?DICS_DISABLE);????/*?禁用网卡?*/?????????
????????ChangeDeviceState(m_hDevInfo,?DICS_ENABLE);????/*?启用网卡?*/?????????
????????/*?重启网卡,?一般情况下,?以下命令相当于前两命令的组合.?但我仍建议使用前者?*/?????
????????//????ChangeDeviceState(m_hDevInfo,?DICS_PROPCHANGE);?
????????SetCursor(hCursor);?????
????}?

/*?扫尾工作?*/?
????SetupDiDestroyDeviceInfoList(m_hDevInfo);?

(编辑:网站开发网_安阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!