1.重启windows网卡命令

rem 禁用网卡
netsh interface set interface 本地连接 disabled
rem 启用网卡

netsh interface set interface 本地连接 enabled

2.根据相关信息作出如下修改

rem 禁用网卡
netsh interface set interface 以太网 disabled
rem 启用网卡

netsh interface set interface 以太网 enabled

三、以下是网上找到的C++代码,

调试OK,需要管理员模式,requireAdministrator (/level='requireAdministrator'),不知道原文地址了,着时尴尬

方法一,VS2015 ANSI

  1. // lan2.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include <stdio.h>
  5. #include <windows.h>
  6. #include <Setupapi.h>
  7. #include <objbase.h>
  8. #pragma comment(lib, "Setupapi.lib")
  9. void EnumDevices(HDEVINFO hDevInfo)
  10. {
  11. SP_DEVINFO_DATA DeviceInfoData = { sizeof(SP_DEVINFO_DATA) };
  12. LPOLESTR guid;
  13. char devName[128];
  14. char instanceId[128];
  15. for (int i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++)
  16. {
  17. StringFromCLSID(DeviceInfoData.ClassGuid, &guid);
  18. SetupDiClassNameFromGuid(&DeviceInfoData.ClassGuid, devName, 128, NULL);
  19. //printf("%s\n", devName);
  20. ;       if (!strcmp(devName, "Net"))
  21. {
  22. SetupDiGetDeviceInstanceId(hDevInfo, &DeviceInfoData, instanceId, 128, NULL);
  23. //printf("instanceId1:%s\n", instanceId);
  24. if (!strncmp(instanceId, "PCI", 3))
  25. {
  26. //wprintf(L"guid:%s\n", guid);
  27. //  printf("devName:%s\n", devName);
  28. //  printf("instanceId2:%s\n", instanceId);
  29. SP_PROPCHANGE_PARAMS params = { sizeof(SP_CLASSINSTALL_HEADER) };
  30. params.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
  31. params.Scope = DICS_FLAG_CONFIGSPECIFIC;
  32. <span style="color:#ff0000;">                params.StateChange = DICS_DISABLE;
  33. </span><span style="color:#33ff33;">                //params.StateChange = DICS_ENABLE;
  34. </span>             params.HwProfile = 0;
  35. SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData, (SP_CLASSINSTALL_HEADER*)¶ms, sizeof(SP_PROPCHANGE_PARAMS));
  36. SetupDiChangeState(hDevInfo, &DeviceInfoData);
  37. }
  38. }
  39. CoTaskMemFree(guid);
  40. }
  41. }
  42. int main(int argc, char* argv[])
  43. {
  44. HDEVINFO hDevInfo = INVALID_HANDLE_VALUE;
  45. hDevInfo = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_PRESENT | DIGCF_ALLCLASSES);
  46. if (INVALID_HANDLE_VALUE == hDevInfo)
  47. return GetLastError();
  48. EnumDevices(hDevInfo);
  49. SetupDiDestroyDeviceInfoList(hDevInfo);
  50. return 0;
  51. }

UNICODE mode

  1. // lan2.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include <stdio.h>
  5. #include <windows.h>
  6. #include <Setupapi.h>
  7. #include <objbase.h>
  8. #pragma comment(lib, "Setupapi.lib")
  9. int main(int argc, char* argv[])
  10. {
  11. HDEVINFO hDevInfo = INVALID_HANDLE_VALUE;
  12. hDevInfo = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_PRESENT | DIGCF_ALLCLASSES);
  13. if (INVALID_HANDLE_VALUE == hDevInfo)
  14. return GetLastError();
  15. //EnumDevices(hDevInfo);
  16. SP_DEVINFO_DATA DeviceInfoData = { sizeof(SP_DEVINFO_DATA) };
  17. LPOLESTR guid;
  18. wchar_t devName[128];
  19. wchar_t instanceId[128];
  20. for (int i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &DeviceInfoData); i++)
  21. {
  22. StringFromCLSID(DeviceInfoData.ClassGuid, &guid);
  23. SetupDiClassNameFromGuid(&DeviceInfoData.ClassGuid, devName, 128, NULL);
  24. // printf("%s\n", devName);
  25. if (!wcscmp(devName, _T("Net")))
  26. {
  27. SetupDiGetDeviceInstanceId(hDevInfo, &DeviceInfoData, instanceId, 128, NULL);
  28. //printf("instanceId1:%s\n", instanceId);
  29. if (!wcsncmp(instanceId, _T("PCI"), 3))
  30. {
  31. //wprintf(L"guid:%s\n", guid);
  32. //  printf("devName:%s\n", devName);
  33. //  printf("instanceId2:%s\n", instanceId);
  34. SP_PROPCHANGE_PARAMS params = { sizeof(SP_CLASSINSTALL_HEADER) };
  35. params.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
  36. params.Scope = DICS_FLAG_CONFIGSPECIFIC;
  37. <span style="color:#ff0000;">                // params.StateChange = DICS_DISABLE;
  38. </span><span style="color:#009900;">                params.StateChange = DICS_ENABLE;
  39. </span>             params.HwProfile = 0;
  40. SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData, (SP_CLASSINSTALL_HEADER*)¶ms, sizeof(SP_PROPCHANGE_PARAMS));
  41. SetupDiChangeState(hDevInfo, &DeviceInfoData);
  42. }
  43. }
  44. CoTaskMemFree(guid);
  45. }
  46. SetupDiDestroyDeviceInfoList(hDevInfo);
  47. return 0;
  48. }

