SetupDiGetClassDevs函数详解

SetupDiGetClassDevs函数
SetupDiGetClassDevs 函数返回一个包含本机上所有被请求的设备信息的设备信息集句柄。

语法

//C++:
HDEVINFO SetupDiGetClassDevs(
  _In_opt_ const GUID   *ClassGuid,
  _In_opt_       PCTSTR Enumerator,
  _In_opt_       HWND   hwndParent,
  _In_           DWORD  Flags
);

参数
ClassGuid[输入参数,可选的]
一个指向GUID的指针,此GUID可标识一个设备安装类或一个设备接口类。这个指针是可选的,并且可以为NULL。更多关于ClassGuid赋值问题,请参考备注部分。

Enumerator[输入参数,可选的]
一个指向以空字符结束的字符串的指针,指定了:

即插即用设备枚举树的ID,此ID既可以是全局唯一标识符(GUID)也可以是符号名称。比如:“PCI”可以用于指定PCI的PnP值,符号名称则包括像“USB”,“PCMCIA”和“SCSI”这样的Pnp值。

一个PnP设备句柄ID。当指定了一个PnP设备句柄ID时,DIGCF_DEVICEINTERFACE必须在Flag参数上被设置。

hwndParent[输入参数,可选的]
用于与在设备信息集中安装设备实例相关联的用户界面的顶级窗口句柄。该句柄是可选的,并且可以为NULL。

Flags[输入参数]
Flags是一个DWORD类型的变量,通过此参数来过滤指定的设备信息集中的设备。此参数可以是以下标志位中的一个或多个的按位或组合,更多有关标志位组合的信息,请参考备注部分。

DIGCF_ALLCLASSES
  返回所有已安装设备的列表或所有设备接口类。

DIGCF_DEVICEINTERFACE
  返回支持指定设备接口类的设备。如果Enumerators参数制定了设备的实例ID,那么必须在Flags参数中设置此标志位。

DIGCF_DEFAULT
  对于指定的设备接口类,只返回与系统默认设备接口相关联的设备(如果已设置的话)。

DIGCF_PRESENT
  只返回当前系统中存在的(已连接)设备。

DIGCF_PROFILE
  只返回当前硬件列表中的一部分设备。

返回值
如果调用成功,SetupDiGetClassDevs将返回一个设备信息集的句柄,该句柄包含了与所提供参数所匹配的所有设备。如果调用失败,函数返回INVALID_HANDLE_VALUE。要进一步获取错误信息,请调用GetLastError。

备注
当调用完此函数并处理完相应数据后,必须调用SetupDiDestroyDeviceInfoList函。

调用SetupDiGetClassDevsEx来检索远程计算机上的设备。
如果SetupDiGetClassDevs使用完,不释放掉的话,就会一直增长句柄数,内存也大大的增加。。
解决方法:

BOOL
WINAPI
SetupDiDestroyDeviceInfoList(
    __in HDEVINFO DeviceInfoSet
    );

设备安装类控制选项
使用以下过滤选项来控制SetupDiGetClassDevs是否返回所有设备:

要返回所有设备,设置标志位DIGCF_ALLCLASSES,并将ClassGuid设置为NULL。
如果只是返回指定设备,不要动DIGCF_ALLCLASSES标志位,而是应该使用CLassGuid提供的Guid。
此外,还可以通过下面的组合来进一步控制设备的过滤条件:

设置DIGCF_PRESENT标志位来返回系统中当前已连接设备。
设置DIGCF_PROFILE标志位来返回当前硬件列表配置文件中的设备。
要想返回一个PnP枚举设备,使用Enumerator参数,并提供其GUID或符号名称。如果Enumerator为NULL,SetupDiGetClassDevs返回所有PnP枚举设备。
设备接口类控制选项
使用以下过滤选项来控制SetupDiGetClassDevs是否返回支持任何设备接口类的设备或仅返回支持指定设备接口类的设备:

要返回支持任何类接口的设备,请同时设置DIGCF_DEVICEINTERFACE和DIGCF_ALLCLASSES标志位,并将ClassGuid设置为NULL。该函数将设备信息设置为表示这种设备的设备信息元素,然后向设备信息元素添加包含设备支持的所有设备接口的设备接口列表。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值