禁用和启用网卡.使用windows DDK

原创 2007年09月22日 00:58:00

 

#include <SetupAPI.h>   
#include 
<cfgmgr32.h>     
#include 
<list>
using namespace std;
//     cfgmgr32.h 在Microsoft Windows 2000 DDK 中.   
//     要用 CM_Get_DevNode_Status(...) 来查询状态.   
//---------------------------------------------------------------------------   
typedef struct  NetCardStruct   
...{   
    DWORD    Id;         
// 网卡设备号   
    AnsiString   Name;     // 网卡名   
    bool     Disabled;     // 当前是否禁用   
    bool     Changed;         // 是否更改过   
}
TNetCardStruct;   
typedef TNetCardStruct
*  PNetCardStruct;   
typedef list
<TNetCardStruct> TList;

//---------------------------------------------------------------------------   
//     EnumNetCards 枚举出网卡   
//---------------------------------------------------------------------------   
void  __fastcall EnumNetCards(TList  *NetDeviceList)   
...{   
    AnsiString     DevValue;   
    PNetCardStruct NetCard;   
    DWORD  Status, Problem;   
    LPTSTR Buffer   
= NULL;   
    DWORD  BufSize  
= 0;   
    HDEVINFO hDevInfo   
= 0;  

    
if(INVALID_HANDLE_VALUE==(hDevInfo=SetupDiGetClassDevs(NULL,NULL,0,DIGCF_PRESENT &brvbar;DIGCF_ALLCLASSES)))   
        
return

    SP_DEVINFO_DATA  DeviceInfoData 
=...{sizeof(SP_DEVINFO_DATA)};

    HKEY hKeyClass;   
    
char DeviceName[200];   
    
for(DWORD DeviceId=0;SetupDiEnumDeviceInfo(hDevInfo,DeviceId,&DeviceInfoData);DeviceId++)   
    
...{   
        
if (CM_Get_DevNode_Status(&Status, &Problem, DeviceInfoData.DevInst,0!= CR_SUCCESS)   
            
continue;   
        DevValue.SetLength(
0);   
        
if(GetRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_CLASS , &Buffer, (PULONG)&BufSize))   
            DevValue 
= Buffer;   

        
if (DevValue == "Net")   
        
...{   
            DevValue.SetLength(
0);   

            
if (GetRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_ENUMERATOR_NAME , &Buffer, (PULONG)&BufSize))   
                DevValue 
= Buffer;   

            
if (DevValue != "ROOT")   
            
...{   
                NetCard 
= new TNetCardStruct;   
                NetCard
->Id = DeviceId;   
                NetCard
->Name = "<Unknown Device>";   
                
if (GetRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DRIVER , &Buffer, (PULONG)&BufSize))   
                    
if (GetRegistryProperty(hDevInfo, &DeviceInfoData, SPDRP_DEVICEDESC , &Buffer, (PULONG)&BufSize))   
                        NetCard
->Name = Buffer;   
                NetCard
->Disabled = (Status & DN_HAS_PROBLEM) && (CM_PROB_DISABLED == Problem);   
                NetCard
->Changed = false;   
                NetDeviceList
->Add(NetCard);   
            }
   
        }
   
    }
   
}
   

//---------------------------------------------------------------------------   
bool __fastcall 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)   
        
...{   
            
if (*(LPTSTR *)Buffer) LocalFree(*(LPTSTR *)Buffer);   
            
*(LPTSTR *)Buffer = (PCHAR)LocalAlloc(LPTR,*Length);   
        }
   
        
else return false;   
    }
   
    
return (*(LPTSTR *)Buffer)[0];   
}
   


//---------------------------------------------------------------------------   
//     NetCardStateChange 网卡的启用与禁用   
//             NetCardPoint 是 PNetCardStruct 的指针.   
//             Enabled     true = 启用     false = 禁用   
//---------------------------------------------------------------------------   
bool __fastcall NetCardStateChange(void * NetCardPoint, bool Enabled)   
...{   
    PNetCardStruct NetCard 
= (PNetCardStruct)NetCardPoint;   
    DWORD DeviceId 
= NetCard->Id;   
    HDEVINFO hDevInfo 
= 0;   
    
if (INVALID_HANDLE_VALUE == (hDevInfo =   
        SetupDiGetClassDevs(NULL,NULL,
0,DIGCF_PRESENT &brvbar;DIGCF_ALLCLASSES)))   
        
return false;   
    SP_DEVINFO_DATA DeviceInfoData 
= ;   
    DWORD Status, Problem;   
    
if (!SetupDiEnumDeviceInfo(hDevInfo,DeviceId,&DeviceInfoData))   
        
return false;   

    
if (CM_Get_DevNode_Status(&Status, &Problem,   
        DeviceInfoData.DevInst,
0!= CR_SUCCESS)   
        
return false;   

    SP_PROPCHANGE_PARAMS PropChangeParams 
= ;   
    PropChangeParams.ClassInstallHeader.InstallFunction 
= DIF_PROPERTYCHANGE;   
    PropChangeParams.Scope 
= DICS_FLAG_GLOBAL;   
    
if (Enabled)   
    
...{   
        
if (!((Status & DN_HAS_PROBLEM) && (CM_PROB_DISABLED == Problem)))   
        
...{   
            NetCard
->Disabled = false;   
            
return false;   
        }
   
        PropChangeParams.StateChange 
= DICS_ENABLE;   
    }
   
    
else   
    
...{   
        
if ((Status & DN_HAS_PROBLEM) && (CM_PROB_DISABLED == Problem))   
        
...{   
            NetCard
->Disabled = true;   
            
return false;   
        }
   
        
if (!((Status & DN_DISABLEABLE) && (CM_PROB_HARDWARE_DISABLED != Problem)))   
            
return false;   
        PropChangeParams.StateChange 
= DICS_DISABLE;   
    }
   

    
if (!SetupDiSetClassInstallParams(hDevInfo, &DeviceInfoData,   
        (SP_CLASSINSTALL_HEADER 
*)&PropChangeParams, sizeof(PropChangeParams)))   
        
return false;   
    
if (!SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hDevInfo, &DeviceInfoData))   
        
return false;   
    
if (CM_Get_DevNode_Status(&Status, &Problem,   
        DeviceInfoData.DevInst,
0== CR_SUCCESS)   
        NetCard
->Disabled = (Status & DN_HAS_PROBLEM) && (CM_PROB_DISABLED == Problem);   
    
return true;   
}
  

VC启用(禁用)网卡 支持win7等64位系统

  • 2015年01月23日 10:32
  • 151KB
  • 下载

程序禁用启用网络/网卡

 关于C++程序实现禁用启用网络/网卡,我四月份好像贴出过一个函数,结果后来搞得网上到处都是。好些人还在给我mail问我一些相关的问题,现在把已经修改好的函数再贴一次。//--------------...
  • weilaixi
  • weilaixi
  • 2009年01月22日 10:29
  • 4799

在程序中移除U盘

转载请标明是引用于 http://blog.csdn.net/chenyujing1234  欢迎大家拍砖   代码下载(VS2008编译器):http://www.rayfile.com/zh...
  • chenyujing1234
  • chenyujing1234
  • 2012年11月03日 22:35
  • 4659

整理SetupDixxx函数

前几天写了两篇关于Pnp管理器的博文,在继续写相关博文前我想整理一下Pnp管理器在用户态导出的功能,也就是我们熟悉的windows设备管理器。为什么说windows设备管理器是Pnp管理器导出在用户态...
  • lixiangminghate
  • lixiangminghate
  • 2016年07月02日 18:05
  • 1442

Windows 下通过命令行启用、禁用网卡

建议将系统的网卡名改成英文名,这样在输入命令的时候会很方便。 例如: 第一块无线网卡可取名为 wlan0 第一块有线网卡可取名为 eth0,依此类推。 我电脑中的网卡命名如下图所示: 首先以管...
  • wym880124
  • wym880124
  • 2013年11月23日 14:18
  • 14112

bat脚本控制网卡的禁用和启用

纯bat脚本搞定控制网卡的禁用和启用
  • yuhentian
  • yuhentian
  • 2017年11月05日 18:23
  • 420

禁用和启用网卡.使用windows DDK

 #include SetupAPI.h>   #include cfgmgr32.h>     #include list>using namespace std;//     cfgmgr32.h...
  • purplethunder
  • purplethunder
  • 2007年09月22日 00:58
  • 1767

在程序中移除U盘

说明:cr = CM_Request_Device_Eject( DeviceInfoData.DevInst, &pnpvietotype, vetoname, len, 0 ); //没有气泡提示...
  • goingup
  • goingup
  • 2008年09月15日 13:36
  • 2491

检测网卡状态(禁用,启用)

#include #pragma comment(lib, "IPHLPAPI.lib") ////////////////////// void CMFCTestDlg::OnBnClicked...
  • jiht594
  • jiht594
  • 2011年11月08日 19:10
  • 3325

c#中禁用和开启网卡

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin...
  • lingfengstar1
  • lingfengstar1
  • 2017年06月05日 22:04
  • 554
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:禁用和启用网卡.使用windows DDK
举报原因:
原因补充:

(最多只允许输入30个字)