使用SetupDI* API列举系统中的设备

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
Instroduction
在Windows系统中提供一组有用的函数来撷取以安装设备(Device)的信息与增加或解除设备(Device)的安装。在本文中,我将显示如何使用SetupDIXXX与CM_XXX 等API来列举本机上的设备。
在范例程序中并无复杂的画面,只有一个简单的TreeViewListView控件。TreeLivew控件用来显示所有安装的设备名称,ListView控件则用来显示在TreeView控件中所指定项目的相关信息。所有设备的相关信息(例如:名称,资源与图示等)都是从SetupDiXXX API中所取得的。

SetupDiXXX

设定安装程序接口 (Setup Application Programming Interface) 提供一组函数来让您的设定安装程序能执行安装的动作或取得设备的相关信息,类别 (Class) 与它的 GUID 值。
首先要取的所列举的设备的位图 (Bitmap) ,我们可以呼叫以下的函数:
SetupDiGetClassImageList([OUT]CLASSIMAGELIST_DATA ClassImageListData);
呼叫这个函数会取得每一个已安装设备的位图并建立位图串行。
SetupDiDestroyClassImageList([IN] PSP_CLASSIMAGELIST_DATA
                                                            ClassImageListData);
呼叫这个函数会释放之前呼叫 SetupDiGetClassImageList 所占有的资源。
SetupDiGetClassImageIndex([IN] PSP_CLASSIMAGELIST_DATA
                                                                       ClassImageListData,
                                           [IN] LPGUID ClassGuid,
                                           [OUT] PINT ImageIndex);
呼叫这个函数会取得每一个已安装设备的位图的索引值。
hDevInfo = SetupDiGetClassDevs(0L, 0L, _hDlg, DIGCF_PRESENT |
                                                    DIGCF_ALLCLASSES | DIGCF_PROFILE);
取得设备的信息。首次呼叫时,第一个参数与第二个参数将它们设为 ”0 ,而第三个参数则设定
Qt案例 调用WINDOWS API中的SETUPAPI.H库获取设备管理器中设备的详细信息中的属性值(二) 使用Qt调用windows api中的setupapi.h库中的SetupDiGetDeviceRegistryPropertySetupDiGetDeviceProperty函数获取设备管理器中的设备详细信息中的属性值,包括设备实例路径,硬件id,驱动inf称,驱动版本,显示称,类,供应商,设备描述等属性值。 阅读详情

相关推荐

关于SetupDiGetDeviceProperty函数的第三个参数如何设置

因为个人项目,需要在windows平台上使用设备管理器相关API获取到特定设备的相关属性。查阅了相关资料后找到了微软官方的提供SetupDi系列的函数。关于获取设备的属性,大多数人使用函数是,可以理解为这个函数是用于获取设备的注册表属性值,其具体的使用方法不是本文重点,重点是其属性值是有限的,找不到本人相应查找的属性。因此找到了函数,相比前一个函数,这个函数可以直接获取用于描述设备的特征属性值,而不是从注册表中获取,因此其提供的可选属性值更多。

qq_43024858的博客 1289

如何安装一个设备驱动程序[转]

