0

我正在开发一个可以与单个应用程序对话的 USB 设备。看起来我们可能想要一个 Windows 驱动程序,为应用程序提供更好的软件界面。(与让应用程序本身通过 WinUSB 向设备发送较低级别的命令相反。)

是否可以从 DLL 中使用 WinUSB?选择用于开发 USB 客户端驱动程序的驱动程序模型并没有专门解决这个问题。

在这种情况下,我是否应该考虑编写基于 UMDF 或 KMDF 的驱动程序,或者调用 WDM 例程的混合驱动程序?

4

1 回答 1

2

使用 WinUSB 可能是正确的方法。您绝对可以在 DLL 中使用 WinUSB。通常,您可以编写一个 DLL 来调用另一个 DLL 中的函数,而 winusb.dll 并没有什么特别之处可以阻止您这样做。此外,它已经在 libusb 和 libusbp 等其他项目中完成,它们编译为使用 winusb.dll 的 DLL。

我还鼓励您使您的代码跨平台:不要直接从您的 DLL 调用 WinUSB,而是使用 USB 抽象库,例如libusblibusbp。即使您只想支持 Windows,这些库也比 SetupAPI 和 WinUSB 更容易使用,因此它们应该可以节省开发时间。如果您希望您的代码在不同的操作系统上工作,它们还将节省大量时间。

我认为在这种情况下编写自己的 UMDF 或 KMDF 驱动程序的唯一原因是,如果您需要 WinUSB 不支持的 Windows USB 堆栈的高级功能。例如,如果您需要将设备切换到不同的 USB 配置,或者在电源管理方面做一些棘手的事情,或者允许多个应用程序同时使用该设备。如果您只是想来回发送一些数据,WinUSB 是一个不错的选择。

于 2016-08-25T19:10:50.087 回答