user-0 提问: 有没有一种方法能够不经过驱动程序直接向USB接口输出数据呢？？？

回复:
user: user-1
content: 楼主现在弄得怎么样了？可否借鉴下？我现在遇到了同样的问题，想和你交流一下，QQ1628711961

user: user-2
content: 遇到同样问题，能交流下吗？QQ525393212

user: user-3
content: 引用 楼主 u012666501 的回复:萌新不懂底层开发，目前被领导要求鼓捣一台赛默飞世尔的近红外光谱仪，遇到不明白的问题了，希望论坛大神能够帮帮我。        问题描述：我需要开发一个操作仪器的应用程序，但是最关键的设备驱动程序API设备生产厂家拒绝提供，原因是希望我们使用他们配套设备出售的软件。                            所以现在我需要在没有驱动程序API的情况下操作设备了。怎么看都是不可能的事情。所以我现在尝试绕过驱动层，直接模拟配套软件在控制设备的过程中USB口上流过的数据来达到控制设备的目的。                            各位大神们，有没有方法能够让我直接向一个USB接口发送数据？？而不是Createfile之后在使用Writefile和Readfile或是Controldevice和驱动程序交互。当然由于驱动程序还是存在的所以Createfile能够成功拿到设备控制句柄。   剩下的就100分了，不成敬意   楼主现在弄得怎么样了？可否借鉴下？

user: user-3
content: 顶一下，我公司现在也有相同的需求，让我做……看了厂商的驱动，本来想要不要自己写一个驱动上去……上面告诉我尽量不要动驱动的东西，因为只是做一个测试的程序

user: user-0
content: 引用 12 楼 kuyucman 的回复:你不是破解了他们的协议吗 我所知道的只是，驱动程序和设备之间交互的信息格式，也就是USB口上流过的数据。

user: user-4
content: 你不是破解了他们的协议吗

user: user-0
content: 引用 10 楼 kuyucman 的回复:我之前是通过USB设备连接后找注册表的变化，来确定USB设备的名称，然后createFile进行IO  可以尝试用下libusb库 我现在USB设备的连接和获取控制句柄已经不成问题，现在就是不知道驱动程序的API，导致我不能控制设备，不能和设备交互

user: user-4
content: 我之前是通过USB设备连接后找注册表的变化，来确定USB设备的名称，然后createFile进行IO  可以尝试用下libusb库

user: user-5
content: 举个简单的例子，比如说，有一个 API，她会点亮设备上的 LED 灯。 这个 API 的参数就是 LED 灯的序号，返回点亮灯的颜色。  此时这个 API 其实很简单，就是通过 USB 传输参数到设备，然后设备动作并返回数据。 如果你对 API 的协议很清楚，那么就可以直接写一个同样的 API，甚至于你可以把这个 API 的动作写在你的程序中。 但是你需要确实知道 API 的协议，比如说如何初始化，函数代码，也就是功能号，缓冲区大小。  如果返回失败，看看 lastError.

user: user-5
content: 你现在和 USB 的关系不大了，除非你没有解析出 USB 使用的端口等等。 USB 很多的端口，硬件在报告的时候，不告诉你使用的是什么接口，什么端口。 只要争取了就可以和设备通信。  但是， API 的提供的功能，还需要对这些 API 的参数进行打包到 InBuffer。 然后使用 USB 的通信功能传输到设备，然后设备接收到数据，根据你的函数代码，解析出InBuffer 数据。 设备动作后返回结果给你。  你看看 LastError 是否是不正确的函数。

user: user-5
content: 这个就是设备的函数代码，驱动和设备根据这个函数代码来执行不同的函数。 你可以理解为函数名。 你不是已经解析了协议了吗？ 协议的第一个就是这个，没一个功能对应一个，而且没有函数代码都有自己的缓冲区内容的解析和填充方式。

user: user-0
content: 引用 9 楼 Saleayas 的回复:举个简单的例子，比如说，有一个 API，她会点亮设备上的 LED 灯。 这个 API 的参数就是 LED 灯的序号，返回点亮灯的颜色。  此时这个 API 其实很简单，就是通过 USB 传输参数到设备，然后设备动作并返回数据。 如果你对 API 的协议很清楚，那么就可以直接写一个同样的 API，甚至于你可以把这个 API 的动作写在你的程序中。 但是你需要确实知道 API 的协议，比如说如何初始化，函数代码，也就是功能号，缓冲区大小。  如果返回失败，看看 lastError. 我突然发现一个严重的问题，那就是调用deviceiocontrol时候的第二个参数dwIoControlCode我不知道，之前我设置为0 ，结果调用失败，也许就是这个原因，但是要获取这个参数的正确输入好像根本不可能，它的宏定义较为复杂；这样我是不是应该收工不干了？？根本干不了。  网上的朋友们说叫我使用winusb.sys这个东西去开发，不知道可行不可行

