问题标签 [winusb]

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 回答
1016 浏览

qt - 用winusb写usb批量windows

我试图使用 USB 设备的 bulkout 端点发送一些数据。我可以使用 createfile 和 SetupDiGetDeviceInterfaceDetail 打开 USB 设备(corsair k65rgb 键盘)接口 2(控制照明)。但是我使用 HidD_SetFeature 写入数据的示例代码。并且从usb嗅探器编写urb函数类接口(使用控制端点)但是当我打开corsair cue软件时它使用urb函数批量或中断传输。

所以我知道它可以发送批量数据。但是我不知道该怎么做谢谢

我使用 QT 5.9 和 VS2015

0 投票
0 回答
597 浏览

installation - 如何防止“弹出" 安装基于 WinUSB 的设备后出现?

概括

我正在为涉及安装基于 WinUSB 的 USB 设备的应用程序开发安装程序。一切正常,除了一个烦人的问题,即安装后 USB 设备显示在通知窗格中,并带有安全删除它的选项:

我不希望出现此选项,但我不确定如何阻止它。我相信通过在设备的 INF 文件中添加正确的指令应该是可能的,但是 Microsoft 做了出色的工作,使 INF 文件格式愚蠢地过于复杂,我无法从 docs中弄清楚到底该做什么。

我试过的

Microsoft 文档确实没有足够的帮助,但我设法找到了一个旧文档,名为Designing Hardware For Surprise Removal Under Windows XP,看起来很有希望:

基于此,我尝试将以下内容添加到我的 INF 文件中:

安装此驱动程序后,我去了设备管理器并能够确认“删除策略”属性已设置为0000000200000003之前)。但是,该设备仍显示“弹出”选项。

我的下一次尝试是“需要安全删除”,目前设置为<true>. 我试图在我的 INF 文件中包含此指令:

我曾经infverif确认我的 INF 文件是有效的,但是在安装此版本的驱动程序后,“需要安全删除”属性仍然设置为<true>,并且设备仍然具有弹出选项。

有没有人足够熟悉令人费解的(坦率地说是迟钝的)INF 格式来建议我需要更改什么以使“弹出”选项消失?

0 投票
0 回答
698 浏览

c# - 如何识别 WinUSB 用于识别 USB 设备的 GUID

我有一些已经编写的代码,我们使用 WinUSB 库 (MadWizard.WinUSBNet) 来识别 USB 设备并对其进行编程(USB 即插即用以与另一个设备进行无线交互)。

代码是这样的。

我试图弄清楚这个 GUID 值的含义。我已经浏览了设备管理器 -> 设备属性并检查了硬件 ID、兼容 ID 等。但无法在任何地方匹配此 GUID。我已经参考了这篇文章来了解更多。请帮助识别 GUID 所指的属性。

0 投票
1 回答
473 浏览

c# - WINUSB 和 UWP 应用程序:无法连接到我的设备

我的使用 WINUSB 的 USB 设备(类 0xFF,子类 0x00)面临两个不同的问题

我有三个不同的小应用程序,来自 Microsoft 示例的 UWP CustomUsbDeviceAccess 修改为连接到我的自定义 USB 设备,我正在尝试编写的 UWP 应用程序,以及我也编写的 WPF 示例程序。这三个应用程序在我的两台计算机上运行没有问题,连接到我的 WINUSB 自定义设备,但在一些 windows/vs2017 升级过程中,两个 UWP 应用程序在两台计算机上都停止工作。两台电脑的问题都不一样。

第一台计算机,带有 W10 Pro Fall Creators Update。问题是,调用此函数后:

它总是返回 null。如果我尝试运行它:

它提高了预期

系统找不到指定的文件 0x80070002

第二台计算机,使用 W10 Home Insider Preview Build 17025.rs_prerelease.171020-1625,这里的问题是 UWP 应用程序、Microsoft 的 CustomUsbDeviceAccess 和我自己的 UWP 应用程序都冻结了输入此行:

