const std::string CDeviceManager::GetProperty(SP_DEVINFO_DATA& did, DWORD Property) const
{
std::string buf;
DWORD dwLength = 0;
while(!::SetupDiGetDeviceRegistryProperty(m_hDevInfo, &did, Property, NULL,
(PBYTE)buf.c_str(), buf.size(), &dwLength))
{
if(::GetLastError() == ERROR_INSUFFICIENT_BUFFER)
{
buf.resize(dwLength * sizeof(wchar_t));
std::fill(buf.begin(), buf.end(), '\0');
}
else
{
break;
}
}
buf.resize(strlen(buf.c_str()));
return buf;
}
if(stricmp(GetProperty(did, SPDRP_CLASSGUID).c_str(), "{4d36e972-e325-11ce-bfc1-08002be10318}") == 0)
{
// ...
}
满足上述限制的设备,就是我们要处理的网卡。可以直接修改其状态:SetupDiSetClassInstallParams函数设置参数;SetupDiCallClassInstaller完成参数修改。
以下为引用:
bool CDeviceManager::ChangeDeviceState(SP_DEVINFO_DATA& did, DWORD State) const
{
SP_PROPCHANGE_PARAMS pcp = {sizeof(SP_CLASSINSTALL_HEADER)};
pcp.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE;
pcp.Scope = (State == DICS_START || State == DICS_STOP )? DICS_FLAG_CONFIGSPECIFIC : DICS_FLAG_GLOBAL;
pcp.StateChange = State;
if(!::SetupDiSetClassInstallParams(m_hDevInfo, &did,
(SP_CLASSINSTALL_HEADER *)&pcp, sizeof(pcp)))
{
DisplayError("SetupDiSetClassInstallParams");
return false;
}
//
// Call the ClassInstaller and perform the change.
//
if(!::SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, m_hDevInfo, &did))
{
DisplayError("SetupDiCallClassInstaller");
}
return true;
}
ChangeDeviceState(did, DICS_STOP); // 停止
ChangeDeviceState(did, DICS_START); // 启动
ChangeDeviceState(did, DICS_ENABLE); // 启用
ChangeDeviceState(did, DICS_DISABLE); // 禁用
| Visual C++编程窃取QQ密码 | 12-08 | |
| 编程实现重起网卡等设备 | 12-07 | |
| 一个邮件群发的Delphi代码! | 12-06 | |
| Delphi下Internet的编程技巧 | 11-20 | |
| Delphi黑客编程-如何映射虚拟盘 | 11-15 | |
| 用DETOURS库获取NT管理员权限 | 11-08 | |
| 一篇关于vb代码质量提高的文章 | 10-30 | |
| 解析Asp.net木马文件操作 | 10-04 | |
| 盗QQ源码 | 10-01 | |
| 如何映射肉鸡磁盘(Delphi黑客编程 | 09-24 | |
| 打造无DLL版穿墙Downloader(Delp | 09-22 | |
| 调用指定的Windows程序(Delphi编 | 09-19 | |