使用 C 或 C++ 从 USB 设备接收数据

2023-12-26

我需要所有插入的 USB 设备的列表,并让用户选择一个,让控制台应用程序接收 USB 设备发送的任何数据。

然后我可以开始处理程序中的数据。

我不想使用库,只想使用标准 C++ 函数,并且该程序应该在 Windows 98 中运行。


这是一个very论坛和编程问答网站中持续存在的问题。永远不会有一个幸福的结局。 USB中的B是总线的意思。这是计算机硬件设计中的一个术语,用于描述电子设备交换数据的电气接口。它的作用与机器内的 PCI(express)总线完全相同。由于 USB 首先是一种电气规范,因此它支持大量类型的设备。从无线网络适配器、调制解调器、闪存卡到茶壶加热器等任何东西。它唯一不能很好处理的设备是需要非常大带宽的设备,例如视频适配器。

USB规范有一个非常优雅的协议规范,描述了设备如何共享总线以及如何交换数据。然而,该协议规范根本没有描述数据的格式,它只是定义了能够传递字节块的概念。由设备本身赋予这些字节含义。

在机器端,您需要软件来解释这些字节并使机器用它们做一些有趣的事情。这需要一个设备驱动程序。就像您的视频卡和网络接口卡需要设备驱动程序一样。显然视频驱动程序是very与 NIC 驱动程序不同。 USB驱动程序也是如此,几乎没有什么共同点。

如果您想编写以类似方式对待 USB 设备的软件,那么您需要在它们仍然有共同点的级别上编写该软件。在 USB 控制器级别,您可以编写一个过滤器驱动程序,将其自身注入到 USB 驱动程序堆栈中,并查看控制器和设备驱动程序之间的 I/O 请求数据包。类似于监视 TCP/IP 流量的 winpcap 过滤器驱动程序。不过,没有什么有趣的东西可看,你会盯着来回传递的字节块。这是一个比 winpcap 更大的问题,至少它看到了字节飞翔,其含义记录在 RFC 中的某处。 USB 则不然,制造 USB 设备的公司通常也是设备驱动程序的供应商。他们保留内部格式未记录。

编写过滤器驱动程序需要相当高深的技能,有很多痛点。就像当你犯一个简单的错误时操作系统就会崩溃一样。最近 Windows 驱动程序模型也发生了相当大的变化,USB 驱动程序已移至环 3(用户模式)以保持操作系统稳定。

首先,下载 Windows WDK(又名“DDK”)并阅读 Walter Oney 的书籍。最好是全部。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 C 或 C++ 从 USB 设备接收数据 的相关文章

随机推荐