问题标签 [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 投票
1 回答
3179 浏览

c# - 查找 HID 设备 C#

我需要连接到连接到计算机的 USB 设备,我环顾四周,找到了一些示例项目,但无法使其正常工作。一切运行良好,但我什至没有进入 while 函数。由于SetupDiGetClassDevs来自 setupapi.dll 我无法调试此功能。我确实连接了设备,所以这不是我的问题。也hInfoSet确实得到 size = 8。

0 投票
1 回答
3765 浏览

c - SetupDiGetDeviceRegistryProperty:“传递给系统调用的数据区域太小”错误

我有一个使用 SetupAPI 在 Windows XP 上枚举 USB 设备的代码:

它曾经工作多年,但现在我得到FALSESetupDiGetDeviceRegistryProperty,最后一个错误是“传递给系统调用的数据区域太小”。看来我的调用参数对应于这个函数的文档:http: //msdn.microsoft.com/en-us/library/windows/hardware/ff551967 (v=vs.85).aspx

有什么想法有什么问题吗?

0 投票
1 回答
2509 浏览

winapi - 使用 SetupDiEnumDeviceInfo 枚举设备时获取 CreateFile 的设备路径

我需要获取有关所有连接的 USB 大容量存储设备的信息。现在我正在使用这段代码来完成这项工作

如您所见,我正在使用带有“USBSTOR”枚举器的 SetupDiGetClassDevs 创建设备列表,然后使用 SetupDiEnumDeviceInfo 对其进行枚举。问题是我可以在枚举中以某种方式获取 CreateFile 调用的设备路径吗?正如我所看到的,您可以使用 SetupDiGetDeviceInterfaceDetail 获得正确的路径,但为此我应该使用 SetupDiEnumDeviceInterfaces 函数枚举设备。我试图以这种方式枚举设备,但没有任何成功。在我看来,当您使用 SetupDiEnumDeviceInterfaces 枚举设备时,您应该将设备接口 GUID 传递给 SetupDiGetClassDevs,但我找不到 USB 大容量存储设备的特定设备接口。我阅读了有关设备信息集的 msdn 文档,但我真的不明白“设备接口”是什么。

最后一个问题是:我可以在使用 SetupDiEnumDeviceInfo 枚举设备时获取设备路径吗?如果不是,我如何使用 SetupDiEnumDeviceInterfaces 枚举所有连接的 USB 大容量存储设备?

0 投票
1 回答
534 浏览

windows - Windows XP SetupAPI 拒绝从服务安装非 WHQL 签名的 .INF

我的服务正在调用SetupCopyOEMInf以安装 Authenticode但不是 WHQL签名的 INF 文件。SetupCopyOEMInf正在返回CERT_E_WRONG_USAGE(0x800B0110) 并且未安装 INF 文件。

0 投票
1 回答
450 浏览

c# - 如何使用 SetupDiGetDeviceInterfaceDetail API 检索供应商和产品 ID

我正在尝试查找 USB 卡的供应商 ID 和产品 ID。为此,我使用setupapi.dll。在我的代码中,我使用了SetupDiGetDeviceInterfaceDetail两次调用,第二次,该函数返回 true 而没有错误,但我不知道在那之后我能做什么。

我的代码:

当我尝试以下代码时,结果是 "-" :

如何获取供应商 ID 和产品 ID?

0 投票
0 回答
843 浏览

winapi - DIDEVICEINSTANCE的guidProduct字段是如何生成的

DirectInput 如何为 DIDEVICEINSTANCE 中的 guidProduct 字段生成 GUID?文档内容如下:

指导产品

产品的唯一标识符。该标识符由设备制造商建立。

我正在寻找一种在不使用 DirectInput 的情况下检索或合成操纵杆的产品 G​​UID 的方法。我已成功使用 RawInput 检索设备路径和类 GUID,但我还没有找到使用 RawInput 和/或 SetupDi* 函数检索产品 GUID 的方法。

在搜索时,我注意到MAKELONG(VID, PID) == guidProduct.Data1,这让我希望有办法做我想做的事(毕竟 DirectInput 以某种方式做到了。)

问题:

  1. 是否有用于检索 HID(尤其是操纵杆)设备的产品 G​​UID 的 API?
  2. 如果没有,有谁知道 DirectInput 如何合成这个字段?(第一个字段结合了 VID 和 PID。其余的呢?)

编辑:

通过对 guidProduct 字段进行破解,我发现了一个有趣的发现。P880 USB 游戏手柄的产品 G​​UID 具有以下格式:

前 4 个字节显然是控制器的 PID 和 VID。GUID 的最后一部分对于我拥有的所有 HID 控制器都是通用的。过了一会儿,我恍然大悟——它们是 ASCII 字符!译文是:

我已经使用 SDL2 游戏控制器数据库验证了这一点,它似乎成立了!当然,这不包括蓝牙设备(例如OUYA控制器),这只是一个小问题。

有谁知道 guidProduct 是如何为蓝牙设备组成的?

0 投票
1 回答
662 浏览

matlab - How to retrieve 'bus reported device description' for Universal Serial Bus Controllers in MATLAB?

I am trying to extract 'Bus reported device description' and 'Bus Relations' informations for Universal Serial Bus Controllers in Matlab.

I can't find it in the registry and I don't know exactly how to use setupapi.dll function in Matlab to get the informations.

I want to do this because I have a plurality of Arduino Nano devices and all of them have different COMs. I also use other USB Serial Devices under Matlab and for all of them I must create different serial objects, with different COM port names.

I want to create a Matlab function which will return what devices are connected on USB ports and what COM port they use .

I hope someone can help me with some ideas or code examples.

Thanks in advance!

0 投票
1 回答
4961 浏览

c# - 如何在给定设备路径的情况下获取 USB_DEVICE_DESCRIPTOR

我已经能够使用 SetupAPI 枚举 USB 设备,并且我查看了 WDK 中的 usbview 应用程序,但我仍然不知道如何获取USB_DEVICE_DESCRIPTOR

  • 我宁愿避免使用 WMI。
  • DeviceIoControl是示例应用程序 usbview 使用的,但只有在您枚举集线器上的设备时才真正起作用。我想如果我可以在给定设备路径(或 ID)的情况下到达父集线器(和端口),则此方法可能有效,但我也无法确定如何执行此操作。
  • 我有多种设备,我想为其获取描述符。其中有些是 HID,有些可能是 WinUsb.sys 设备。如果它们是 WinUsb 设备,我可以使用WinUsb_GetDescriptor,但这不适用于 HID(我不知道如何从 Id 或 Path...Interface 类中区分它们?我猜?)。
  • 我可以使用SetupDiGetDeviceRegistryProperty,但在可用属性列表中,我可以看到制造商字符串,但看不到供应商 ID。
  • 我可以从设备路径或设备 ID 中解析这个值,但这似乎有点……hack-ish。这只是人们所做的吗?此外,如果我想要制造商等其他领域,它仍然会让我采用其他方法,如果我可以得到整个 USB_DEVICE_DESCRIPTOR,我想我会拥有我需要的一切。
  • LibUsb.Net 显然只支持 WinUsb 设备。这就是它似乎获得描述符的方式。
  • 显然 WinRT 有一些新的 API,因此 Windows Store 应用程序有一个很好的方式来获取描述符。但这绝对不是 Windows Store 应用程序,而且我不知道还有其他方法可以使用较新的 API。

谁能指出我正确的方向?如果不从 Hub 开始,是否不可能以一种很好的方式从 WinAPI 获取这些信息?

0 投票
2 回答
651 浏览

c# - 在运行时确定 C# P/Invoke 结构对齐

我正在尝试为一些 Windows setupapi 调用编写好的 P/Invoke 签名,并且在打包 setupapi 的结构时遇到了以下问题:

现在,这意味着我不能只将StructLayoutAttribute.Pack属性设置为常量值。

我尝试执行以下操作:

正如预期的那样,这将失败并出现以下编译错误:

我真的很想避免#if和设置不同的编译平台,而不是Any CPU. 我可以在运行时确定 C# 结构的打包吗?

0 投票
1 回答
1271 浏览

c# - 以编程方式检测有故障或丢失的驱动程序

我的任务是找到一种方法来检测有故障或丢失的驱动程序,以便我的程序可以安装一个更好的适用于我的系统的程序。我一直在尝试的事情包括使用setupapi.dll从注册表中获取值并尝试找到一些标志,让我知道驱动程序存在问题。在MSDN上,我发现“其他设备”的类 GUID 是4d36e97e-e325-11ce-bfc1-08002be10318. 但是,如果我尝试枚举这些设备,我什么也得不到,即使我在设备管理器下看到该类别的设备。是否有其他 Windows API 可以让我通过某种方式识别此类设备或一般的驱动程序错误?我的代码如下所示:

我也尝试过使用SetupDiGetDeviceRegistryProperty来获取特定属性,但对于很多设备而言,并非所有属性都存在。我希望能够拨打这个电话并让它返回SPDRP_INSTALL_STATE,但我还没有收到这个电话的实际回复。