|
/*?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);?
(编辑:网站开发网_安阳站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|