方法二.VS2015 UNICODE

SetupDiCallClassInstaller函数需要编译64位程序运行64位系统

  1. // LAN.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. #include <windows.h>
  5. #include <SetupAPI.h>
  6. #include <stdio.h>
  7. #include <tchar.h>
  8. #define ERROR_IN_WOW64 (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x235)
  9. #pragma comment(lib,"setupapi.lib")
  10. DWORD CtrlNetcard(BOOL bStatus);
  11. void _tmain(int arg, TCHAR** argv)
  12. {
  13. BOOL b = FALSE;
  14. DWORD err = 0;
  15. if (2 == arg)
  16. {
  17. argv++;
  18. if (!_tcsicmp(TEXT("enable"), *argv))
  19. {
  20. b = TRUE;
  21. err = CtrlNetcard(TRUE);
  22. }
  23. else if (!_tcsicmp(TEXT("disable"), *argv))
  24. {
  25. b = FALSE;
  26. err = CtrlNetcard(FALSE);
  27. }
  28. else
  29. {
  30. goto main_end;
  31. }
  32. _tprintf(_T("\n%s NetAdapter %s !\n"),
  33. b ? TEXT("Enable") : TEXT("Disable"),
  34. err ? TEXT("fail") : TEXT("success"));
  35. return;
  36. }
  37. main_end:
  38. _tprintf(TEXT("\nenable NetCard: enable"));
  39. _tprintf(TEXT("\ndisable NetCard: disable\n"));
  40. }
  41. DWORD CtrlNetcard(BOOL bStatus)
  42. {
  43. LPCTSTR HardwareId = TEXT("{4D36E972-E325-11CE-BFC1-08002BE10318}");
  44. GUID g = { 0X4D36E972, 0XE325, 0X11CE,{ 0XBF, 0XC1, 0X08, 0X00, 0X2B, 0XE1, 0X03, 0X18 } };
  45. DWORD NewState = 0;
  46. //调用ddk函数,来禁用网卡
  47. DWORD i = 0, err = 0;
  48. HDEVINFO hDevInfo = NULL;
  49. SP_DEVINFO_DATA spDevInfoData = { 0 };
  50. NewState = bStatus ? DICS_ENABLE : DICS_DISABLE;
  51. //访问系统的硬件库
  52. hDevInfo = SetupDiGetClassDevs(NULL, TEXT("PCI"), NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT);
  53. if (INVALID_HANDLE_VALUE == hDevInfo)
  54. {
  55. _tprintf(TEXT("访问系统硬件出错!"));
  56. return GetLastError();
  57. }
  58. //枚举硬件,获得需要的接口
  59. spDevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
  60. memcmp(&(spDevInfoData.ClassGuid), &g, sizeof(GUID));
  61. for (i = 0; SetupDiEnumDeviceInfo(hDevInfo, i, &spDevInfoData); i++)
  62. {
  63. PBYTE PropertyBuffer = NULL;
  64. DWORD PropertyBufferSize = 0;
  65. //获得硬件的属性值
  66. while (!SetupDiGetDeviceRegistryProperty(
  67. hDevInfo,
  68. &spDevInfoData,
  69. SPDRP_CLASSGUID,
  70. NULL,
  71. PropertyBuffer,
  72. PropertyBufferSize,
  73. &PropertyBufferSize))
  74. {
  75. if (ERROR_INSUFFICIENT_BUFFER == GetLastError())
  76. {
  77. if (PropertyBuffer)
  78. {
  79. free(PropertyBuffer);
  80. }
  81. PropertyBuffer = (PBYTE)malloc(PropertyBufferSize);
  82. }
  83. else
  84. {
  85. break;
  86. }
  87. }
  88. if (!PropertyBuffer)
  89. {
  90. continue;
  91. }
  92. //MessageBox(NULL, (LPCTSTR)PropertyBuffer, L"提示", MB_OK);
  93. if (!_tcsicmp(HardwareId, (LPTSTR)PropertyBuffer))
  94. {
  95. SP_PROPCHANGE_PARAMS spPropChangeParams;
  96. //printf("PropertyBuffer ok\n");
  97. free(PropertyBuffer);
  98. spPropChangeParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER);
  99. spPropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
  100. spPropChangeParams.Scope = DICS_FLAG_GLOBAL;
  101. spPropChangeParams.StateChange = NewState;
  102. if (!SetupDiSetClassInstallParams(hDevInfo, &spDevInfoData, (SP_CLASSINSTALL_HEADER*)&spPropChangeParams, sizeof(spPropChangeParams)))
  103. {
  104. err = GetLastError();
  105. printf("SetupDiSetClassInstallParams:%d\n", GetLastError());
  106. goto cleanup_DeviceInfo;
  107. }
  108. if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, &spDevInfoData))
  109. {
  110. err = GetLastError();
  111. printf("SetupDiCallClassInstaller:%x\n", GetLastError());
  112. goto cleanup_DeviceInfo;
  113. }
  114. }
  115. else
  116. {
  117. //printf("PropertyBuffer error\n");
  118. free(PropertyBuffer);
  119. }
  120. }
  121. cleanup_DeviceInfo:
  122. SetupDiDestroyDeviceInfoList(hDevInfo);
  123. return err;
  124. }

