编程实现启用禁用网卡
/*****************************************************************************
演示如何编程实现启用禁用网卡
Mady By ZwelL
2004.7.29
zwell@sohu.com
*****************************************************************************/
#include <windows.h>
#include <setupapi.h>
#include <tchar.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib")
#pragma comment(lib,"setupapi.lib")
BOOL DisableNetInterface(bool bStatus)
{
IN LPTSTR HardwareId ;
//硬件ComponentId,注册表地址:system/currentcontrolset/class/{4D36E972-E325-11CE-BFC1-08002BE10318}/0000
HardwareId="PCI//VEN_10EC&DEV_8139&SUBSYS_813910EC" ;
DWORD NewState ;
if(bStatus)
{
NewState=DICS_DISABLE ;
//禁用
}
else
{
NewState=DICS_ENABLE ;
//启用
}
//调用ddk函数,来禁用网卡
DWORD i,err ;
BOOL Found=false ;
HDEVINFO hDevInfo ;
SP_DEVINFO_DATA spDevInfoData ;
//访问系统的硬件库
hDevInfo=SetupDiGetClassDevs(NULL,"PCI",NULL,DIGCF_ALLCLASSES|DIGCF_PRESENT);
if(hDevInfo==INVALID_HANDLE_VALUE)
{
printf("访问系统硬件出错!");
return false ;
}
//枚举硬件,获得需要的接口
spDevInfoData.cbSize=sizeof(SP_DEVINFO_DATA);
for(i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&spDevInfoData);i++)
{
DWORD DataT ;
LPTSTR p,buffer=NULL ;
DWORD buffersize=0 ;
//获得硬件的属性值
while(!SetupDiGetDeviceRegistryProperty(
hDevInfo,
&spDevInfoData,
SPDRP_HARDWAREID,
&DataT,
(PBYTE)buffer,
buffersize,
&buffersize))
{
if(GetLastError()==ERROR_INVALID_DATA)
{
//不存在HardwareID. Continue.
break ;
}
else if(GetLastError()==ERROR_INSUFFICIENT_BUFFER)
{
//buffer size不对.
if(buffer)
LocalFree(buffer);
buffer=(char*)LocalAlloc(LPTR,buffersize);
}
else
{
//未知错误
goto cleanup_DeviceInfo ;
}
}
if(GetLastError()==ERROR_INVALID_DATA)
continue ;
//比较,找到和网卡ID相同的项
for(p=buffer;*p&&(p<&buffer[buffersize]);p+=lstrlen(p)+sizeof(TCHAR))
{
if(!_tcscmp(HardwareId,p))
{
//找到网卡
Found=TRUE ;
break ;
}
}
if(buffer)
LocalFree(buffer);
//如果相等
if(Found)
{
//禁用该设备
SP_PROPCHANGE_PARAMS spPropChangeParams ;
spPropChangeParams.ClassInstallHeader.cbSize=sizeof(SP_CLASSINSTALL_HEADER);
spPropChangeParams.ClassInstallHeader.InstallFunction=DIF_PROPERTYCHANGE ;
spPropChangeParams.Scope=DICS_FLAG_GLOBAL ;
spPropChangeParams.StateChange=NewState ;
//禁用:DICS_DISABLE,DICS_ENABLE启用
//
if(!SetupDiSetClassInstallParams(hDevInfo,&spDevInfoData,(SP_CLASSINSTALL_HEADER*)&spPropChangeParams,sizeof(spPropChangeParams)))
{
DWORD errorcode=GetLastError();
}
if(!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,hDevInfo,&spDevInfoData))
{
DWORD errorcode=GetLastError();
}
switch(NewState)
{
case DICS_DISABLE :
printf("成功禁用网络!");
break ;
case DICS_ENABLE :
printf("成功启用网络!");
break ;
}
break ;
}
}
//退出时,清理工作环境
cleanup_DeviceInfo :
err=GetLastError();
SetupDiDestroyDeviceInfoList(hDevInfo);
SetLastError(err);
return true ;
}
void usage(char *exefile)
{
printf("Usage:%s [-e|-d]/r/n", exefile);
printf("/t-e: Enable the network card./r/n");
printf("/t-d: Disable the network card./r/n");
exit(0);
}
int main(int argc,char**argv)
{
if(argc<2)
usage(argv[0]);
if(!DisableNetInterface((strstr(argv[1],"-d")>0?TRUE:FALSE)))
printf("对网卡操作失败!");
return 0;
}
---
Welcome to my blog:
编程实现启用禁用网卡相关推荐
- python 禁用网卡_如何编程实现启用禁用网卡
展开全部 /***************************************************************************** 演示如何编程6261696475 ...
- 【CentOS】centos7启用/禁用网卡
1.ifconfig 查看网卡. ifconfig 是一个用来查看.配置.启用或禁用网络接口的工具.可以用这个工具来临时性的配置网卡的IP地址.掩码.广播地址.网关等.如果您想把网络接口的IP地址固定 ...
- down 网卡端口周期性的up_Linux 中如何启用和禁用网卡?
启用.禁用网卡有很多种方法.在这篇文章里,我们会介绍我们使用过的最好的 5 种方法. -- Magesh Maruthamuthu(作者) 你可能会根据你的需要执行以下命令.我会在这里列举一些你会用到 ...
- Linux 中如何启用和禁用网卡?
#: subject: (How To Enable (UP) And Disable (DOWN) A Network Interface Port (NIC) In Linux?) #: via: ...
- Linux中启用和禁用网卡
禁用网卡:ifdown 设备名称 示例:禁用eth0这块网卡,则输入 ifdown eth0,然后按下回车. 启用网卡:ifup 设备名称 示例:启用 eth0这块网卡,则输入 ifup eth0, ...
- C 启用或禁用网卡 2种方法
http://www.cnblogs.com/freedom831215/archive/2011/08/14/2137828.html [DllImport("wininet.dll&qu ...
- C#语言实现定时开启或禁用网卡小程序
C#语言实现定时开启/禁用网卡 程序运行效果图 程序实现主要代码 源代码工程文件(VS2013工程文件编译通过) 查看网卡名称附图 1.win7旗舰版运行效果图: 2.程序实现主要代码: /// 网卡 ...
- 程序读取计算机设备管理器中各设备的状态(启用/禁用)?(转自大富翁)
此部分代码请大家给加上注释. const DEV_CLASS_NAME = 'Net'; DEM_CLASS_NAME = 'MEDIA'; DEC_CLASS_NAME ...
- bat之启动与禁用网卡
@echo hello,world netsh interface set interface "以太网" disabled @echo start sleep choice /t ...
最新文章
- shell脚本将命令的输出结果赋值给变量
- python简单代码hello-实现简单的hello/hi程序——python
- gcc 编译错误:undefined reference to 'sqrt'
- 使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例)
- [剑指offer]面试题第[68-1]题[Leedcode][JAVA][第235题][二叉搜索树的最近公共祖先][递归][BFS]
- php如何直接使用iview,iview 使用总结
- 2021年ICT趋势白皮书:不确定性中的确定
- OO ALV 实现方式 ALV TABLE 之 栏位属性
- TFRecord —— tensorflow 下的统一数据存储格式
- layui表格合并单元格多表_layui合并单元格各种办法
- 我们玩游戏,还是游戏玩我们……
- Linux交叉编译FFmpeg
- 设备安全——防火墙j基础策略实验【华为NSP】
- 初始Ext.net(二)
- python27是什么文件夹可以删除吗_python如何跳过错误继续运行,同时删除产生错误的文档...
- python 爬取链家成交房数据案例
- c语言结构体求分数和,C语言 定义一个表示分数的结构体,并求两个分数相加之和...
- js开发实例 —— 5秒自动关闭广告倒计时
- Webserver简易项目
- Docker Swarm简单教程
热门文章
- 面试题,客户经常变更需求该如何处理?
- 面试中听到这句话是不是代表凉了?
- 面试题,你做了哪些事情来提升自己的沟通能力?
- 定位到元素后获取其属性_(11)让“盒子”动起来:② “定位”和 BFC | CSS
- python 接收邮件服务器地址_python实现的接收邮件功能示例【基于网易POP3服务器】...
- “智慧法院”数据融合分析与集成应用
- 数据库系统实训——实验一——系统安装与数据库搭建
- 【操作系统】系统引导
- 【Java】辨析JUnit4中的@AfterClass、@BeforeClass、@after、@before
- 把握不好数组边界的危害(记洛谷P1789题RE+WA的经历,Java语言描述)