#include "StdAfx.h"
#include "NetCardCtrl.h"
NetCardCtrl::NetCardCtrl(void)
{
}
NetCardCtrl::~NetCardCtrl(void)
{
}
//参数: bool bStatus
// true: 禁用网络
// false: 启用网络
BOOL NetCardCtrl::DisableNetCard( BOOL bStatus )
{
IN LPTSTR NetCardClassGuidID ;
NetCardClassGuidID= _T("{4D36E972-E325-11CE-BFC1-08002BE10318}");
DWORD NewState ;
if(bStatus)
{
NewState=DICS_DISABLE ;
}
else
{
NewState=DICS_ENABLE ;
}
DWORD i = 0;
BOOL Found = FALSE ;
HDEVINFO hDevInfo ;
SP_DEVINFO_DATA spDevInfoData ;
//访问系统的硬件库
hDevInfo=SetupDiGetClassDevs(NULL,_T("PCI"),NULL,DIGCF_ALLCLASSES|DIGCF_PRESENT);
if(hDevInfo==INVALID_HANDLE_VALUE)
{
MessageBox(NULL,_T("访问系统硬件出错!"),_T(""),0);
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_CLASSGUID,&DataT, (PBYTE)buffer,buffersize,&buffersize))
{
if(GetLastError()==ERROR_INVALID_DATA)
{
break ;
}
else if(GetLastError()==ERROR_INSUFFICIENT_BUFFER)
{
if(buffer)
LocalFree(buffer);
buffer=(LPTSTR)LocalAlloc(LPTR,buffersize);
}
else
{
SetupDiDestroyDeviceInfoList(hDevInfo);
return FALSE ;
}
}
if(GetLastError()==ERROR_INVALID_DATA)
continue ;
for(p=buffer;*p&&(p<&buffer[buffersize]);p+=lstrlen(p)+sizeof(TCHAR))
{
if(!_tcscmp(NetCardClassGuidID,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 ;
//
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 :
MessageBox(NULL,_T("成功禁用网络!"),_T(""),0);
break ;
case DICS_ENABLE :
MessageBox(NULL,_T("成功启用网络!"),_T(""),0);
break ;
}
break ;
}
}
SetupDiDestroyDeviceInfoList(hDevInfo);
return TRUE ;
}
VC编程禁用和启用网卡
1星 需积分: 50 152 浏览量
2016-02-28
13:10:53
上传
评论 4
收藏 1KB RAR 举报
zhongfulihhh
- 粉丝: 4
- 资源: 24
最新资源
- 《CKA/CKAD应试指南/从docker到kubernetes 完全攻略》学习笔记 第1章docker基础(1.1-1.4)
- 基于python实现的水下压缩空气储能互补系统建模仿真与经济效益分析+源代码+论文
- 华中科技大学-自然语言处理实验,Bi-LSTM+CRF的中文分词框架,并且利用基于深度学习的方法进行中文命名实体识别++源码报告
- 基于动态罚函数的铁路车流分配与径路优化模型python源码
- 鱼群算法求解组环问题python源码+文档说明
- 基于决策优化的多波束测深测线规划模型MATLAB代码
- 课程设计-基于python实现的多目标优化算法求解带时间窗的车辆路径规划问题+源代码+文档说明+界面截图+pptx
- 基于通信信号与通信系统的MATLAB仿真源码-课程设计
- 嵌入式-信号机制(概念,发送,定时,捕捉,SIGCHLD 信号实现回收子进程)
- c语言管理系统大一大二笔记
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