方法三.网上相关:http://blog.csdn.net/buyicn/article/details/6438635

此前,提到为了实现修改IP(一网卡对应多个IP,不重启电脑让修改立即生效),我尝试在VC6.0上调试采用WMI实现的修改IP的程序,编译不过的情况屡屡出现,在网上搜索了很久就是没有找到彻底的解决方法,最后只好放弃通过WMI来设置IP了!

那么,另一个思路(修改注册表中IP项,然后重启网卡)是否能行呢?于是,继续寻求重启网卡的方法,没想到居然找到了一些不错的资料。现整理如下,供日后参考。

(1)《vc++ 修改IP地址DNS 附带源码》实例代码,来自csdn下载频道,我下载下来调试过了,貌似和我上面提及的思路一致:通过重启网卡来让设置的IP立即生效。

(2)《程序禁用启用网络/网卡》是一个封装好的函数,我复制到本地并适当修改之后,就调试通过了!正好是我想要的:)关于函数中的配置文件ConfigInfo.ini,其内容貌似如下所示:

  1. [NETCARD]
  2. TYPE=PCI
  3. NAME=NVIDIA nForce Networking Controller

(3)《实战DeviceIoControl 之五:列举已安装的存储设备》这篇文章详细地介绍了如何访问设备,有代码有注释(作者另外的几篇《实战DeviceIoControl 》也很不错),是很好的入门教材!

(4)《Windows下不重启机器程序修改IP的三种方法》一篇总结性的文章,对几种实现方法做了简介,让我们有一个全局的认识。

网上应该还有好资料,等以后遇到了再整理!

http://blog.csdn.net/greless/article/details/70236969

