我是靠谱客的博主 迷人超短裙,最近开发中收集的这篇文章主要介绍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。该函数将设备信息设置为表示这种设备的设备信息元素,然后向设备信息元素添加包含设备支持的所有设备接口的设备接口列表。

最后

以上就是迷人超短裙为你收集整理的SetupDiGetClassDevs函数详解的全部内容,希望文章能够帮你解决SetupDiGetClassDevs函数详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部