/*****************************************************************************
演示如何编程实现启用禁用网卡
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:

编程实现启用禁用网卡相关推荐

  1. python 禁用网卡_如何编程实现启用禁用网卡

    展开全部 /***************************************************************************** 演示如何编程6261696475 ...

  2. 【CentOS】centos7启用/禁用网卡

    1.ifconfig 查看网卡. ifconfig 是一个用来查看.配置.启用或禁用网络接口的工具.可以用这个工具来临时性的配置网卡的IP地址.掩码.广播地址.网关等.如果您想把网络接口的IP地址固定 ...

  3. down 网卡端口周期性的up_Linux 中如何启用和禁用网卡?

    启用.禁用网卡有很多种方法.在这篇文章里,我们会介绍我们使用过的最好的 5 种方法. -- Magesh Maruthamuthu(作者) 你可能会根据你的需要执行以下命令.我会在这里列举一些你会用到 ...

  4. Linux 中如何启用和禁用网卡?

    #: subject: (How To Enable (UP) And Disable (DOWN) A Network Interface Port (NIC) In Linux?) #: via: ...

  5. Linux中启用和禁用网卡

    禁用网卡:ifdown 设备名称 示例:禁用eth0这块网卡,则输入  ifdown eth0,然后按下回车. 启用网卡:ifup 设备名称 示例:启用 eth0这块网卡,则输入 ifup eth0, ...

  6. C 启用或禁用网卡 2种方法

    http://www.cnblogs.com/freedom831215/archive/2011/08/14/2137828.html [DllImport("wininet.dll&qu ...

  7. C#语言实现定时开启或禁用网卡小程序

    C#语言实现定时开启/禁用网卡 程序运行效果图 程序实现主要代码 源代码工程文件(VS2013工程文件编译通过) 查看网卡名称附图 1.win7旗舰版运行效果图: 2.程序实现主要代码: /// 网卡 ...

  8. 程序读取计算机设备管理器中各设备的状态(启用/禁用)?(转自大富翁)

    此部分代码请大家给加上注释. const   DEV_CLASS_NAME    = 'Net';   DEM_CLASS_NAME    = 'MEDIA';   DEC_CLASS_NAME   ...

  9. bat之启动与禁用网卡

    @echo hello,world netsh interface set interface "以太网" disabled @echo start sleep choice /t ...

最新文章

  1. shell脚本将命令的输出结果赋值给变量
  2. python简单代码hello-实现简单的hello/hi程序——python
  3. gcc 编译错误:undefined reference to 'sqrt'
  4. 使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例)
  5. [剑指offer]面试题第[68-1]题[Leedcode][JAVA][第235题][二叉搜索树的最近公共祖先][递归][BFS]
  6. php如何直接使用iview,iview 使用总结
  7. 2021年ICT趋势白皮书:不确定性中的确定
  8. OO ALV 实现方式 ALV TABLE 之 栏位属性
  9. TFRecord —— tensorflow 下的统一数据存储格式
  10. layui表格合并单元格多表_layui合并单元格各种办法
  11. 我们玩游戏,还是游戏玩我们……
  12. Linux交叉编译FFmpeg
  13. 设备安全——防火墙j基础策略实验【华为NSP】
  14. 初始Ext.net(二)
  15. python27是什么文件夹可以删除吗_python如何跳过错误继续运行,同时删除产生错误的文档...
  16. python 爬取链家成交房数据案例
  17. c语言结构体求分数和,C语言 定义一个表示分数的结构体,并求两个分数相加之和...
  18. js开发实例 —— 5秒自动关闭广告倒计时
  19. Webserver简易项目
  20. Docker Swarm简单教程

热门文章

  1. 面试题,客户经常变更需求该如何处理?
  2. 面试中听到这句话是不是代表凉了?
  3. 面试题,你做了哪些事情来提升自己的沟通能力?
  4. 定位到元素后获取其属性_(11)让“盒子”动起来:② “定位”和 BFC | CSS
  5. python 接收邮件服务器地址_python实现的接收邮件功能示例【基于网易POP3服务器】...
  6. “智慧法院”数据融合分析与集成应用
  7. 数据库系统实训——实验一——系统安装与数据库搭建
  8. 【操作系统】系统引导
  9. 【Java】辨析JUnit4中的@AfterClass、@BeforeClass、@after、@before
  10. 把握不好数组边界的危害(记洛谷P1789题RE+WA的经历,Java语言描述)