重启网卡的几种方法(命令行,API,的更多相关文章

  1. ubuntu14.04重启网卡的三种方法

    Linux重启网卡的三种方法: 一.network 利用root帐户 # service network restart 或者/etc/init.d/networking restart 二.ifdo ...

  2. Ubuntu重启网卡的三种方法

    一.network利用root帐户# service network restart 或者/etc/init.d/networking restart 二.ifdown/ifup# ifdown et ...

  3. linux 清空catalina.out日志 不需要重启tomcat(五种方法)【转】

    1.重定向方法清空文件   [root@localhost logs]# du -h catalina.out  查看文件大小17M catalina.out[root@localhost logs] ...

  4. 浅析console和浏览器命令行API

    一.console对象: F12或者Control+Shift+i(Win)/ Alt+Command+i(Mac)打开浏览器自带的开发工具,选择顶部tab中的最后一项console,这样你就可以尽情 ...

  5. 控制台命令行API

    js调试系列: 控制台命令行API   上次初步介绍了什么是控制台<js调试系列: 初识控制台>,以及简单的 console.log 输出信息.最后还有两个小问题,我们就当回顾,来看下怎么 ...

  6. js调试系列: 控制台命令行API

    js调试系列目录: - 上次初步介绍了什么是控制台,以及简单的 console.log 输出信息.最后还有两个小问题,我们就当回顾,来看下怎么操作吧. 先打开百度,然后按 F12 打开后,如果不是 C ...

  7. 在红帽RHEL7.0里配置网卡的四种方法

    第一种方法 :采用vim编辑器来配置: 1.  如下图的步骤所示: 2.  输入这个命令后进行配置成下方图片里的内容: 3.  然后退出vim 编辑器,然后重新启动一下网络服务配置: 4.这些配置完后 ...

  8. win7休眠的开启与关闭方法命令行操作和图文结合的鼠标操作

    win7休眠的开启与关闭方法 从開始菜单中找到"附件→命令提示符",手工输入例如以下命令:powercfg -a.从这里能够清楚的看到,计算机是支持休眠的.显示"尚未启用 ...

  9. php语法检查方法——命令行模式和代码形式

    1. 命令行形式 php -l /path/to/file.php 2. php代码形式 function php_syntax_check($file){ $code = file_get_cont ...

随机推荐

  1. Hadoop源码分析(MapReduce概论)

    大家都熟悉文件系统,在对HDFS进行分析前,我们并没有花非常多的时间去介绍HDFS的背景.毕竟大家对文件系统的还是有一定的理解的,并且也有非常好的文档.在分析Hadoop的MapReduce部分前,我 ...

  2. 【u028】数列的整除性

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 对于任意一个整数数列,我们可以在每两个整数中间任意放一个符号'+'或'-',这样就可以构成一个表达式, ...

  3. 你的薪水增速跑赢GDP了没

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZm9ydW9r/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/d ...

  4. Atom编辑器折腾记_(13)JS代码智能提示补全(插件:atom-ternjs)

    题外话 官方正式版尽管内置了.autocomplete-plus;最为明显的一个功能就是记忆你已经输入过的名称进行匹配; 可是针对于某些语言来说,还是有些不足的-.当中JS的补全上就明显不足了-所以须 ...

  5. php正则及常用正则函数怎么用

    php正则及常用正则函数怎么用 一.总结 一句话总结: 能够使用正则的函数:preg_match();preg_match_all();preg_replace();preg_grep();preg_ ...

  6. simple java mail

    <dependency> <groupId>org.simplejavamail</groupId> <artifactId>simple-java-m ...

  7. scala读写文件 comparing values of types Unit and Int using `!=' will always yield true

    由于scala没有对写入文件的支持,所以写文件时通常借助java进行IO操作 //方式一(小文件) /* val s1 = Source.fromFile("D:\\inputword\\h ...

  8. 解决Request method 'GET' not supported问题

    博主最近遇到了这个问题,解决情况如下 第一种情况:前台页面的表单在一些情况下没有指定POST方法: Ajax没有指定POST方法: 后台方法在一定情况下需要指定POST方法: 第二种情况:前端参数类型 ...

  9. WINDOWS 同步(Interlocked,InterlockedExchangeAdd,Slim读/写锁,WaitForSingleObject,CreateWaitableTimer等等)

    NOTE0 在以下两种基本情况下,线程之间需要相互通信: 需要让多个线程同时访问一个共享资源,同时不能破坏资源的完整性: 一个线程需要通知其它线程某项任务已经完成 1.原子访问:Interlocked ...

  10. 学maven

    跟着刚哥深入学maven   前言:目前所有的项目都在使用maven,可是一直没有时间去整理学习,这两天正好有时间,好好的整理一下. 一.为什么使用Maven这样的构建工具[why] ① 一个项目就是 ...