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

windows - UpdateDriverForPlugAndPlayDevices 错误告诉我我*没有*做我正在做的事情

我正在研究一种安装驱动程序的方法。由于这必须在多个平台上工作,因此我会在需要时让 devcon 和 dpinst 完成驱动程序安装/更新/删除的工作。在测试时,我遇到了对 devcon 的炮击问题。为了隔离,我编写了一个小应用程序来执行 devcon 在更新中所做的事情,请参阅此处,使用 WinDDK 中的 devcon 源代码作为参考。我在使用 Setup API(实际上是 Newdev.dll 的一部分)的 UpdateDriverForPlugAndPlayDevices() 时遇到了一些问题,请参见此处。源代码在这里:

当 UpdateDriverForPlugAndPlayDevices() 返回 false 时程序失败。然后打印由 GetLastError() 返回的错误代码,这样我就知道出了什么问题。返回的错误代码:259。根据这个资源说这是ERROR_NO_MORE_ITEMS。根据 UpdateDriverForPlugAndPlayDevices() 的链接,此函数在以下情况下返回此错误代码:“函数找到了 HardwareId 值的匹配项,但指定的驱动程序不是比当前驱动程序更好的匹配,并且调用者没有指定INSTALLFLAG_FORCE 标志。” 你会从我的代码中注意到我确实指定了这个标志。

我不知道从这里去哪里。有人可以从这段代码中识别出我缺少什么吗?这只是一种简单的“感觉”,但我完全想念它。

谢谢你,安迪

0 投票
0 回答
967 浏览

windows - SetupDiCallClassInstaller 的等效 API,用于卸载我的调制解调器

我使用SetupDiCallClassInstallerwithDIF_REMOVE作为参数来卸载我的调制解调器。但是当我在“Windows 7”“64 位”机器上测试我的应用程序时出现错误0xE0000235,但我找不到解决这个问题的解决方案。

一些谈论这个的SO 链接没有解决方案,而是创建一个 64 位 exe,我不想这样做。

我的问题是有没有其他 API 可以做同样的事情(我想卸载我的调制解调器)?

0 投票
1 回答
1096 浏览

python-2.7 - 从 Python 调用 SetupDiGetClassDevs 只返回一个整数值

我正在尝试为一个相当简单的 USB 设备创建一个简单的读/写应用程序,但事实证明它根本不是那么简单。

我正在使用 WinUSB 和 SetupAPI DLL 并从头开始工作,因为我似乎找不到任何真正适合我需要的东西。PyWinUSB 和 PyUSB 等等等等都接近了,但是当我尝试用它们实际写入设备时,它们失败了。

无论如何,现在我仍然处于零基础。按照说明,我从 SetupAPI.dll 调用 SetupDiGetClassDevsExW 函数。该函数正确执行,如调用返回零的 kernel32.lasterror 函数所示,但我从调用中返回的唯一内容是一个整数值。那是对的吗?这甚至是正确的功能吗?(有 4 个类似,而且不只是普通的 SetupDiGetClassDevs 函数。这 4 个函数是 SetupGetClassDevsExW、SetupGetCLassDevsExA、SetupGetClassDevsA 和 SetupGetClassDevsW。)我需要创建一个类来处理它吗?我问是因为调用下一个函数 SetupDiEnumDeviceInterfaces 只返回了代码 259 的失败,根据快速谷歌搜索,这意味着 ERROR_NO_MORE_ITEMS。

我已经取得了一些进展,有人向我展示了正确的类结构方法,用于创建用于保存一些信息的结构,但由于我以前从未真正使用过 USB 设备的编程,更不用说在 Python 中了,我我还是有点卡住了。我将提供答案所需的更多信息,但现在我不想让这个 Q/A 陷入不必要的信息。

谢谢。

0 投票
1 回答
584 浏览

python-2.7 - What do I pass as the last value to the function SetupAPI.DLL.SetupDiEnumDeviceInterfaces()?

I'm working in Python trying to create a simple program that reads and write from and to a fairly simple USB device. The problem I'm having is that since PyWinUSB and PyUSB don't seem to have what I need (trying to write to the device makes things explode), I have to work from scratch using the ctypes python module and the raw dll functions in WinUSB and SetupAPI.

I've been able to get my question answered about how to define the structure that I'm passing to the function, but the problem that I'm having now is that according to the specifications of the function... well, I'll just quote it.

How do I translate these requirements into Python?

The structure class I'm working with right now looks like this:

According to what I was informed by an answer to an earlier question.

Thanks.

0 投票
1 回答
315 浏览

wpf - SetupDiGetClassDevs 在 XP 上导致错误

我有一个由另一个 WPF 应用程序调用的 Win32 应用程序。在 Win32 托盘应用程序中,我正在注册 USB 设备通知。在此我使用对 SetupDiGetClassDevs 的 API 调用,以便我可以查找任何连接的设备。

在 XP 上,WIN32 应用程序崩溃并出现错误:“过程入口点 RegOpenKeyExW 无法位于动态链接库 KERNAL32.dll 中”

