5-8万年薪顶级嵌入式,京沪深就业地 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  硬件/系统

悬赏以百分请教如何禁用网卡,Win2K/Win98

楼主ccc_wh(cwh)2002-10-24 15:49:17 在 VC/MFC / 硬件/系统 提问

悬赏以百分请教如何禁用网卡,Win2K/Win98 问题点数:100、回复次数:12Top

1 楼zhenyuwzy(^&^)回复于 2002-10-25 11:23:25 得分 0

1.拆开机箱,拨了网卡,它想用也用不了  
  2.如果是整合网卡,可以在BIOS里面设置禁用  
  3.不想拔网卡的话,在设备管理器中打开网卡的属性,在“在此硬件配置文件中禁用”打勾Top

2 楼flyboycsdn(飞仔)回复于 2002-10-25 11:44:46 得分 0

如果你想要原程序的话,留下你的email地址  
  我做过一个禁用启用设备(网卡)com组件  
  可参看windows   ddk的文档。Top

3 楼masterz(www.fruitfruit.com)回复于 2002-10-25 11:53:41 得分 0

to   flyboycsdn:  
  can   you   post   your   code   here?   so   that   others   can   learn   it   too.Top

4 楼vcsongs(vcsongs)回复于 2002-10-25 12:03:14 得分 0

用setupdi...   禁用网卡?Top

5 楼JennyVenus()回复于 2002-10-25 12:35:34 得分 0

masterz说得对  
  让大家都学学Top

6 楼flyboycsdn(飞仔)回复于 2002-10-25 13:18:37 得分 100

//   Hardware.cpp   :   Implementation   of   CHardware  
  #include   "stdafx.h"  
  #include   "NetCA_HARDWARE.h"  
  #include   "Hardware.h"  
  #define   UnknownDevice   TEXT("<Unknown   Device>")  
   
  /////////////////////////////////////////////////////////////////////////////  
  //   CHardware  
   
  /*****************禁用设备********************************  
   
          参数说明: DriverID[in]--设备在注册表中的唯一标识  
  pVal[out,retval]--返回值,成功为0,失败为1  
          创建时间: 2002-6-21  
   
  **********************************************************/  
  STDMETHODIMP   CHardware::Disable(BSTR   DriverID,   long   *pVal)  
  {  
  BOOL   ShowHidden   =   0;  
  HDEVINFO   hDevInfo   =   0;  
  long   len;  
  //init   the   value  
  TIndex   =   -1;  
  len   =   wcstombs(NULL,DriverID,wcslen(DriverID));  
  len   =   len   +   1;  
  DrvID   =   (char   *)malloc(len);  
  memset(DrvID,0,len+1);  
  wcstombs(DrvID,DriverID,wcslen(DriverID));  
   
   
  if   (INVALID_HANDLE_VALUE   ==   (hDevInfo   =    
                                  SetupDiGetClassDevs(NULL,NULL,NULL,  
                                  DIGCF_PRESENT|DIGCF_ALLCLASSES)))  
   
                  {  
   
                          *pVal   =   -1;  
  return   S_OK;  
                  }  
  //get   the   index   of   drv   in   the   set  
  EnumAddDevices(ShowHidden,hDevInfo);  
   
  //disable   the   drv  
                 
  // if   ((IsDisableable(TIndex,hDevInfo))&&(!(TIndex==-1)))  
  if   (!IsDisabled(TIndex,hDevInfo))    
  if   (IsDisableable(TIndex,hDevInfo))  
  if   (StateChange(DICS_DISABLE,TIndex,hDevInfo))  
  *pVal   =   0;  
  else  
  *pVal   =   -1;  
  else  
  *pVal   =   1;  
  else    
  *pVal   =   0;  
   
  if(hDevInfo)  
  SetupDiDestroyDeviceInfoList(hDevInfo);  
  return   S_OK;  
  }  
   
  BOOL   CHardware::EnumAddDevices(BOOL   ShowHidden,   HDEVINFO   hDevInfo)  
  {  
  DWORD   i,   Status,   Problem;  
   
          LPTSTR   IOName=NULL;  
  DWORD   len=0;  
          SP_DEVINFO_DATA   DeviceInfoData   =   {sizeof(SP_DEVINFO_DATA)};  
   
       
   
          //  
          //   Enumerate   though   all   the   devices.  
          //  
          for   (i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData);i++)  
          {  
                  //  
                  //   Should   we   display   this   device,   or   move   onto   the   next   one.  
                  //  
                  if   (CR_SUCCESS   !=   CM_Get_DevNode_Status(&Status,   &Problem,  
                                          DeviceInfoData.DevInst,0))  
                  {  
                           
                          continue;  
                  }  
   
                  if   (!(ShowHidden   ||   !((Status   &   DN_NO_SHOW_IN_DM)   ||    
                          IsClassHidden(&DeviceInfoData.ClassGuid))))  
                          continue;  
   
   
   
                  //  
                  //   Get   a   friendly   name   for   the   device.  
                  //  
   
                  ConstructDeviceName(hDevInfo,&DeviceInfoData,  
  &IOName,  
  (PULONG)&len);  
  if   (strcmp(IOName,DrvID)   ==   0)  
  {  
  TIndex   =   i;  
  return   TRUE;  
  }  
  }  
  return   TRUE;  
         
  }  
  Top

