问题标签 [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.
c++ - 重启后禁用 USB 键盘
我使用SetupDiSetClassInstallParams和SetupDiCallClassInstaller来禁用特定的 USB 设备。
这种方法适用于所有设备,除了键盘。如果我尝试以这种方式禁用她,则返回 ERROR_NOT_DISABLEABLE。但重启后键盘将被禁用。
在禁用之前,为此设备设置了标志 DN_DISABLEABLE 和 DN_REMOVABLE,由函数CM_Get_DevNode_Status检查。我做错了什么?
c++ - 使用 SetupAPI 找出活动的图形驱动程序
我尝试使用 C++ 和 SetupAPI 找出 Windows 上当前活动的图形驱动程序的版本。解决方案大致看起来像
- 呼吁。
SetupDiGetClassDevs
_GUID_DEVCLASS_DISPLAY
- 调用
SetupDiBuildDriverInfoList
结果集。 - 调用
SetupDiEnumDriverInfo
带有 的设备集SPDIT_COMPATDRIVER
,它为我提供了与 GPU 兼容的所有已知驱动程序。
结果包括来自 Microsoft 的后备驱动程序,我可以轻松地排除它,但它还包括已安装在系统上的所有驱动程序版本(来自 NVIDIA)。
问题是:我如何找出哪些驱动程序实际上正在运行?
我从SP_DEVINFO_DATA
步骤 1 中返回的结果中知道如何调用驱动程序服务,并且我还获得了某种注册表项,但我看不出如何将其与SP_DRVINFO_DATA
. 我也知道 NVAPI 提供驱动程序管理功能,但我更喜欢与各种供应商的 GPU 配合使用的解决方案。
c++ - 使用 SetupDiGetDeviceRegistryPropertyW 获取所需大小的错误代码 122
我想通过使用 Setup API 来获取 USB 记忆棒的设备 ID,但首先我想了解一些我必须使用的功能。文档说我可以将SetupDiGetDeviceRegistryProperty
NULL 发送到缓冲区和缓冲区大小以获得所需的大小,但我收到122
错误代码,这意味着:
传递给系统调用的数据区域太小
谁能告诉我我做错了什么?
到目前为止,这是我的代码:
c++ - 在 C++ 中获取设备的当前“活动”驱动程序
我已经使用SetupAPI来枚举所有驱动程序,构建其属性列表等。但我想要的是只枚举任何设备的“活动”驱动程序。
例如。对于 Intel HD 5500,系统中安装了几个不同版本的驱动程序,例如
但是DeviceManager中显示的版本是20.19.15.4531。我只需要得到这个版本。
当我使用 SetupAPI 时,我得到了两个驱动程序。我已经尝试过这篇文章中列出的解决方案,但我可以确认该解决方案对我不起作用。
SetupDiGetSelectedDriver()也不起作用。即它仅在我们使用SetupAPI 函数将驱动程序安装到商店时才有效。
任何帮助将不胜感激。
注意:查找和枚举驱动程序没有问题。我使用SetupDiBuildDriverInfoList()和SetupDiEnumDrvInfo(),它们按预期工作。
c++ - SetupDiGetClassDevsEx 错误“此系统不支持此功能”。在远程 PC 上使用它时
我正在使用 MSVC++ 和 SetupAPI(.h) 并尝试针对远程 PC 调用SetupDiGetClassDevsEx,但失败并出现错误“此系统不支持此功能”。重要的是要注意,此调用(当不提供远程 PC 名称时)成功运行(针对我自己的 PC。)
我的代码片段如下:
MSDN 没有提到此方法已被弃用和/或不可用,但我发现它在 Windows 7 中可用但在 8/8.1 中不可用的相互矛盾的证据,然后可能/可能在 Windows 10 中不可用。
我尝试了以下方法:
- 确认我正在使用 TestPC 上的本地管理员帐户运行。
- “TestPC”的各种 FQDN 变体,包括“\TestPC”、“\TestPC.domain”、“TestPC.domain”、IP 地址等。
- 在目标 PC 上,我确保它已加入域并且对我自己的 PC 可见,并且可以通过 RDP 使用。我已确保启用并运行“即插即用”和“远程注册表”服务,以及启用远程管理,完全禁用 UAC,并确保“配置/管理”下的“允许远程访问计算机界面”组策略的模板/系统/设备安装”已启用。
- 我尝试使用 DevCon.exe(来自 Windows SDK 工具)访问同一系统,使用“devcon.exe /m:\TestPC listclasses”语法(和其他),它只返回“devcon failed”。
- 我使用Device-Tool远程访问了 TestPC ,它可以成功运行,但正在利用 WMI,这不是我尝试使用的 Win32 SetupAPI。
我是否遗漏了其他对利用此功能至关重要的东西?或者,这可能已被弃用和/或不再有效,并且 MSDN 尚未更新以反映更改?
windows - 如何获取设备的设备接口 GUID?
我列举了一台机器上的所有设备,如下所示:
如何获取每个项目的设备接口 GUID?
我试过了
但它似乎需要第三个参数的实际 GUID。这实际上是我想要得到的!NULL 不是一个选项。
windows-10-iot-core - IoTCore 中的 SetupAPI?
我可以在 windows10 IoTCore 中使用 SetupApi 函数吗?
我只写了一行:
HDEVINFO Handle = SetupDiGetClassDevs(NULL,NULL,NULL,DIGCF_ALLCLASSES);
But
Handle = 0xfff...
GetlastError = 127 表示“找不到指定的程序”。
driver - Windows 驱动程序:使用命令行工具安装旧版硬件
操作系统:Windows Server 2016 R2
我有一个 RAMDisk 驱动程序可以使用“添加旧硬件向导”(hdwwiz.exe)成功安装。从 的输出devcon hwids *
可以看出,该设备如下所示。
但是,我需要通过 Ansible 完成安装,因此hdwwiz.exe
无法使用。它必须通过命令行完成,无需交互。
我尝试了几种方法,但都没有奏效。
方法一:DevCon.exe(Windows 设备控制台)
这是来自的日志C:\Windows\INF\setupapi.dev.log
方法 2:DPInst.exe(驱动程序包安装程序)
方法 3:rundll32 调用 SetupAPI
它结束没有任何错误,但没有安装驱动程序。
方法 4:PnPUtil
它成功了,但实际上驱动程序没有安装。
它们都不起作用。DpInst.exe 说No matching devices found in INF
,DevCon.exe 说Unable to find any matching devices
。似乎是同一个原因。
但是驱动可以hdwwiz.exe
手动安装,有谁知道里面的秘密是什么hdwwiz.exe
?
c++ - 如何确定在通过 SetupDiGetClassDevs 枚举 Windows 磁盘设备时使用哪些枚举器
我正在尝试编写可以确定给定文件路径是否引用固定磁盘的 C++/Win32 代码。(我绝对不能将 WMI 用于此任务。)
我最好的选择——至少从这个线程来看——似乎是 SetupDiXXXX 函数。所以这就是我正在尝试的。
我已经使用 SetupDiGetClassDevs 成功枚举磁盘设备并验证它们是否已修复。
但是要将设备链接回给定的磁盘路径,我会出现(从我提到的那个线程)我还需要枚举设备接口。 根据文档,这意味着我必须将 DIGCF_DEVICEINTERFACE 标志提供给 SetupDiGetClassDevs。这意味着我还必须为同一个函数提供一个“枚举器”参数。这引出了我的问题。
我可用于 SetupDiGetClassDevs 和 GUID_DEVCLASS_DISKDRIVE 的有效枚举数列表在哪里?有清单吗?
我已经知道一个:“SCSI”。但是这段代码需要在任何人的机器上工作。那么我应该检查其他什么?是否有一个头文件列出了它们?我可以调用一个函数来枚举它们吗?
(如果可以的话,我会使用 DeviceIoControl 执行此操作,但从我所阅读的内容来看,它不会为我提供关于驱动器是否已修复的真正可靠信息)