这些代码有效,我现在不明白出了什么问题。我的 USB 设备可以在两台计算机上使用我编写的小型 WPF 桌面应用程序。我用我手头的其他类似的USB商业设备(相同的类/子类,winusb也是)测试了相同的三个应用程序,结果相同,所以我丢弃了问题出在我的设备或驱动程序安装过程中出现问题.

我看到另一个用户在这篇文章中遇到了类似的问题,但遗憾的是,没有找到解决方案。

0 投票
2 回答
3035 浏览

google-chrome - Windows 10 WebUSB 打印问题与 Zebra LP2844 DOMException:访问被拒绝

在一个项目中,我尝试使用 Chrome 中可用的 WebUSB API 使用 Zebra LP2844 打印机进行打印。

我在 OSX 上成功了,最终在 Ubuntu 和 ChromeOS 上取得了成功,这要归功于这篇文章谈到了取消绑定内核驱动程序以便 Chrome 能够访问设备。

我为此使用的页面是通过https提供的,因为文档需要它。

但是,在 Windows 10 上,我可以使用 navigator.usb.requestDevice 连接到打印机,如下所示

连接的打印机

但是当我在打印例程期间在连接的打印机上调用 open() 时,我不断收到下一个错误

错误 DOMException:访问被拒绝。

下面是打印方法代码:

我在这里发现了一个类似的问题,它指向了另一个答案。当我插入打印机时,Windows 安装的默认驱动程序会阻止 Chrome 访问它(就像 Ubuntu 一样),这是完全有道理的。

因此,我实现了一个自定义 .inf 文件,如此处所述

这是我的inf文件

使用 inf2cat 构建驱动程序,对其进行测试签名,当我尝试更新打印机驱动程序以使用它时,它失败并出现错误“找不到指定的文件 (0x00000002)”。

setupapi.dev.log 文件没有提供任何关于未找到哪个文件的信息。

这是驱动程序更新过程的日志文件:

我什至尝试使用zadig替换打印机驱动程序,结果相同(访问被拒绝错误)。

在这一点上,非常感谢任何帮助。

更新 03/05/2018

