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

文章讲述了作者在使用SetupDiGetDeviceProperty函数获取设备属性时遇到的困扰,尤其是在处理DEVPROPKEY和库导入顺序上的问题。最终在StackOverflow找到解决方案,指出官方文档的不足。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

关于SetupDiGetDeviceProperty函数的第三个参数(const DEVPROPKEY *PropertyKey),翻遍了官方文档,也没找到具体的使用方法,直接按文档里赋值一直提示“错误 LNK2001:未解析的外部符号”。折腾了大半天,终于在StackOverflow上找到了同问题。

简单介绍

因为个人项目,需要在windows平台上使用设备管理器相关API获取到特定设备的相关属性。查阅了相关资料后找到了微软官方的提供SetupDi系列的函数。

关于获取设备的属性,大多数人使用函数是SetupDiGetDeviceRegistryProperty,可以理解为这个函数是用于获取设备的注册表属性值,其具体的使用方法不是本文重点,重点是其属性值是有限的,找不到本人相应查找的属性。
因此找到了SetupDiGetDeviceProperty函数,相比前一个函数,这个函数可以直接获取用于描述设备的特征属性值,而不是从注册表中获取,因此其提供的可选属性值更多。

具体方法

关于前置的SetupDiGetClassDevs,SetupDiEnumDeviceInfo请参考其他资料。
在具体使用SetupDiGetDeviceProperty时,第三个参数正确做法是直接使用官方提供的属性键,并用&取址。

SetupDiGetDeviceProperty(deviceInfoSet, &deviceInfoData, &DEVPKEY_Device_DriverDesc, &propertyType, (BYTE*)propertyBuffer, sizeof(propertyBuffer), &requiredSize, 0))

官方提供的属性键定义在 #include <devpkey.h> 库中。

重点来了
不能只导入这个库,还需要导入下面这两个库,并且initguid库要在devpropdef库的前面,然后再导入devpkey库,具体使用如下:

#include <initguid.h>   // include before devpropdef.h
#include <devpropdef.h>

#include <devpkey.h>        // struct DEVPROPKEY

然后终于解决了前面的问题,感谢stackoverflow上的原问题。
吐槽一下,微软官方文档写的真不完善。

参考链接

stackoverflow 原问题链接

微软官方文档-setupdigetdeviceproperty

微软官方文档2-DEVPROPKEY

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值