首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么通过编写程序禁用网卡,并且网卡禁用后不能被手动启动

2012-07-15 
如何通过编写程序禁用网卡,并且网卡禁用后不能被手动启动?本人有这样一个需求,我的软件运行过程中需要禁用

如何通过编写程序禁用网卡,并且网卡禁用后不能被手动启动?
本人有这样一个需求,我的软件运行过程中需要禁用wifi,在网上找了很多禁用网卡的程序,基本都是调用setupapi实现的,附程序如下:
void EnumDevices(HDEVINFO hDevInfo)
{
 SP_DEVINFO_DATA DeviceInfoData = {sizeof(SP_DEVINFO_DATA)};
 LPOLESTR guid;
 char devName[128];
 char instanceId[128];
 for (int i=0;SetupDiEnumDeviceInfo(hDevInfo,i,&DeviceInfoData);i++)
 {
  StringFromCLSID(DeviceInfoData.ClassGuid,&guid);
  SetupDiClassNameFromGuid(&DeviceInfoData.ClassGuid,devName,128,NULL);
  if(!strcmp(devName,"Net"))
  {
  SetupDiGetDeviceInstanceId(hDevInfo,&DeviceInfoData,instanceId,128,NULL);
  if(!strncmp(instanceId,"PCI",3))
  {
  wprintf(L"%s\n",guid);
  printf("%s\n",devName);
  printf("%s\n",instanceId);
  SP_PROPCHANGE_PARAMS params = {sizeof(SP_CLASSINSTALL_HEADER )};
  params.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
  params.Scope = DICS_FLAG_CONFIGSPECIFIC;
  // params.StateChange = DICS_ENABLE; //禁用:DICS_DISABLE,DICS_ENABLE启用
params.StateChange = DICS_DISABLE; //禁用:DICS_DISABLE,DICS_ENABLE启用
  params.HwProfile = 0;
  SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData, (SP_CLASSINSTALL_HEADER*)&params, sizeof(SP_PROPCHANGE_PARAMS));
  SetupDiChangeState(hDevInfo, &DeviceInfoData);
  }
  }
  CoTaskMemFree(guid);
 }
}
int main(int argc, char* argv[])
{
 HDEVINFO hDevInfo = INVALID_HANDLE_VALUE;
 hDevInfo = SetupDiGetClassDevs(NULL,NULL,NULL, DIGCF_PRESENT | DIGCF_ALLCLASSES);
 if(INVALID_HANDLE_VALUE == hDevInfo)
  return GetLastError(); 
 EnumDevices(hDevInfo);
 SetupDiDestroyDeviceInfoList(hDevInfo);
 return 0;
}

问题是当运行程序后,网卡虽然被禁用了,但可以手动启动,这样的话程序就没什么用了。是不是要从驱动层面来实现,不懂,请高手指点如何禁用网卡并且不能通过手动启动网卡。

[解决办法]
把网卡驱动删了不就行了
[解决办法]
WDM的class 过滤驱动,{4D36E972-E325-11CE-BFC1-08002bE10318}

或者设备过滤驱动,对指定网络适配器设备进行过滤

都是 LowerFilter,想法迫使其不能加载设备的上层设备驱动,如果成功了,那么之前正常的设备前可能会有一个黄叹号

热点排行