今天,我通过以下步骤成功完成了我的自定义 inf 安装程序:

  • 当我插入打印机时,阻止 Windows 10 在网上搜索驱动程序并安装它们(在此处查看详细信息
  • 更新我的自定义 inf 安装程序以使用 USBDevice 类和 {88bae032-5a81-49f0-bc3d-a4ff138216d6} ClassGuid 值
  • 构建驱动程序 cat 文件并对其进行签名
  • 卸载设备的所有驱动程序并拔下打印机
  • 重新启动计算机
  • 重新插入打印机。此时,在设备管理器中,设备被检测为通用串行总线设备如此处所示
  • 最后,按照此说明使用之前创建的驱动程序更新设备驱动程序。

驱动安装成功,regedit 反映设备现在正在使用 WinUSB驱动已更新

可悲的是,我继续收到“DOMException:访问被拒绝”。当我尝试从网页打印时出错......所以我仍然需要帮助:(

ps:这可能是我所知道的关于 stackoverflow 的最长帖子(或至少前 10 名)。

更新 03/06/2018

根据 Reilly Grant 的要求,我包括了 USBView 的输出(Windows 的 lsusb 等效项)

有趣的是(实际上很奇怪),在尝试获取这些新信息时,我的谷歌浏览器开始抛出

控制台中的错误,并在控制台中键入 navigator.usb 返回undefined

由于这没有任何意义,我重新安装了 Chrome,但错误仍然存​​在

因此,我安装了 Chrome Canary(存在 navigator.usb),结果发现打印机开始打印并且拒绝访问错误消失了。

我卸载了 Chrome Canary 并且不知何故 GA Chrome 也可以工作。直到我关闭 Chrome 并再次打开它。然后我再次收到“无法读取未定义的属性'getDevices'”错误。

我注意到删除 AppData/Local/Google 中的 Chrome 用户数据文件夹(整个配置文件文件夹)会使 Chrome 再次工作,直到我关闭它并再次打开它。

尽管我正在调用 releaseInterface 并关闭,但我的打印代码中的某些东西可能会留下一些“保留”的东西?

现在问题似乎发生了一些变化,有什么想法吗?

0 投票
2 回答
1162 浏览

usb - 我有一个 DEVINST,我需要设备路径

我正在尝试打开作为复合设备一部分的 WinUSB 设备。我已经使用 cfgmgr32 找到了正确的子设备,并且有它的 DEVINST 编号。为了用 WinUSB 打开它,我需要首先调用 CreateFile,为此我需要设备路径。

设备路径如下所示:

\\\\?\\usb#vid_9999&pid_0102#3555303335351909000b0#{a5dcbf10-6530-11d2-901f-00c04fb951ed}

如何获取设备路径?

0 投票
1 回答
668 浏览

java - 与插入 Android 手机的 USB 设备通信(例如,外接摄像头)

我想知道android studio中是否有某种API可以通过USB在设备和android手机之间进行通信。例如,外接摄像头。

我之前使用过 SetupAPI 和 WINUSB 来完成这样的任务。因此,将不胜感激与这两者相似的东西。

创建该设备的公司不提供 SDK、驱动程序或任何额外信息。

非常感谢。

0 投票
1 回答
440 浏览

c++ - WINUSB_ControlTransfer 只能在设备上可用的两个接口之一上使用,而不能用于另一个

我正在使用该设备,它有两个接口。USB 设备上的 lsusb 信息可以在下面的链接中找到。 https://github.com/zougloub/libseek

摄像头有两个接口,第一个是iAP接口,第二个是com.thermal.pit206接口。我基于 iAP 接口编写了我的应用程序,因为。我之所以选择 iAP 接口是因为其他人都在 GitHub 上这样做,所以我就照做了。

我可以将 Winusb_ControlTrasnfer 函数与 iAP 接口一起使用。我可以初始化 WinUSB 句柄并使用它来发送和获取命令以及读取管道。

但是,当我使用 com.thermal.pit206 接口时,我仍然可以初始化 WinUSB 句柄,但我无法发送或获取命令。

在上面你可以看到我用来向设备发送命令的代码副本。

我很困惑为什么我可以在使用 iAP 接口时向设备发送命令,但是当我使用 com.thermal.pir206 接口时,我无法这样做。

谢谢!任何有用的链接/信息表示赞赏。

0 投票
1 回答
516 浏览

c++ - 是否可以使用 winusb 同时与多个相同的 USB 设备进行通信?

我正在使用多个相同的设备,我希望能够同时读取它们。因此,所有设备的产品和供应商 ID 都是相同的。我想知道我是否能够并行读取它们。

在我看来,我认为这应该是可能的,因为对于特定的设备路径,您创建了一个唯一的 winusb 句柄以及一个唯一的 createfile 句柄。

但是在实践中,我意识到它不起作用。我没有使用重叠结构,因为它们由于独特的 createfile 句柄而完全分开。从设备读取的数据不是并行读取的,而是仅读取第一个设备、第二个、第三个等...

我用 C++ 编写了代码,希望得到一些建议,谢谢。
使用重叠结构会解决问题吗?还是 winusb 不应该以这种方式使用?

这是我的代码的链接, https://drive.google.com/drive/folders/1qvcGwNLxzJ0oRrFZbtyZ7g0zCU0XUG1n?usp=sharing

0 投票
2 回答
3690 浏览

c# - Windows API USB IO (winusb.dll)

编辑:这个问题随着时间的推移而演变。基本问题是关于如何在 Windows 中连接和读取/写入 USB 设备。最终我在@benvoigt 的帮助下回答了这个问题。

我编写了一个 Hid 库,它可以向 Hid USB 设备写入和读取数据。它运作良好。但是,我连接的设备已从隐藏访问切换到普通 USB。连接到不同类型的设备时,Hid 代码不起作用。我现在的目标是连接到 USB 接口(与 Hid 接口相反)并对其进行读/写。

在所有访问 USB 的平台上,我们必须查询 USB 设备存在的接口,然后“声明”一个用于读写的接口。这是来自 LibUsbDotNet 示例的一些代码(LibUsb 是一个有效的 C USB 库,LibUsbDotNet 包装了它)https://github.com/LibUsbDotNet/LibUsbDotNet/blob/master/src/Examples/Read.Write/ReadWrite.cs

我有一种感觉,LibUsb 正在像这样(https://github.com/libusb/libusb/blob/c6f3866414e8deeee19e8a9f10f20bde9cb408d3/libusb/os/windows_winusb.c#L2199)实现 C 中接口/端点的开放。这是它调用初始化的地方:https://github.com/libusb/libusb/blob/c6f3866414e8deeee19e8a9f10f20bde9cb408d3/libusb/os/windows_winusb.c#L2225这是我的代码失败的地方。

一小段信息是,这绝对是一个 WinUSB 设备。我可以在这里看到:

在此处输入图像描述

根据其他人的评论和示例代码,我可以看到我需要使用 winusb.dll。我可以调用 CreateFile 从设备获取句柄。根据我看到的其他示例代码,下一步是调用 WinUsb_Initialize。但是,当我调用它时,我得到一个错误代码 8 (ERROR_NOT_ENOUGH_MEMORY)。这里有一些信息https://docs.microsoft.com/en-us/windows/desktop/api/winusb/nf-winusb-winusb_initialize。但是,我不太明白它要求我做什么。到目前为止,这是我的代码:

您可以在此处克隆此 repo 的分支: https ://github.com/MelbourneDeveloper/Device.Net/tree/WindowsUsbDevice 。只需运行 Usb.Net.WindowsSample 项目。

我也试过这个并得到完全相同的结果:

我坚信设备的 WinUSB 实现本身存在问题。它适用于 LibUsb、UWP 和 Android 等其他库,但 WinUsb 似乎不喜欢它。我尝试了这个库:https ://github.com/madwizard-thomas/winusbnet ,它在同一个调用中也失败了,错误代码相同。它失败并获得错误代码 8 的行在这里:https ://github.com/madwizard-thomas/winusbnet/blob/8f62d751a99be1e31d34b91115715d60aeff​​2dfc/WinUSBNet/API/WinUSBDevice.cs#L225

我的代码有什么问题?我需要做些什么来为 WinUsb_Initialize 调用分配内存吗?

我应该如何使用 winusb.dll Windows API?我需要进行哪些 API 调用来声明和接口或端点以进行读写?

如果有人可以向我指出一个简单的 C 或 C# 示例,它可以读取和写入 USB 设备并实际工作,那真的会对我有所帮助

WinDBG 输出:

************* 路径验证摘要 ************** 响应时间 (ms) 位置 Deferred
srv* 符号搜索路径为:srv* 可执行搜索路径为: ModLoad: 00000236 157c0000 00000236157c8000 Usb.Net.WindowsSample.exe ModLoad: 00007ffb 62880000 00007ffb62a61000 ntdll.dll ModLoad: 00007ffb 60f40000 00007ffb610d0000 C:\WINDOWS\System32\user32.dll ModLoad: 00007ffb 5ed00000 00007ffb5ed20000
C:\WINDOWS\System32\007ffbffbx34e1b0000 00007ffb 4e214000 C:\WINDOWS\SYSTEM32\MSCOREE.DLL ModLoad: 00007ffb 612a0000 00007ffb612c8000 C:\WINDOWS\System32\GDI32.dll onecore\windows\core\console\open\src\renderer\gdi\invalidate.cpp(121)\conhost。 exe!00007FF7169FE2AF: (caller: 00007FF7169FF414) ReturnHr(1) tid(4230) 80070578 无效的窗口句柄。模组加载:00007ffb60990000 00007ffb60a42000
C:\WINDOWS\System32\KERNEL32.dll ModLoad: 00007ffb 5f000000 00007ffb5f192000 C:\WINDOWS\System32\gdi32full.dll ModLoad: 00007ffb 60d90000 00007ffb60f03000 C:\WINDOWS\System32\MSCTF.dll ModLoad: 00007ffb 5ed80000 00007ffb5eff3000
C:\WINDOWS\ System3 KERNELBASE.dll ModLoad: 00007ffb 60f3d000 C:\WINDOWS\System32\IMM32.DLL60610000 00007ffb606d2000 C:\WINDOWS\System32\OLEAUT32.dll ModLoad: 00007ffb60f10000 00007ffb

************* 路径验证摘要 ************** 响应时间 (ms) 位置 Deferred
srv* 符号搜索路径为:srv* 可执行搜索路径为: ModLoad: 00007ff7 169f0000 00007ff716a8f000 conhost.exe ModLoad: 00007ffb 61340000 00007ffb62780000 C:\WINDOWS\System32\shell32.dll ModLoad: 00007ffb 5cd80000 00007ffb5cda9000
C:\WINDOWS\system32\dwmapi.dll ModLoad 62880000 00007ffb: 00007ffb 5fcc0000 00007ffb62a6100000000007: WINDOWS\System32\cfgmgr32.dll ModLoad: 00007ffb5f530000 00007ffb 5fc3d000
C:\WINDOWS\System32\windows.storage.dll onecore\windows\core\console\open\src\renderer\gdi\invalidate.cpp(121)\conhost.exe! 00007FF7169FE2AF: (调用者: 00007FF7169FF414) ReturnHr(2) tid(4230) 80070578 无效的窗口句柄。模组加载:00007ffb61140000 00007ffb61191000
C:\WINDOWS\System32\shlwapi.dll ModLoad: 00007ffb 60990000 00007ffb60a42000 C:\WINDOWS\System32\KERNEL32.DLL ModLoad: 00007ffb 5ec30000 00007ffb5ec41000
C:\WINDOWS\System32\kernel.appcore.dll ModLoad: 00007ffb 5ed80000 00007ffb5eff3000 C:\WINDOWS\ System32\KERNELBASE.dll ModLoad: 00007ffb 5ec10000 00007ffb5ec2f000 C:\WINDOWS\System32\profapi.dll ModLoad: 00007ffb 5ebc0000 00007ffb5ec0c000
C:\WINDOWS\System32\powrprof.dll ModLoad: 00007ffb 5ebb0000 00007ffb5ebba000 C:\WINDOWS\System32\FLTLIB.DLL ModLoad: 00007ffb 5f490000 00007ffb5f52f000
C:\WINDOWS\System32\msvcp_win.dll ModLoad: 00007ffb 5f1a0000 00007ffb5f29a000 C:\WINDOWS\System32\ucrtbase.dll ModLoad: 00007ffb 606e0000 00007ffb60789000 C:\WINDOWS\System32\shcore.dll ModLoad: 00007ffb 4e290000 00007ffb4e4f9000
C:\WINDOWS\WinSxS\amd64_dfmicrosoft.windows.common-controls_6_165b.f6444441 .472_none_fb3f9af53068156d\comctl32.DLL ModLoad: 00007ffb 5ca60000 00007ffb5caf8000
C:\WINDOWS\system32\uxtheme.dll ModLoad: 00007ffb 608f0000 00007ffb6098e000 C:\WINDOWS\System32\msvcrt.dll ModLoad: 00007ffb601e0000 00007ffb60304000 C:\WINDOWS\System32\RPCRT4.dll ModLoad: 00007ffb 60a60000 00007ffb60d82000
C:\WINDOWS\System32\combase.dll ModLoad: 00007ffb 5fc40000 00007ffb5fcba000 C:\WINDOWS\System32\bcryptPrimitives.dll ModLoad: 00007ffb 627a0000 00007ffb62841000 C:\WINDOWS\System3 advapi32.dll ModLoad: 00007ffb 57bc6000 C:\WINDOWS\System32\TextInputFramework.dll (3d80.256c): Break 指令异常 - 代码 80000003 (第一次机会) ntdll!LdrpDoDebuggerBreak+0x30: 00007ffb`6294c93c cc int 3610d0000 00007ffb 6112b000
C:\WINDOWS\System32\sechost.dll ModLoad: 00007ffb57b30000 00007ffb