CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  网络编程

如何编程实现禁用和启用网卡

楼主pengjd(悲酥清风之冰霜之刃)2006-03-15 14:57:04 在 VC/MFC / 网络编程 提问

如题 问题点数:100、回复次数:6Top

1 楼pomelowu(羽战士)回复于 2006-03-15 15:21:39 得分 100

#include   "stdafx.h"    
  #include     <tchar.h>                      
  #include     <windows.h>              
  #include     <setupapi.h>    
   
  #pragma   comment   (lib,"setupapi")    
   
  #define   UnknownDevice   TEXT("")    
   
  HDEVINFO   hDevInfo   =   0;    
   
   
  BOOL   StateChange(DWORD   NewState,   DWORD   SelectedItem,HDEVINFO   hDevInfo)    
  {    
  SP_PROPCHANGE_PARAMS   PropChangeParams   =   {sizeof(SP_CLASSINSTALL_HEADER)};    
  SP_DEVINFO_DATA   DeviceInfoData   =   {sizeof(SP_DEVINFO_DATA)};    
  HCURSOR   hCursor;    
   
  //    
  //   This   may   take   a   while   :^(    
  //    
  hCursor   =   SetCursor(LoadCursor(NULL,   IDC_WAIT));    
   
  //    
  //   Get   a   handle   to   the   Selected   Item.    
  //    
  if   (!SetupDiEnumDeviceInfo(hDevInfo,SelectedItem,&DeviceInfoData))    
  {    
  printf("EnumDeviceInfo");    
  return   FALSE;    
  }    
   
  //    
  //   Set   the   PropChangeParams   structure.    
  //    
  PropChangeParams.ClassInstallHeader.InstallFunction   =   DIF_PROPERTYCHANGE;    
  PropChangeParams.Scope   =   DICS_FLAG_GLOBAL;    
  PropChangeParams.StateChange   =   NewState;    
   
  if   (!SetupDiSetClassInstallParams(hDevInfo,    
  &DeviceInfoData,    
  (SP_CLASSINSTALL_HEADER   *)&PropChangeParams,    
  sizeof(PropChangeParams)))    
  {    
  printf("SetClassInstallParams");    
  SetCursor(hCursor);    
  return   FALSE;    
  }    
   
  //    
  //   Call   the   ClassInstaller   and   perform   the   change.    
  //    
  if   (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,    
  hDevInfo,    
  &DeviceInfoData))    
  {    
  printf("SetClassInstallParams");    
  SetCursor(hCursor);    
  return   TRUE;    
  }    
   
  SetCursor(hCursor);    
  return   TRUE;    
  }    
   
   
  BOOL   IsClassNet(   GUID   *   ClassGuid   )    
  {    
  #define   MAX_NUM   50    
   
  HKEY   hKeyClass;    
  LONG   lRet;    
  char   ClassType[MAX_NUM];    
  char   NetClass[MAX_NUM]   =   "Net";    
  DWORD   dwLength   =   MAX_NUM,dwType   =   REG_SZ;    
   
  if   (hKeyClass   =   SetupDiOpenClassRegKey(ClassGuid,KEY_READ))    
  {    
  lRet   =   RegQueryValueEx(hKeyClass,    
  TEXT("Class"),    
  NULL,   &dwType,   LPBYTE(ClassType),   &dwLength);    
  RegCloseKey(hKeyClass);    
   
  if   (lRet   !=   ERROR_SUCCESS)    
  return   FALSE;    
   
  if   (!strcmp(ClassType,NetClass))    
  return   TRUE;    
  }    
   
  return   FALSE;    
  }    
   
  int   main(int   argc,   char*   argv[])    
  {    
  if   (INVALID_HANDLE_VALUE   ==   (hDevInfo   =    
  SetupDiGetClassDevs(NULL,NULL,0,    
  DIGCF_PRESENT   |DIGCF_ALLCLASSES)))    
  {    
  printf("GetClassDevs");    
  return   0;    
  }    
   
  DWORD   i,   Status,   Problem;    
  SP_DEVINFO_DATA   DeviceInfoData   =   {sizeof(SP_DEVINFO_DATA)};    
   
  HKEY   hKeyClass;    
  char   DeviceName[200];    
  for   (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData);i++)    
  {    
  if   (IsClassNet(&DeviceInfoData.ClassGuid))    
  {    
  printf("   the   class's   index   is   %d\n",i);    
  //    
  //DICS_DISABLE-->禁用网络    
  //DICS_ENABLE--->恢复网络    
  //    
  if   (StateChange(DICS_ENABLE,i,hDevInfo))    
  printf("NetWork   stopped");    
   
  }    
  }    
   
  return   0;    
  }    
  Top

2 楼striking(庸人自扰)回复于 2006-03-15 15:28:27 得分 0

收下,   谢谢Top

3 楼pengjd(悲酥清风之冰霜之刃)回复于 2006-03-16 11:59:25 得分 0

解决谢谢Top

4 楼robot_zyt(浪漫菜鸟)回复于 2006-05-04 14:52:04 得分 0

怎么根据指定的网卡名禁用和启用网卡?Top

5 楼robot_zyt(浪漫菜鸟)回复于 2006-05-04 16:03:08 得分 0

怎么禁用和启用指定网卡?Top

6 楼TechiceY()回复于 2006-05-31 09:19:39 得分 0

执行到这里就会死机  
  if   (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,  
  hDevInfo,  
  &DeviceInfoData))  
  {  
  printf("SetClassInstallParams");  
  SetCursor(hCursor);  
  return   TRUE;  
  }    
   
  why?Top

相关问题

  • 请教: 如何通过编程禁用和启用USB设备?
  • 如何通过编程来禁用和启用设备
  • 高分求在98下禁用,启用网卡的代码
  • 请赐教:怎样才能启用、禁用网卡?
  • 程序启用和禁用网卡(在线等,谢谢各位)
  • 如何直接禁用和启用网卡
  • 如何用C#禁用/启用网卡(不用c++编译的dll)
  • 请教修改网卡的网关和dns为空的问题 、禁用和再启用网卡问题
  • 哪位老大有C#的禁用网卡和启用网卡的程序?100相送。
  • 双网卡编程

关键词

  • propchangeparams
  • hdevinfo
  • deviceinfodata
  • hcursor
  • sp
  • sizeof
  • include

得分解答快速导航

  • 帖主:pengjd
  • pomelowu

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo