禁用启用网卡

//   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;
     
}

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去看一看,里面有一个列举机器的设备和启用禁用的实例,我的这个是为了应付老板,看了例子后做了一些改动。

### 回答1: 要禁用启用网卡,可以按照以下步骤操作: 禁用网卡:首先,打开操作系统的控制面板。在控制面板中,找到“网络和Internet”或类似的选项,然后点击进入。接下来,找到“网络和共享中心”或类似的选项,并点击打开。在网络和共享中心中,点击左侧的“更改适配器设置”或类似选项。这将显示计算机上安装的所有网卡。右键点击要禁用网卡,然后选择“禁用”选项。这样就成功禁用了该网卡启用网卡:若要启用之前被禁用网卡,重复上述步骤,找到“网络和共享中心”中的“更改适配器设置”选项。右键点击要启用网卡,然后选择“启用”选项。这样就成功启用了该网卡。 需要注意的是,禁用网卡会导致与该网卡相连的设备无法正常连接网络,因此在禁用之前需确认不会影响其他设备的正常使用。同样地,在启用网卡之前也需确保该网卡所连接的设备正常工作,并且有需要连接网络的需求。 ### 回答2: 要禁用一个网卡,可以通过以下步骤进行操作: 1. 首先,打开计算机的“控制面板”,可以通过在开始菜单中搜索“控制面板”来找到它。 2. 在控制面板中,找到并点击“网络和 Internet”选项。 3. 在下一个界面中,点击“网络和共享中心”。 4. 在网络和共享中心界面的左侧,点击“更改适配器设置”。 5. 这将打开一个包含所有已安装网卡的窗口。在这里,右击要禁用网卡,并选择“禁用”。 6. 出现确认对话框时,点击“是”来确认禁用。 7. 执行完以上步骤后,该网卡将被禁用,不再起作用。 如果要启用一个之前禁用网卡,可以按照以下步骤进行: 1. 重复步骤1至4,打开“更改适配器设置”窗口。 2. 在该窗口中,找到之前禁用网卡,右击并选择“启用”。 3. 也可以在禁用网卡上单击右键,然后选择“启用”。 4. 完成以上步骤后,该网卡将被启用并开始正常工作。 总结起来,禁用启用网卡的步骤相对简单,只需通过控制面板中的网络设置找到对应的网卡并进行相应的操作即可。 ### 回答3: 要禁用启用网卡,可以按照以下步骤操作: 禁用网卡: 1. 首先,打开计算机的控制面板。可以通过点击开始菜单,然后选择控制面板来打开。 2. 在控制面板中,找到并点击“网络和共享中心”或类似的选项。 3. 在网络和共享中心中,可以看到当前连接的网络。点击“更改适配器设置”链接。 4. 在适配器设置窗口中,可以看到计算机上安装的所有网络适配器。找到要禁用网卡适配器,右键点击,然后选择“禁用”选项。 5. 完成上述操作后,该网卡适配器将被禁用,不再起作用。 启用网卡: 1. 遵循上述步骤1到3,进入网络适配器设置窗口。 2. 找到之前禁用网卡适配器,右键点击,然后选择“启用”选项。 3. 完成上述操作后,该网卡适配器将被启用,可以正常使用。 请注意,禁用网卡后,计算机将无法通过该网卡适配器连接到网络或与其他设备通信。相反,启用网卡后,计算机将能够重新连接并进行网络通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值