问题标签 [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 回答
240 浏览

c++ - 重启后禁用 USB 键盘

我使用SetupDiSetClassInstallParamsSetupDiCallClassInstaller来禁用特定的 USB 设备。

这种方法适用于所有设备,除了键盘。如果我尝试以这种方式禁用她,则返回 ERROR_NOT_DISABLEABLE。但重启后键盘将被禁用。

在禁用之前,为此设备设置了标志 DN_DISABLEABLE 和 DN_REMOVABLE,由函数CM_Get_DevNode_Status检查。我做错了什么?

0 投票
2 回答
566 浏览

c++ - 使用 SetupAPI 找出活动的图形驱动程序

我尝试使用 C++ 和 SetupAPI 找出 Windows 上当前活动的图形驱动程序的版本。解决方案大致看起来像

  1. 呼吁。SetupDiGetClassDevs_GUID_DEVCLASS_DISPLAY
  2. 调用SetupDiBuildDriverInfoList结果集。
  3. 调用SetupDiEnumDriverInfo带有 的设备集SPDIT_COMPATDRIVER,它为我提供了与 GPU 兼容的所有已知驱动程序。

结果包括来自 Microsoft 的后备驱动程序,我可以轻松地排除它,但它还包括已安装在系统上的所有驱动程序版本(来自 NVIDIA)。

问题是:我如何找出哪些驱动程序实际上正在运行?

我从SP_DEVINFO_DATA步骤 1 中返回的结果中知道如何调用驱动程序服务,并且我还获得了某种注册表项,但我看不出如何将其与SP_DRVINFO_DATA. 我也知道 NVAPI 提供驱动程序管理功能,但我更喜欢与各种供应商的 GPU 配合使用的解决方案。

0 投票
0 回答
1996 浏览

c++ - 使用 SetupDiGetDeviceRegistryPropertyW 获取所需大小的错误代码 122

我想通过使用 Setup API 来获取 USB 记忆棒的设备 ID,但首先我想了解一些我必须使用的功能。文档说我可以将SetupDiGetDeviceRegistryPropertyNULL 发送到缓冲区和缓冲区大小以获得所需的大小,但我收到122错误代码,这意味着:

传递给系统调用的数据区域太小

谁能告诉我我做错了什么?

到目前为止,这是我的代码:

0 投票
1 回答
290 浏览

c++ - 在 C++ 中获取设备的当前“活动”驱动程序

我已经使用SetupAPI来枚举所有驱动程序,构建其属性列表等。但我想要的是只枚举任何设备的“活动”驱动程序。

例如。对于 Intel HD 5500,系统中安装了几个不同版本的驱动程序,例如

但是DeviceManager中显示的版本是20.19.15.4531。我只需要得到这个版本。

当我使用 SetupAPI 时,我得到了两个驱动程序。我已经尝试过这篇文章中列出的解决方案,但我可以确认该解决方案对我不起作用。

SetupDiGetSelectedDriver()不起作用。即它仅在我们使用SetupAPI 函数将驱动程序安装到商店时才有效。

任何帮助将不胜感激。

注意:查找和枚举驱动程序没有问题。我使用SetupDiBuildDriverInfoList()SetupDiEnumDrvInfo(),它们按预期工作。

0 投票
0 回答
201 浏览

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 尚未更新以反映更改?

0 投票
2 回答
511 浏览

c++ - 如何使用 C++ 禁用“允许计算机关闭此设备以节省电源”?

在我的 C++ 应用程序中,我需要为可以在“设备管理器/通用串行总线控制器”中找到的集线器禁用此选项。

我已经使用 SetupDiEnumDeviceInfo 和 SetupDiGetDeviceInstanceId 在这些集线器中进行了迭代,但是在那之后我现在不知道该怎么做,也许这不是最好的方法,我不知道。

我正在使用带有 Windows 10 的 Visual Studio 2010。

有人可以帮助我吗?

感激的。

在此处输入图像描述

0 投票
1 回答
6410 浏览

windows - 如何获取设备的设备接口 GUID?

我列举了一台机器上的所有设备,如下所示:

如何获取每个项目的设备接口 GUID?

我试过了

但它似乎需要第三个参数的实际 GUID。这实际上是我想要得到的!NULL 不是一个选项。

0 投票
1 回答
38 浏览

windows-10-iot-core - IoTCore 中的 SetupAPI?

我可以在 windows10 IoTCore 中使用 SetupApi 函数吗?

我只写了一行: HDEVINFO Handle = SetupDiGetClassDevs(NULL,NULL,NULL,DIGCF_ALLCLASSES);
But Handle = 0xfff...
GetlastError = 127 表示“找不到指定的程序”。

0 投票
1 回答
5774 浏览

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

0 投票
0 回答
291 浏览

c++ - 如何确定在通过 SetupDiGetClassDevs 枚举 Windows 磁盘设备时使用哪些枚举器

我正在尝试编写可以确定给定文件路径是否引用固定磁盘的 C++/Win32 代码。(我绝对不能将 WMI 用于此任务。)

我最好的选择——至少从这个线程来看——似乎是 SetupDiXXXX 函数。所以这就是我正在尝试的。

我已经使用 SetupDiGetClassDevs 成功枚举磁盘设备并验证它们是否已修复。

但是要将设备链接回给定的磁盘路径,我会出现(从我提到的那个线程)我还需要枚举设备接口根据文档,这意味着我必须将 DIGCF_DEVICEINTERFACE 标志提供给 SetupDiGetClassDevs。这意味着我还必须为同一个函数提供一个“枚举器”参数。这引出了我的问题。

我可用于 SetupDiGetClassDevs 和 GUID_DEVCLASS_DISKDRIVE 的有效枚举数列表在哪里?有清单吗?

我已经知道一个:“SCSI”。但是这段代码需要在任何人的机器上工作。那么我应该检查其他什么?是否有一个头文件列出了它们?我可以调用一个函数来枚举它们吗?

(如果可以的话,我使用 DeviceIoControl 执行此操作,但从我所阅读的内容来看,它不会为我提供关于驱动器是否已修复的真正可靠信息)