7 楼flyboycsdn(飞仔)回复于 2002-10-25 13:19:50 得分 0

(续上)  
  ×××××××××××××××××××××××××××××  
  BOOL   CHardware::IsClassHidden(GUID   *ClassGuid)  
  {  
  BOOL   bHidden   =   FALSE;  
          HKEY   hKeyClass;  
   
          //  
          //   If   the   devices   class   has   the   NoDisplayClass   value   then  
          //   don't   display   this   device.  
          //  
          if   (hKeyClass   =   SetupDiOpenClassRegKey(ClassGuid,KEY_READ))  
          {  
                  bHidden   =   (RegQueryValueEx(hKeyClass,    
                          REGSTR_VAL_NODISPLAYCLASS,    
                          NULL,   NULL,   NULL,   NULL)   ==   ERROR_SUCCESS);  
                  RegCloseKey(hKeyClass);  
          }                                                                    
   
          return   bHidden;  
  }  
   
  BOOL   CHardware::ConstructDeviceName(HDEVINFO   DeviceInfoSet,   PSP_DEVINFO_DATA   DeviceInfoData,   PVOID   Buffer,   PULONG   Length)  
  {  
  if   (!GetRegistryProperty(DeviceInfoSet,  
                  DeviceInfoData,  
                  SPDRP_DRIVER   ,  
                  Buffer,  
                  Length))  
          {  
                  if   (!GetRegistryProperty(DeviceInfoSet,  
                          DeviceInfoData,  
                          SPDRP_DEVICEDESC   ,  
                          Buffer,  
                          Length))  
                  {  
                          if   (!GetRegistryProperty(DeviceInfoSet,  
                                  DeviceInfoData,  
                                  SPDRP_CLASS   ,  
                                  Buffer,  
                                  Length))  
                          {  
                                  if   (!GetRegistryProperty(DeviceInfoSet,  
                                          DeviceInfoData,  
                                          SPDRP_CLASSGUID   ,  
                                          Buffer,  
                                          Length))  
                                  {  
                                            *Length   =   (_tcslen(UnknownDevice)+1)*sizeof(TCHAR);  
                                            Buffer   =(char   *)malloc(*Length);  
                                            _tcscpy(*(LPTSTR   *)Buffer,UnknownDevice);  
                                  }  
                          }  
                  }  
   
          }  
   
           
  return   TRUE;  
  }  
   
  BOOL   CHardware::GetRegistryProperty(HDEVINFO   DeviceInfoSet,   PSP_DEVINFO_DATA   DeviceInfoData,   ULONG   Property,   PVOID   Buffer,   PULONG   Length)  
  {  
  while   (!SetupDiGetDeviceRegistryProperty(DeviceInfoSet,  
                  DeviceInfoData,  
                  Property,  
                  NULL,  
                  (BYTE   *)*(TCHAR   **)Buffer,  
                  *Length,  
                  Length  
                  ))  
          {  
   
                  if   (GetLastError()   ==   ERROR_INSUFFICIENT_BUFFER)  
                  {  
                          //  
                          //   We   need   to   change   the   buffer   size.  
                          //  
                          if   (*(LPTSTR   *)Buffer)    
                                  LocalFree(*(LPTSTR   *)Buffer);  
                          *(LPTSTR   *)Buffer   =   (PCHAR)LocalAlloc(LPTR,*Length);  
                  }  
                  else  
                  {  
                          //  
                          //   Unknown   Failure.  
                          //  
                   
                          return   FALSE;  
                  }                          
          }  
   
          return   (*(LPTSTR   *)Buffer)[0];  
   
  }  
   
  BOOL   CHardware::StateChange(DWORD   NewState,   DWORD   SelectedItem,   HDEVINFO   hDevInfo)  
  {  
  SP_PROPCHANGE_PARAMS   PropChangeParams   =   {sizeof(SP_CLASSINSTALL_HEADER)};  
          SP_DEVINFO_DATA   DeviceInfoData   =   {sizeof(SP_DEVINFO_DATA)};  
           
          //  
          //   Get   a   handle   to   the   Selected   Item.  
          //  
          if   (!SetupDiEnumDeviceInfo(hDevInfo,SelectedItem,&DeviceInfoData))  
          {  
   
                  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)))  
          {  
   
           
                  return   FALSE;  
          }  
   
          //  
          //   Call   the   ClassInstaller   and   perform   the   change.  
          //  
          if   (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE,  
                  hDevInfo,  
                  &DeviceInfoData))  
          {  
   
                   
                  return   TRUE;  
          }  
   
           
          return   TRUE;  
  }  
   
  BOOL   CHardware::IsDisabled(DWORD   SelectedItem,   HDEVINFO   hDevInfo)  
  {  
  SP_DEVINFO_DATA   DeviceInfoData   =   {sizeof(SP_DEVINFO_DATA)};  
          DWORD   Status,   Problem;  
   
          //  
          //   Get   a   handle   to   the   Selected   Item.  
          //  
          if   (!SetupDiEnumDeviceInfo(hDevInfo,SelectedItem,&DeviceInfoData))  
          {  
   
                  return   FALSE;  
          }  
   
          if   (CR_SUCCESS   !=   CM_Get_DevNode_Status(&Status,   &Problem,  
                                  DeviceInfoData.DevInst,0))  
          {  
   
                  return   FALSE;  
          }  
   
          return   ((Status   &   DN_HAS_PROBLEM)   &&   (CM_PROB_DISABLED   ==   Problem))   ;  
  }  
   
  BOOL   CHardware::IsDisableable(DWORD   SelectedItem,   HDEVINFO   hDevInfo)  
  {  
  SP_DEVINFO_DATA   DeviceInfoData   =   {sizeof(SP_DEVINFO_DATA)};  
          DWORD   Status,   Problem;  
   
          //  
          //   Get   a   handle   to   the   Selected   Item.  
          //  
          if   (!SetupDiEnumDeviceInfo(hDevInfo,SelectedItem,&DeviceInfoData))  
          {  
   
                  return   FALSE;  
          }  
   
          if   (CR_SUCCESS   !=   CM_Get_DevNode_Status(&Status,   &Problem,  
                                  DeviceInfoData.DevInst,0))  
          {  
   
                  return   FALSE;  
          }  
   
          return   ((Status   &   DN_DISABLEABLE)   &&    
                  (CM_PROB_HARDWARE_DISABLED   !=   Problem));  
  }  
   
  STDMETHODIMP   CHardware::Enable(BSTR   DriverID,   long   *pVal)  
  {  
  BOOL   ShowHidden   =   0;  
  HDEVINFO   hDevInfo   =   0;  
  long   len;  
  //init   the   value  
  TIndex   =   -1;  
  len   =   wcstombs(NULL,DriverID,wcslen(DriverID));  
  len   =   len   +   1;  
  DrvID   =   (char   *)malloc(len);  
  memset(DrvID,0,len+1);  
  wcstombs(DrvID,DriverID,wcslen(DriverID));  
   
   
  if   (INVALID_HANDLE_VALUE   ==   (hDevInfo   =    
                                  SetupDiGetClassDevs(NULL,NULL,NULL,  
                                  DIGCF_PRESENT|DIGCF_ALLCLASSES)))  
   
                  {  
   
                          *pVal   =   -1;  
  return   S_OK;  
                  }  
  //get   the   index   of   drv   in   the   set  
  EnumAddDevices(ShowHidden,hDevInfo);  
   
  //disable   the   drv  
                 
  if   (IsDisabled(TIndex,hDevInfo))  
  if   (StateChange(DICS_ENABLE,TIndex,hDevInfo))  
  *pVal   =   0;  
  else  
  *pVal   =   -1;  
  else  
  *pVal   =   0;  
       
  if(hDevInfo)  
  SetupDiDestroyDeviceInfoList(hDevInfo);  
  return   S_OK;  
  }  
   
  ××××××××××××××××××××××××××××××××××××  
  以上为原程序,其实可以去找微软的ddk去看一看,里面有一个列举机器的设备和启用禁用的实例,我的这个是为了应付老板,看了例子后做了一些改动。Top

