禁用和启用网卡.使用windows DDK - David liao Stl C - ...
来源:百度文库 编辑:神马文学网 时间:2024/03/29 08:37:11
#include
#include
#include
#include
#include
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
//---------------------------------------------------------------------------
// 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 ¦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 = "
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 ¦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;
禁用和启用网卡.使用windows DDK - David liao Stl C - ...
windows xp 启用,禁用 拖放
批处理禁用和启用服务
批处理禁用和启用服务
禁用/启用Windows 7中的任务栏窗口预览 - qqread.com
liao
windows 7网卡失效
利用批处理禁用(启用)组策略
利用批处理禁用(启用)组策略
如何启用-禁用?Ubuntu?中的?root?帐号
HDU?1237?STL?的list初级使用
windows使用快捷键和小常识
如何混合使用C和C (上)
如何混合使用C和C (下)
如何混合使用C和C (上) - robin
使用Windows XP光盘来格式化C盘及安装Windows XP系统
使用 SDO 和 JDBC Data Access Service 启用面向服务的体系结构
使用 SDO 和 JDBC Data Access Service 启用面向服务的体系结构
防止网卡被禁用的具体配置方法
国家禁用的化妆品和护肤品名单,快看看有没有你正在使用和曾经使用过的?
国家禁用的化妆品和护肤品名单,快看看有没有你正在使用和曾经使用过的?
启用Windows 2003的远程桌面功能
C 标准模板库(STL)编程示例
C 标准模板库(STL)编程示例