在 win7 和 win8 上,API 调用功能正常。该应用程序基于 Win7 VS2010 构建。

在 XP sp3 上调用 SetupDIGetClassDevs 有问题吗?

0 投票
1 回答
1847 浏览

windows - SetupDiGetClassDevs 列出 SCSI 驱动器失败,错误代码为 13 (ERROR_INVALID_DATA)

我有一个相当有趣的问题,我无法找到解决方案。我正在使用 Setup API 列出系统中的驱动器。将枚举器设置为“IDE”时,使用下面列出的代码没有问题。当枚举器值设置为“SCSI”时,我会感到焦虑。重现此问题的代码如下:

如您所见,这段代码没有什么特别之处。问题是,在某些笔记本电脑上,此代码在 SetupDiGetClassDevs() 处出错。检查 GetLastError() 表明它因 ERROR_INVALID_DATA (0xd) 而失败。我不明白为什么。这个完全相同的程序,以我的用户(具有管理员权限)和非特权用户的身份在我的开发盒上运行,无论是否存在 SCSI 驱动器都可以正常工作。

我知道使用的 GUID 是正确的。它在 devguid.h 中定义。“SCSI”是一个有效的 PnP 枚举器,正如在此MSDN 页面上引用的那样,并且还通过检查设备管理器中的“枚举器”属性。第三个参数可能是 NULL,第四个是这个函数的有效定义标志。我知道这一点是因为,除了这些笔记本电脑之外,它适用于我曾经尝试过的所有系统(在我的组织中,这种系统相当多)。我希望这里的某个人可能知道在这些条件下会导致 SetupDiGetClassDevs() 因此错误而失败的原因,或者至少可以为我指明正确的方向。我不是 Windows 专家,我可能会遗漏系统配置或权限方面的某些内容(尽管错误并未暗示)。

我希望很清楚,我已经在一台笔记本电脑上运行了这段代码,我可以同时以具有管理员权限的用户和管理员用户的身份对其进行测试:两者都具有相同的结果。笔记本电脑是运行 Windows 7 64 位 Service Pack 1 的 HP EliteBook 8460p。以 32 位或 64 位编译此代码没有区别。

0 投票
0 回答
299 浏览

c# - 来自 SetupAPI C# 的“SetupScanFileQueue”回调问题

我在 C# 中实现了一个基于 GUID 枚举设备的 SetupAPI 包装器。我或多或少地将 MSDN 上的 DevCon c++ 示例代码转换为 C#(是的,我非常清楚在 .NET 中这一切都非常痛苦,但它既有趣又具有挑战性)。

我能够获取有关某个设备的所有适当信息,但是当我到达“SetupScanFileQueue”方法时出现了问题。

我似乎无法让“SetupScanFileQueue”来调用我的回调。该方法返回true,所以它似乎正在工作。

我的最终目标是获取特定设备的驱动程序文件。

附加信息:文件似乎已正确添加到 FileQueue,我得到这个似乎复制正确文件的弹出窗口。

我的回调定义如下:

有没有人对我在“SetupScanFileQueue”函数中做错了什么有任何建议,以及为什么从未调用回调?

很感谢任何形式的帮助!

编辑:

我还应该为 SetupScanFileQueue 函数添加 DllImport:

我也试过没有 CallingConvention。

0 投票
2 回答
654 浏览

c# - 通过 SetupApi 找出为设备加载的驱动程序

几天来,我一直在为 Setup API 苦苦挣扎,但仍有一件事困扰着我:我可以加载设备列表,我可以使用这些设备句柄从驱动程序存储中检索适当的驱动程序列表,但是怎么做我确定当前加载了哪些?是否真的像设备描述与驱动描述匹配一样简单?或者是否有 API 调用?为什么我可以从应该代表驱动程序信息的设备中读取 GUID,但我从提到的枚举中获得的驱动程序信息没有这样的 GUID?

非常感谢任何帮助,谢谢!

0 投票
0 回答
192 浏览

windows - Windows XP 上的 USB 设备位置

我正在尝试通过使用带有 SPDRP_LOCATION_INFORMATION 属性的 SetupDiGetDeviceRegistryProperty 函数根据其父集线器对 USB 设备进行分组。

在 Windows 7 上它运行良好 - 我得到的字符串是一个不错的“PORT_XXXX&HUB_XXXX”。但是当试图在 Windows XP 上做同样的事情时,我得到的是设备名称。

有谁知道发生了什么?它是 Windows XP 中的错误吗?

谢谢。

0 投票
1 回答
7357 浏览

cmd - 通过.inf 安装程序驱动程序导致重新启动

我正在尝试使用以下命令通过 inf 文件安装驱动程序:

根据 MSDN(http://msdn.microsoft.com/en-us/library/aa376957%28v=vs.85%29.aspx),通过提供 128 作为参数,除了“设置安装的默认路径到 INF 的位置。这是典型设置”,安装应该 (+0) 不要求用户重新启动。但是,就我而言,它总是如此。

我究竟做错了什么?