user: user-6
content: 驱动是绕不过去的坎  你需要的是了解设备如何工作的 调用设备驱动的哪些功能

user: user-0
content: 引用 6 楼 Saleayas 的回复:既然你已经有与硬件的协议，那么很简单。 自己写一个封装就可以了。 因为 USB 驱动是系统的。 使用 CreateFile 打开 USB 端口。 使用 WriteFile/ReadFile 或者 DeviceIOControl 和硬件通讯就可以了。 很具协议中的功能函数号实现你需要的 API。 她们的提供的 API 也是这样开发的。 我在和你确认一下啊，我现在拥有的东西，第一是设备驱动程序已经安装好了，系统能够识别设备，只是缺少应用程序可调用的驱动程序API；第二，我已经通过监听USB口上流过的数据，完整的逆推除了驱动程序和设备交互的协议格式。  在这种情况下，按照你说的方法真的能够实现？？？？ 顺便提一下，之前我试过这个方法，其中Createfile方法能够成功的拿到设备控制句柄，但是在使用writefuke或是devicecontrol向设备写入数据的时候却返回false。现在不知道问题处在什么地方

user: user-5
content: 既然你已经有与硬件的协议，那么很简单。 自己写一个封装就可以了。 因为 USB 驱动是系统的。 使用 CreateFile 打开 USB 端口。 使用 WriteFile/ReadFile 或者 DeviceIOControl 和硬件通讯就可以了。 很具协议中的功能函数号实现你需要的 API。 她们的提供的 API 也是这样开发的。

user: user-7
content: 引用 4 楼 u012666501 的回复:[quote=引用 3 楼 user-7 的回复:] [quote=引用 2 楼 u012666501 的回复:] [quote=引用 1 楼 user-7 的回复:] 前年我做过类似的事情，用device monitoring studio截取了设备和PC之间的报文，然后逆向分析出了要用到部分协议和账号密码，要逆向出完整的协议是几乎不可能的，除非协议特别简单功能特别少。 我已经逆推出完整的协议，协议为明文格式的XML文档，可以说只要能够发送数据就应该能够完成了，求直接向USB口发送数据的方式。[/quote]  那只能自己做一个驱动了，跟自己的驱动通信[/quote] 不能直接往USB接口写数据吗？？不经过驱动，我只要求直接往接口发送数据[/quote]  usb有20个大类的设备，每个大类里面可能还有几个小类，你不用驱动去做些初始化和转换，操作系统怎么知道你的设备是哪个类型的，又该如何工作？驱动是绕不过去的，可以用别的驱动代替厂家的驱动，但是不能没有驱动。

user: user-0
content: 引用 3 楼 user-7 的回复:[quote=引用 2 楼 u012666501 的回复:] [quote=引用 1 楼 user-7 的回复:] 前年我做过类似的事情，用device monitoring studio截取了设备和PC之间的报文，然后逆向分析出了要用到部分协议和账号密码，要逆向出完整的协议是几乎不可能的，除非协议特别简单功能特别少。 我已经逆推出完整的协议，协议为明文格式的XML文档，可以说只要能够发送数据就应该能够完成了，求直接向USB口发送数据的方式。[/quote]  那只能自己做一个驱动了，跟自己的驱动通信[/quote] 不能直接往USB接口写数据吗？？不经过驱动，我只要求直接往接口发送数据

user: user-7
content: 引用 2 楼 u012666501 的回复:[quote=引用 1 楼 user-7 的回复:] 前年我做过类似的事情，用device monitoring studio截取了设备和PC之间的报文，然后逆向分析出了要用到部分协议和账号密码，要逆向出完整的协议是几乎不可能的，除非协议特别简单功能特别少。 我已经逆推出完整的协议，协议为明文格式的XML文档，可以说只要能够发送数据就应该能够完成了，求直接向USB口发送数据的方式。[/quote]  那只能自己做一个驱动了，跟自己的驱动通信

user: user-0
content: 引用 1 楼 user-7 的回复:前年我做过类似的事情，用device monitoring studio截取了设备和PC之间的报文，然后逆向分析出了要用到部分协议和账号密码，要逆向出完整的协议是几乎不可能的，除非协议特别简单功能特别少。 我已经逆推出完整的协议，协议为明文格式的XML文档，可以说只要能够发送数据就应该能够完成了，求直接向USB口发送数据的方式。

user: user-7
content: 前年我做过类似的事情，用device monitoring studio截取了设备和PC之间的报文，然后逆向分析出了要用到部分协议和账号密码，要逆向出完整的协议是几乎不可能的，除非协议特别简单功能特别少。