问题标签 [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.

0 投票
2 回答
8090 浏览

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 事件中的数据的设备的更多信息?

0 投票
1 回答
1124 浏览

setupapi - SetupDiGetClassDescription 返回 FALSE,设置错误 0xE0000206

在过去的几天里,我一直在使用 Windows 2003 上的 SetupApi,但我看到了一堆我没有预料到的错误。例如,如果我传递GUID_NULLSetupDiGetClassDescription,它会返回 FALSE 并GetLastError()返回0xE0000206

GUID_NULL 来自SetupDiEnumDeviceInfo;我不是故意这样做的。

我也看到了错误0xE0000209。这些“0xE”错误值在哪里声明、定义或记录?

0 投票
2 回答
1529 浏览

c# - DeviceAttached 消息永远不会出现

我正在尝试开发一个可以与 USB HID 通信的 C# 应用程序。我已经重写了我的 WndProc 方法,以便捕获所有 WM_DEVICECHANGE 事件并将 DeviceChange 方法传递给方法 OnDeviceChange(此代码实际上是从 Jan Axelson 借来的),看起来像这样......

但不知为何,每次我插入一个设备,无论是鼠标、键盘还是我正在开发的设备,都是 HID 的,WParam 的值总是 0x7;

我检查了 DBT.h 并且 0x0007 的值是......

我不会在收到第一条消息后停下来,我会查看所有消息,并且对于每条消息,值始终为 0x0007。为什么我从未看到 DeviceAttached 或 DeviceRemoved 事件?

有一些USB经验的人有什么想法吗?

0 投票
2 回答
695 浏览

windows - WMI的内部工作?

我很好奇 WMI 是如何工作的。特别是,我目前正在使用 WMI 通过“Select * from Win32_DesktopMonitor”查询物理监视器,因为它始终为我提供跨多个平台的正确结果,因为我想知道物理监视器的数量,而不是由函数返回的虚拟监视器,例如GetSystemMetrics 和 EnumDisplays。我还探索了 SetupAPI,它像设备管理器一样检查注册表,但在 Vista 之前的 Windows 版本中会错误地返回幻像监视器。

我尝试使用 wbemtest.exe 生成的 procmon.exe 和我自己的可执行文件进行查询来跟踪 API 调用和观察事件,但没有找到太多。

任何对 WMI 内部工作原理的深入了解、API 调用的更深入跟踪或对监视器进行计数的可靠方法都将不胜感激。

小笔记:使用 C++

0 投票
1 回答
5100 浏览

c++ - SetupAPI.DLL 到 HID.DLL

使用 SetupAPI 我执行函数SetupDiGetClassDevs并获取指针或句柄。

然后我开始一个循环并运行:

获得所需的尺寸SP_DEVICE_INTERFACE_DATA

然后我设置这个大小并再次执行:

从我得到的数据结构中:

DevicePath如果我想要的话,我相信来自SP_DEVINFO_DATA注册表的大量信息。

我真正想要的是访问 HID 库并调用 从这个枚举设备HidD_GetAttributes中获取VendorIDProductIDVersionNumber,这样我就可以识别设备。

我希望这个特定信息将来自 USB 设备本身。谁能告诉我该怎么做?

顺便说一句,在我的 Windows XP 版本中,我使用的是注册表路径,但我找不到HKEY_LOCAL_MACHINE\Enum\HID\...\Class.

我什至没有找到HKEY_LOCAL_MACHINE\Enum\。我认为这是因为我没有执行该功能SetupDiEnumDeviceInterfaces

我只能在 Lakeview Research 中找到完整的数据。但它不包括这个主题。为什么当它是垃圾时,它会遍布整个网络?

0 投票
1 回答
3397 浏览

windows - 获取磁盘设备的物理设备对象名称

我需要从 Windows 上的用户模式应用程序中检索磁盘设备的“物理设备对象名称”,如设备管理器中所示。

我现在有一个解决方案,它涉及通过 IOCTL 加载和询问的内核驱动程序。一旦进入内核领域,我就可以毫不费力地获得这个名字。如果可能的话,我想避免使用内核模块。

有任何想法吗?

0 投票
4 回答
9164 浏览

windows-7 - dpinst / DifX 不会静默安装签名的驱动程序

通过 DpInst 在 Windows 7 上安装已签名的驱动程序(即带有正确签名的 .CAB)时,除非它是 WHQL 签名的驱动程序,否则您不能静默安装它。如果您在非静默模式下运行 DpInst,它会提示您信任“发布者”。如果您在静默模式下运行 DpInst,它将失败并显示与签名相关的错误代码(类似于 0x800b0109 - 检查您的 setupapi.app.log)。

0 投票
1 回答
539 浏览

windows - 如何枚举所有设备对象?

对不起我的英语不好。我想枚举系统中所有指向 DEVICE_OBJECT 的指针。我知道这可以从用户模式完成,但我忘了。可能是在 ZwQueryDirectiryObject 或 SetupAPI.. 的帮助下?

0 投票
2 回答
501 浏览

c++ - 可以使用 SetupAPI 检索 .inf 文件中行的键吗?

我正在使用 Setup API 中的函数 SetupGetLineText ( http://msdn.microsoft.com/en-us/library/aa377388(v=VS.85).aspx ) 从 inf 文件的部分中读取一行.

行的格式为:

SetupGetLineText 似乎返回值部分。很好,但我也想知道我正在阅读的当前上下文的关键是什么。Setup API 中似乎没有用于读取密钥的函数。

任何有关如何检索密钥的帮助将不胜感激。

0 投票
2 回答
548 浏览

delphi - “SetupOpenInfFile”在 Delphi2010 中出现访问冲突错误

在 Delphi 2010 中使用以下行代码时,出现“访问冲突”错误,但相同的代码在 VC++ 中运行良好。

Delphi 2010 代码是

VC++ 代码是

请帮我解决这个问题。谢谢大家。