本质上,安装驱动需要依靠UpdateDriverForPlugAndPlayDevices这个函数。它需要的参数其实不多,主要是INF文件路径等。BOOL WINAPIUpdateDriverForPlugAndPlayDevices(HWND  hwndParent,LPCTSTR  HardwareId,LPCTSTR  FullInfPath,DWORD  InstallFlags,

immcss的专栏 5380

SetupDi 获取设备信息的两个方法

#include "stdio.h" #include #include #pragma comment(lib, "setupapi.lib") void PrintDevicesInfo1() { HDEVINFO hDevInfo = SetupDiGetClassDevs(NULL, NULL, NULL, DIGCF_ALLCLASSES); if (hDevInfo ==

thanklife的专栏 5764

SetupDiGetClassDevs SetupDiEnumDeviceInfo SetupDiGetDeviceRegistryProperty 枚举设备手机

1函数定义编辑 HDEVINFO SetupDiGetClassDevs( const GUID* ClassGuid, PCTSTR Enumerator, HWND hwndParent, DWORD Flags ); 2参数说明编辑 输入参数: PGUIDClassGuid 在创建设备列表的时候提供一个指向GU

jiweihong的专栏 5893

SetupDi* 启用/禁用网卡

#include #include #include #include #include // cfgmgr32.h 在Microsoft Windows 2000 DDK 中. #pragma comment(lib,"setupapi.lib") BOOL I

eric422113的专栏 6930

Windows驱动SetupDi系列函数之枚举USB/PCIe设备

Windows开发过程中,有时候需要进行设备信息的管理,那么SetupDi系列函数能够满足你的要求。

Zander0的博客 5549

SetupDi系列函数

SetupDiClassGuidsFromName WINSETUPAPI BOOL SetupDiClassGuidsFromNameA( PCSTR ClassName, LPGUID ClassGuidList, DWORD ClassGuidListSize, PDWORD RequiredSize ); SetupDiClassGuidsFromName函数检索与指...

weixin_30404405的博客 1109

实战DeviceIoControl 之五:列举已安装的存储设备

Q 前几次我们讨论的都是设备比较清楚的情况,有了设备(路径),就可以直接调用CreateFile打开设备,进行它所支持的I/O操作了。如果事先并不能确切知道设备,如何去访问设备呢? A 访问设备必须用设备句柄,而得到设备句柄必须知道设备路径,这个套路以你我之力是改变不了的。每个设备都有它所属类型的GUID,我们顺着这个GUID就能获得设备路径。 GUID是同类或同种设备的全球唯一识别码,

gaiazhang‘s blog 740

整理SetupDixxx函数

前几天写了两篇关于Pnp管理器的博文,在继续写相关博文前我想整理一下Pnp管理器在用户态导出的功能,也就是我们熟悉的windows设备管理器。为什么说windows设备管理器是Pnp管理器导出在用户态的功能?因为当系统中加入设备时,Pnp管理器会在系统中搜索已有驱动能否匹配该设备(通过Inf文件的硬件列表和兼容列表)。如果匹配到一个驱动,那就执行服务端安装;如果很不幸,没有匹配到合适的驱动,就会执

lixiangminghate的专栏 3896

SetupDiGetDeviceRegistryProperty使用SetupDi系列函数进行设备信息的管理(三)

WINSETUPAPI BOOL WINAPI  SetupDiGetDeviceRegistryProperty(    IN HDEVINFO  DeviceInfoSet,    IN PSP_DEVINFO_DATA  DeviceInfoData,    IN DWORD  Property,    OUT PDWORD  PropertyRegDataType,  OPTIONAL  

1万+

自动安装卸载驱动程序的源码

呵呵,我本来希望我是往硬件底层驱动程序发展的,本来专业就是电路方面的,这两年也做过usb驱动的一些东西,虽然能用,但是心里一直感觉不舒服,对wdm的掌握总感觉有点飘忽,所以假期中在看unix的操作系统实现,现在心里有点底了,可是没有真的写过彻底的驱动程序,总有点心虚,呵呵,贴个帖子,以前bbs上的,自己也写过,也不知道到哪里了,所以直接把人家的贴上来好了,#include "stdafx.h"

Kay's Blog 4081

Windows下枚举USB设备信息Demo

Windows开发过程中,有时候需要进行设备信息的管理,那么SetupDi系列函数能够满足你的要求。

mickey2007的博客 1484

一个可以禁用USB存储设备的程序(SetupAPI使用方法)

一个可以禁用USB存储设备的程序(SetupAPI使用方法)                                                                                 作者:WY.lslrt                                                                             

8871

C#使用SetupAPI获取设备管理器相关信息

C# 使用SetupAPI获取windows系统设备管理器相关信息             因工作需要,要获取windows系统设备管理器里的设备信息、设备驱动信息。             最开始是使用WMI来获取,但是测试后发现有一些不足:查询速度慢,查询信息分散,需要的信息没有,再就是耗时长,需要查询资料。             之后在网上查询有没有更好的方法来获取,就找到了S

jls6810的专栏 5791

使用SetupDi系列函数进行设备信息的管理

一、重要函数: 头文件setupapi.h 1、SetupDiGetClassDevs    获取一个指定类别或全部类别的所有已安装设备的信息 2、SetupDiEnumDeviceInfo  枚举指定设备信息集合的成员,并将数据放在PSP_DEVINFO_DATA中 3、SetupDiGetDeviceRegistryProperty    获得单个设备的详细信息 4、SetupDiD

pjl1119的专栏 2653

VC++实现启用与停用设备

前些日子在研究USB设备,就顺便研究了一些如何在应用程序实现USB设备的启用与停用,然后稍微深入,于是有了本文。想要实现类似设备管理器的功能,其实也不是很难,无非就是调用一些API函数,就像本文描述的,采用的API函数就是SetupDi系列的函数。不过这类函数有很多,具体的请参见MSDN,而实现设备启用、停用仅需要用到的就只有5个函数:       SetupDiGetClassDevs   

jiangdf的专栏 6997

SetUpDi系列函数获取系统设备信息

SetupDiGetClassDevs函数 The SetupDiGetClassDevs function returns a handle to a device information set that contains requested device information elements for a local machine. 我的理解也就是这个函数能返回一个包含某个

有趣的人生 一半是山川湖海 一半是初心情怀 1733
clteng
博客等级 码龄20年 0粉丝 1原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值