问题标签 [setupapi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - SetupDiGetClassDevs 是否与记录的设备实例 ID 一起使用?
根据 MSDN 文档,SetupDiGetClassDevs可以传递一个设备实例 ID来获取为特定设备设置的设备信息:
要仅返回特定设备,请设置 DIFCF_DEVICEINTERFACE 标志并使用 Enumerator 参数提供设备的设备实例 ID。
我通过解析WM_DEVICECHANGE
消息事件中的符号名称来获取设备实例 ID,并通过将结果 ID 与从SetupDiGetDeviceInstanceIdDBT_DEVICEARRIVAL
返回的 ID 进行比较来验证结果 ID 。即使传递操作系统提供的设备实例 ID 也不起作用(即 SetupDiGetClassDevs 调用失败并显示)。ERROR_INVALID_PARAMETER
我目前为新到达的设备获取SP_DEVINFO_DATA
结构的解决方法是枚举同一类中的所有设备,并将 SetupDiGetDeviceInstanceId 的结果与符号名称进行比较。但是,根据文档,我不明白为什么这应该是必要的......
有没有人让 SetupDiGetClassDevs 以这种方式工作?有没有更好的方法来获取使用 DBT_DEVICEARRIVAL 事件中的数据的设备的更多信息?
setupapi - SetupDiGetClassDescription 返回 FALSE,设置错误 0xE0000206
在过去的几天里,我一直在使用 Windows 2003 上的 SetupApi,但我看到了一堆我没有预料到的错误。例如,如果我传递GUID_NULL
给SetupDiGetClassDescription
,它会返回 FALSE 并GetLastError()
返回0xE0000206
。
GUID_NULL 来自SetupDiEnumDeviceInfo
;我不是故意这样做的。
我也看到了错误0xE0000209
。这些“0xE”错误值在哪里声明、定义或记录?
c# - DeviceAttached 消息永远不会出现
我正在尝试开发一个可以与 USB HID 通信的 C# 应用程序。我已经重写了我的 WndProc 方法,以便捕获所有 WM_DEVICECHANGE 事件并将 DeviceChange 方法传递给方法 OnDeviceChange(此代码实际上是从 Jan Axelson 借来的),看起来像这样......
但不知为何,每次我插入一个设备,无论是鼠标、键盘还是我正在开发的设备,都是 HID 的,WParam 的值总是 0x7;
我检查了 DBT.h 并且 0x0007 的值是......
我不会在收到第一条消息后停下来,我会查看所有消息,并且对于每条消息,值始终为 0x0007。为什么我从未看到 DeviceAttached 或 DeviceRemoved 事件?
有一些USB经验的人有什么想法吗?
windows - WMI的内部工作?
我很好奇 WMI 是如何工作的。特别是,我目前正在使用 WMI 通过“Select * from Win32_DesktopMonitor”查询物理监视器,因为它始终为我提供跨多个平台的正确结果,因为我想知道物理监视器的数量,而不是由函数返回的虚拟监视器,例如GetSystemMetrics 和 EnumDisplays。我还探索了 SetupAPI,它像设备管理器一样检查注册表,但在 Vista 之前的 Windows 版本中会错误地返回幻像监视器。
我尝试使用 wbemtest.exe 生成的 procmon.exe 和我自己的可执行文件进行查询来跟踪 API 调用和观察事件,但没有找到太多。
任何对 WMI 内部工作原理的深入了解、API 调用的更深入跟踪或对监视器进行计数的可靠方法都将不胜感激。
小笔记:使用 C++
c++ - SetupAPI.DLL 到 HID.DLL
使用 SetupAPI 我执行函数SetupDiGetClassDevs
并获取指针或句柄。
然后我开始一个循环并运行:
和
获得所需的尺寸SP_DEVICE_INTERFACE_DATA
。
然后我设置这个大小并再次执行:
从我得到的数据结构中:
DevicePath
如果我想要的话,我相信来自SP_DEVINFO_DATA
注册表的大量信息。
我真正想要的是访问 HID 库并调用
从这个枚举设备HidD_GetAttributes
中获取VendorID
、ProductID
和VersionNumber
,这样我就可以识别设备。
我希望这个特定信息将来自 USB 设备本身。谁能告诉我该怎么做?
顺便说一句,在我的 Windows XP 版本中,我使用的是注册表路径,但我找不到HKEY_LOCAL_MACHINE\Enum\HID\...\Class
.
我什至没有找到HKEY_LOCAL_MACHINE\Enum\
。我认为这是因为我没有执行该功能SetupDiEnumDeviceInterfaces
。
我只能在 Lakeview Research 中找到完整的数据。但它不包括这个主题。为什么当它是垃圾时,它会遍布整个网络?
windows - 获取磁盘设备的物理设备对象名称
我需要从 Windows 上的用户模式应用程序中检索磁盘设备的“物理设备对象名称”,如设备管理器中所示。
我现在有一个解决方案,它涉及通过 IOCTL 加载和询问的内核驱动程序。一旦进入内核领域,我就可以毫不费力地获得这个名字。如果可能的话,我想避免使用内核模块。
有任何想法吗?
windows-7 - dpinst / DifX 不会静默安装签名的驱动程序
通过 DpInst 在 Windows 7 上安装已签名的驱动程序(即带有正确签名的 .CAB)时,除非它是 WHQL 签名的驱动程序,否则您不能静默安装它。如果您在非静默模式下运行 DpInst,它会提示您信任“发布者”。如果您在静默模式下运行 DpInst,它将失败并显示与签名相关的错误代码(类似于 0x800b0109 - 检查您的 setupapi.app.log)。
windows - 如何枚举所有设备对象?
对不起我的英语不好。我想枚举系统中所有指向 DEVICE_OBJECT 的指针。我知道这可以从用户模式完成,但我忘了。可能是在 ZwQueryDirectiryObject 或 SetupAPI.. 的帮助下?
c++ - 可以使用 SetupAPI 检索 .inf 文件中行的键吗?
我正在使用 Setup API 中的函数 SetupGetLineText ( http://msdn.microsoft.com/en-us/library/aa377388(v=VS.85).aspx ) 从 inf 文件的部分中读取一行.
行的格式为:
SetupGetLineText 似乎返回值部分。很好,但我也想知道我正在阅读的当前上下文的关键是什么。Setup API 中似乎没有用于读取密钥的函数。
任何有关如何检索密钥的帮助将不胜感激。
delphi - “SetupOpenInfFile”在 Delphi2010 中出现访问冲突错误
在 Delphi 2010 中使用以下行代码时,出现“访问冲突”错误,但相同的代码在 VC++ 中运行良好。
Delphi 2010 代码是
VC++ 代码是
请帮我解决这个问题。谢谢大家。