|
HDEVINFO m_hDevInfo = ::SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_ALLCLASSES | DIGCF_PRESENT);
然后使用SetupDiEnumDeviceInfo枚举类型中所有的设备
以下为引用:
SP_DEVINFO_DATA did = { sizeof(SP_DEVINFO_DATA) };
for(int i=0; ::SetupDiEnumDeviceInfo(m_hDevInfo, i, &did); i++)
{
//...
}
在找到要处理的设备后,应该用CM_Get_DevNode_Status函数和注册表获取其状态,忽略被隐藏的设备。
以下为引用:
bool CDeviceManager::IsClassHidden(const GUID *ClsGuid) const
{
HKEY hKeyClass = ::SetupDiOpenClassRegKey(ClsGuid, KEY_READ);
bool hidden = false;
if(INVALID_HANDLE_VALUE != hKeyClass)
{
hidden = ERROR_SUCCESS == ::RegQueryValueEx(hKeyClass, REGSTR_VAL_NODISPLAYCLASS, NULL, NULL, NULL, NULL);
::RegCloseKey(hKeyClass);
}
return hidden;
}
DWORD dwStatus = 0, dwProblem = 0;
if(CR_SUCCESS != ::CM_Get_DevNode_Status(&dwStatus, &dwProblem, did.DevInst,0))
{
DisplayError("CM_Get_DevNode_Status");
continue;
}
if(dwStatus & DN_NO_SHOW_IN_DM || IsClassHidden(&did.ClassGuid))
{
continue;
}
对剩下的设备则根据其Class进行过滤,只处理Net类型设备,如果前面指定只获取Net设备则此步骤可以忽略。
以下为引用:
| 网游盗号木马实现手记 | 01-09 |
| 黑色技术蠕虫下载者[完整源码] | 11-01 |
| 利用BCB自己打造QQ炸弹 | 10-23 |
| 从内存中加载并启动一个exe(delp | 09-27 |
| 开启和关闭Windows xp 防火墙(de | 09-27 |
| 让你的程序通过XP防火墙(delphi编 | 09-27 |
| 如何让你的程序安全通过windows防 | 08-20 |
| 如何透过程序来控制 Windows (XP | 08-20 |
| 动易2005-2006算号器的源代码 | 08-11 |
| API对注册表进行操作(Delphi编程 | 07-30 |
| 一段隐藏注册表项的代码 | 07-26 |
| 了解VB编写病毒的大体方法 | 07-02 |