8 楼ccc_wh(cwh)回复于 2002-10-27 11:26:29 得分 0

谢谢   flyboycsdn(飞仔)   ,这几天没能上网,所以到今天才看到,也谢谢各位的参与,呵呵Top

9 楼huangbeyond(校园人渣)回复于 2003-03-17 10:23:19 得分 0

收藏Top

10 楼xiaoyaolili(逍遥)回复于 2003-03-21 10:23:25 得分 0

不错,学一学。我也正好有些需要呢!  
  借个东风,谢了!Top

11 楼niaosuy(百姓苦)(位卑未敢忘忧国)回复于 2003-03-28 14:22:46 得分 0

MarkTop

12 楼simpledevelop(阳光灿烂)回复于 2003-03-30 00:19:52 得分 0

收藏Top

相关问题

  • 百分悬赏请教一个问题
  • 百分悬赏:SQL的一个查询问题!在线急侯!!
  • 百分悬赏破解此加密算法
  • ※百分求解:请问编程如何检测本地NetBios是否被禁用?
  • 悬赏百分,请教高手赐教!如何解析一个字符串表达式?
  • 悬赏!!!!!
  • 悬赏
  • 百分求救!!!!
  • 百分奉送!!!!!!!!!!
  • 百分求解

关键词

  • win2k
  • win98
  • hardware
  • null
  • 禁用
  • 网卡
  • driverid
  • chardware
  • drvid
  • hdevinfo

得分解答快速导航

  • 帖主:ccc_wh
  • flyboycsdn

相关链接

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

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
x 提问