问题标签 [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 - 区分相同类型的智能卡读卡器
我有一个使用智能卡读卡器的应用程序。一个用户可能有多个相同的读卡器,并且它们的系统名称(如 )返回的SCardListReaders
数字后缀不同,例如“OMNIKEY CardMan 5x21 0 ”和“OMNIKEY CardMan 5x21 1 ”。用户可以为应用程序设置阅读器。如果在工作期间用户将智能卡放在另一个读卡器中,应用程序将不会做出反应。
问题是,我有报告说,在 Windows 重新启动后,阅读器也可以被洗牌。以前名字里有“ 0 ”的现在可以有“ 1 ”了。我对此没有影响。洗牌发生后,用户必须在应用程序中再次选择阅读器,我想以某种方式解决这个问题,这样用户就不必做任何事情。
首先我在玩SCardGetAttrib
and SCARD_ATTR_VENDOR_IFD_SERIAL_NO
,但是这个参数不会为世界上的每个读者返回一个唯一的字符串。例如,它可能为同一特定类型的所有阅读器返回“12345678”。
我现在正在查看 SetupAPI 函数SetupDiGetDeviceRegistryProperty
。我可以列出所有 USB 设备和参数SPDRP_PHYSICAL_DEVICE_OBJECT_NAME
,并且SPDRP_LOCATION_PATHS
似乎是独一无二的,我希望在系统中修复。如果阅读器不是 USB 设备,那么我将只依赖名称,就像我现在一样。问题是,我无法从阅读器名称中推断出我应该查看哪个 USB 设备。没有一个SPDRP_
参数会给我一个读者名字,我需要我可以给的名字SCardConnect
。
我怎样才能从读者的名字中HDEVINFO
得到我可以给的对应SetupDiGetDeviceRegistryProperty
?或者,是否有另一种方法来区分相同类型的智能卡读卡器,即使在 Windows 重新启动后仍然可靠?
c++ - SetupApi : 使用 c++ setupApi 启用虚拟网络适配器
在 Windows 上,如果从“网络连接”手动禁用它,我无法找到如何通过编码启用热点适配器,即虚拟适配器。我想像我们从设备管理器中那样实现并通过右键单击网络适配器来启用它。从 windows API 找到的 lib 之一是 setupApi 但不知道如何使用它。对此有何建议?
windows - 来自 EnumDisplayDevices 的信息与来自 SetupDiOpenDevRegKey (EDID) 的信息链接
Windows 7,多显示器配置。
使用 gcc-mingw-5.1.0 在 linux(opensuse 13.1)上交叉编译(这实际上可能是我没有得到预期值的原因)。
我使用EnumDisplayDevices获得所有显示设备的列表:代码:
输出(强调我的):
0 -> \.\DISPLAY1
str=Intel(R) HD Graphics 4600
id=PCI\VEN_8086&DEV_0416&SUBSYS_397817AA&REV_06
key=\Registry\Machine\System\CurrentControlSet\Control\Video{BBECD187-6CE4-47FD-915A-A4952B2AC000}\0000
主要= y
-> bpp=32 w=1920 h=1080 fps=60
1 -> \.\DISPLAY2
str=Intel(R) HD Graphics 4600
id=PCI\VEN_8086&DEV_0416&SUBSYS_397817AA&REV_06
key=\Registry\Machine\System\CurrentControlSet\Control\Video {BBECD187-6CE4-47FD-915A-A4952B2AC000}\0001
主要=n
-> bpp=32 w=1920 h=1080 fps=60
现在,通过这篇文章,我可以获得每台显示器的 EDID:
输出(部分):
...
为 'PnP-Monitor (Standard)' 找到值 EDID
密钥路径是 '\REGISTRY\MACHINE\SYSTEM\ControlSet001\Enum\DISPLAY\LGD044F\4&1BDB7018&0&UID68092928\Device Parameters'
00 ff ff ff ff ff ff 00 26 07 01 00 e7 03 00 00
00 1a 01 03 80 00 00 00 02 00 00 00 00 00 00 00
....
我现在的问题是,如何链接这两个信息?如何将 EDID 归因于显示器?
预期的:
\.\DISPLAY1 -> EDID1
\.\DISPLAY2 -> EDID2
笔记
显示器 #1 是 LG 显示器,显示器 #2 是戴尔显示器(这样设置,当我更改显示器 #2 的分辨率时可以验证这一点),但戴尔显示器的 EDID 首先出现,然后是显示器的 EDID LG。因此我不能在两个枚举中使用出现的顺序,它们没有直接联系(否则没有问题要问)。
我也不能依赖分辨率信息或同步率,因为它可能对所有显示器都是相同的
我知道这个问题及其答案,但接受的答案对我没有帮助,因为它希望DISPLAY_DEVICE.DeviceID位于注册键\HKLM\System\CurrentControlSet\Enum\DISPLAY中,而我从EnumDisplayDevices得到的位于\HKLM\ System\CurrentControlSet\Enum\PCI(参见输出中的“id”行)。
我尝试按照此问题中的建议使用标志 EDD_GET_DEVICE_INTERFACE_NAME,但我没有得到已接受答案中所示的 deviceID。
我检查了SetupAPI 函数列表,但找不到如何连接显示信息和 SetupDiOpenDevRegKey 的结果。
我错过了什么?我设置错了哪个标志?我可以以某种方式使用 SetupDiOpenDevRegKey 返回的密钥路径吗?
非常感谢。
c++ - Win32 API 修改网络接口属性
我找不到用于修改网络接口属性的 Win32 API。“网络接口属性”是指属性,可以使用系统控制面板中的“网络连接”面板手动设置,也可以从命令行使用“netsh 接口”设置。
特别是,我想修改:
- 网络连接名称(例如“Local Area Connection #2”
- IPv4 网络接口指标(默认为“自动”)
为了识别网络适配器,我有一个 PnP 设备管理器的设备实例 ID(例如“ROOT\NET\0000”)。我还有一个 SetupAPI SP_DEVINFO_DATA 结构的实例。我可能还可以使用 SetupAPI 查询 NetCfgInstanceId。
有没有我想要的 Win32 API?我不想使用 WMI。目标平台是 Windows 7 x64 或更高版本。
windows - 更改已安装的设备驱动程序
我正在尝试使用 SetupAPI 更改设备的已安装驱动程序。驱动程序已存在于 PC 上,只是当前未选中。
更具体地说,我正在尝试撤消为 USB 复合设备安装第三方驱动程序,并安装默认的 Windows 驱动程序。
我已经让它几乎像这样工作了:首先,找到使用的设备
找到设备。
接下来,找到我要安装的默认 USB 复合设备驱动程序
找到司机后,我打电话
这实际上确实将驱动程序切换回来,正如在设备管理器中所观察到的那样。
但是,第三方驱动程序将设备放入自己的组/类别中,并且使用我的方法时不会撤消此更改。
在设备管理器中手动选择标准 USB 复合设备驱动程序确实会将设备类别恢复为 USB 控制器,这就是为什么我认为我的驱动程序安装过程不完整的原因。我可能会错过什么?
c++ - 使用 SetupGetInfDriverStoreLocation 函数
如果我的 FileName 为:如何调用此函数:
c# - 如何在c#中检测连接到同一个USB集线器的两个USB设备
我正在开发一个 .NET 4.5 C# 项目,我需要确定我的 USB 设备是否连接到同一个 USB 集线器。
我用谷歌搜索并尝试探索许多 ManagementObjectCollection 的结构,例如 Win32_USBHub 和 Win32_PnPEntity,但我找不到任何具有位置或端口链信息的 WMI 结构。
我尝试了 USB 设备树工具,我可以在其中看到信息:
现在根据上述信息,我想编写逻辑来存储和比较两个 ID,以识别两个设备是否在同一个 USB 集线器上。
我尝试从以下网址探索 USB 设备树源代码: http ://www.uwe-sieber.de/usbtreeview_e.html
但是由于 NativeUsbLib 中的一些问题,仍然无法运行代码。
谁能帮我分享一些示例代码,我如何从 WMI 或 setupapi.dll 获取这些信息?
c++ - 出现错误 87,SetupDiGetDeviceInterfaceDetail 的参数不正确
我在调用 SetupDiGetDeviceInterfaceDetail ( https://msdn.microsoft.com/en-us/library/ff551120.aspx )时不断收到 Windows 错误 87,即使将所有可选参数都切换为 NULL,我也会收到错误消息,但是我在另一个有效的函数中使用了前两个参数,所以我不明白它们有什么不正确的地方。
我真的不知道哪个参数可能不正确,因为前面的所有函数都返回 true(例如 GUID 是有效的)。
c# - 我的 SetupDiEnumDeviceInfo 为某些设备返回 ERROR_NO_MORE_ITEMS (C#)
我正在尝试为我的设备(cm_power_data_s)获取电源数据。
我正在使用SetupDiGetDeviceRegistryProperty
API 来执行此操作。
虽然这适用于某些设备,但不适用于其他设备。
返回的数据SetupDiEnumDeviceInfo
是null
,没有这个,我不能用SetupDiGetDeviceRegistryProperty
。 我尝试通过查询获取类来
手动填充,但不返回缓冲区大小(与传递空数据相同)。有人可以帮忙吗?这是我的代码:sp_devinfo_data
wmi
GUID
SetupDiGetDeviceRegistryProperty