在DLL中使用WinUSB?

时间:2016-08-25 18:19:23

标签: windows usb driver winusb

我正在使用可与单个应用程序通信的USB设备。看起来我们可能想要一个Windows驱动程序,它为应用程序提供了一个更好的软件接口。 (与让应用程序本身通过WinUSB向设备发送低级命令相反。)

是否可以在DLL中使用WinUSB? Choosing a driver model for developing a USB client driver没有具体说明这一点。

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

1 个答案:

答案 0 :(得分: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是一个不错的选择。