有没有一种方法能够不经过驱动程序直接向USB接口输出数据呢???

风雅-小欣 2015-12-25 04:58:38
萌新不懂底层开发,目前被领导要求鼓捣一台赛默飞世尔的近红外光谱仪,遇到不明白的问题了,希望论坛大神能够帮帮我。


问题描述:我需要开发一个操作仪器的应用程序,但是最关键的设备驱动程序API设备生产厂家拒绝提供,原因是希望我们使用他们配套设备出售的软件。
所以现在我需要在没有驱动程序API的情况下操作设备了。怎么看都是不可能的事情。所以我现在尝试绕过驱动层,直接模拟配套软件在控制设备的过程中USB口上流过的数据来达到控制设备的目的。
各位大神们,有没有方法能够让我直接向一个USB接口发送数据??而不是Createfile之后在使用Writefile和Readfile或是Controldevice和驱动程序交互。当然由于驱动程序还是存在的所以Createfile能够成功拿到设备控制句柄。


剩下的就100分了,不成敬意
...全文
721 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_35452020 2017-09-20
  • 打赏
  • 举报
回复
楼主现在弄得怎么样了?可否借鉴下?我现在遇到了同样的问题,想和你交流一下,QQ1628711961
XinTiaoShiMiao 2017-05-22
  • 打赏
  • 举报
回复
遇到同样问题,能交流下吗?QQ525393212
iceast 2016-02-01
  • 打赏
  • 举报
回复
引用 楼主 u012666501 的回复:
萌新不懂底层开发,目前被领导要求鼓捣一台赛默飞世尔的近红外光谱仪,遇到不明白的问题了,希望论坛大神能够帮帮我。 问题描述:我需要开发一个操作仪器的应用程序,但是最关键的设备驱动程序API设备生产厂家拒绝提供,原因是希望我们使用他们配套设备出售的软件。 所以现在我需要在没有驱动程序API的情况下操作设备了。怎么看都是不可能的事情。所以我现在尝试绕过驱动层,直接模拟配套软件在控制设备的过程中USB口上流过的数据来达到控制设备的目的。 各位大神们,有没有方法能够让我直接向一个USB接口发送数据??而不是Createfile之后在使用Writefile和Readfile或是Controldevice和驱动程序交互。当然由于驱动程序还是存在的所以Createfile能够成功拿到设备控制句柄。 剩下的就100分了,不成敬意
楼主现在弄得怎么样了?可否借鉴下?
iceast 2016-02-01
  • 打赏
  • 举报
回复
顶一下,我公司现在也有相同的需求,让我做……看了厂商的驱动,本来想要不要自己写一个驱动上去……上面告诉我尽量不要动驱动的东西,因为只是做一个测试的程序
风雅-小欣 2015-12-29
  • 打赏
  • 举报
回复
引用 12 楼 kuyucman 的回复:
你不是破解了他们的协议吗
我所知道的只是,驱动程序和设备之间交互的信息格式,也就是USB口上流过的数据。
东莞某某某 2015-12-29
  • 打赏
  • 举报
回复
你不是破解了他们的协议吗
风雅-小欣 2015-12-29
  • 打赏
  • 举报
回复
引用 10 楼 kuyucman 的回复:
我之前是通过USB设备连接后找注册表的变化,来确定USB设备的名称,然后createFile进行IO 可以尝试用下libusb库
我现在USB设备的连接和获取控制句柄已经不成问题,现在就是不知道驱动程序的API,导致我不能控制设备,不能和设备交互
东莞某某某 2015-12-29
  • 打赏
  • 举报
回复
我之前是通过USB设备连接后找注册表的变化,来确定USB设备的名称,然后createFile进行IO 可以尝试用下libusb库
Saleayas 2015-12-29
  • 打赏
  • 举报
回复
举个简单的例子,比如说,有一个 API,她会点亮设备上的 LED 灯。 这个 API 的参数就是 LED 灯的序号,返回点亮灯的颜色。 此时这个 API 其实很简单,就是通过 USB 传输参数到设备,然后设备动作并返回数据。 如果你对 API 的协议很清楚,那么就可以直接写一个同样的 API,甚至于你可以把这个 API 的动作写在你的程序中。 但是你需要确实知道 API 的协议,比如说如何初始化,函数代码,也就是功能号,缓冲区大小。 如果返回失败,看看 lastError.
Saleayas 2015-12-29
  • 打赏
  • 举报
回复
你现在和 USB 的关系不大了,除非你没有解析出 USB 使用的端口等等。 USB 很多的端口,硬件在报告的时候,不告诉你使用的是什么接口,什么端口。 只要争取了就可以和设备通信。 但是, API 的提供的功能,还需要对这些 API 的参数进行打包到 InBuffer。 然后使用 USB 的通信功能传输到设备,然后设备接收到数据,根据你的函数代码,解析出InBuffer 数据。 设备动作后返回结果给你。 你看看 LastError 是否是不正确的函数。
Saleayas 2015-12-29
  • 打赏
  • 举报
回复
这个就是设备的函数代码,驱动和设备根据这个函数代码来执行不同的函数。 你可以理解为函数名。 你不是已经解析了协议了吗? 协议的第一个就是这个,没一个功能对应一个,而且没有函数代码都有自己的缓冲区内容的解析和填充方式。
风雅-小欣 2015-12-29
  • 打赏
  • 举报
回复
引用 9 楼 Saleayas 的回复:
举个简单的例子,比如说,有一个 API,她会点亮设备上的 LED 灯。 这个 API 的参数就是 LED 灯的序号,返回点亮灯的颜色。 此时这个 API 其实很简单,就是通过 USB 传输参数到设备,然后设备动作并返回数据。 如果你对 API 的协议很清楚,那么就可以直接写一个同样的 API,甚至于你可以把这个 API 的动作写在你的程序中。 但是你需要确实知道 API 的协议,比如说如何初始化,函数代码,也就是功能号,缓冲区大小。 如果返回失败,看看 lastError.
我突然发现一个严重的问题,那就是调用deviceiocontrol时候的第二个参数dwIoControlCode我不知道,之前我设置为0 ,结果调用失败,也许就是这个原因,但是要获取这个参数的正确输入好像根本不可能,它的宏定义较为复杂;这样我是不是应该收工不干了??根本干不了。 网上的朋友们说叫我使用winusb.sys这个东西去开发,不知道可行不可行
lm_whales 2015-12-28
  • 打赏
  • 举报
回复
驱动是绕不过去的坎 你需要的是了解设备如何工作的 调用设备驱动的哪些功能
风雅-小欣 2015-12-28
  • 打赏
  • 举报
回复
引用 6 楼 Saleayas 的回复:
既然你已经有与硬件的协议,那么很简单。 自己写一个封装就可以了。 因为 USB 驱动是系统的。 使用 CreateFile 打开 USB 端口。 使用 WriteFile/ReadFile 或者 DeviceIOControl 和硬件通讯就可以了。 很具协议中的功能函数号实现你需要的 API。 她们的提供的 API 也是这样开发的。
我在和你确认一下啊,我现在拥有的东西,第一是设备驱动程序已经安装好了,系统能够识别设备,只是缺少应用程序可调用的驱动程序API;第二,我已经通过监听USB口上流过的数据,完整的逆推除了驱动程序和设备交互的协议格式。 在这种情况下,按照你说的方法真的能够实现???? 顺便提一下,之前我试过这个方法,其中Createfile方法能够成功的拿到设备控制句柄,但是在使用writefuke或是devicecontrol向设备写入数据的时候却返回false。现在不知道问题处在什么地方
Saleayas 2015-12-25
  • 打赏
  • 举报
回复
既然你已经有与硬件的协议,那么很简单。 自己写一个封装就可以了。 因为 USB 驱动是系统的。 使用 CreateFile 打开 USB 端口。 使用 WriteFile/ReadFile 或者 DeviceIOControl 和硬件通讯就可以了。 很具协议中的功能函数号实现你需要的 API。 她们的提供的 API 也是这样开发的。
pcboyxhy 2015-12-25
  • 打赏
  • 举报
回复
引用 4 楼 u012666501 的回复:
[quote=引用 3 楼 pcboyxhy 的回复:] [quote=引用 2 楼 u012666501 的回复:] [quote=引用 1 楼 pcboyxhy 的回复:] 前年我做过类似的事情,用device monitoring studio截取了设备和PC之间的报文,然后逆向分析出了要用到部分协议和账号密码,要逆向出完整的协议是几乎不可能的,除非协议特别简单功能特别少。
我已经逆推出完整的协议,协议为明文格式的XML文档,可以说只要能够发送数据就应该能够完成了,求直接向USB口发送数据的方式。[/quote] 那只能自己做一个驱动了,跟自己的驱动通信[/quote] 不能直接往USB接口写数据吗??不经过驱动,我只要求直接往接口发送数据[/quote] usb有20个大类的设备,每个大类里面可能还有几个小类,你不用驱动去做些初始化和转换,操作系统怎么知道你的设备是哪个类型的,又该如何工作?驱动是绕不过去的,可以用别的驱动代替厂家的驱动,但是不能没有驱动。
风雅-小欣 2015-12-25
  • 打赏
  • 举报
回复
引用 3 楼 pcboyxhy 的回复:
[quote=引用 2 楼 u012666501 的回复:] [quote=引用 1 楼 pcboyxhy 的回复:] 前年我做过类似的事情,用device monitoring studio截取了设备和PC之间的报文,然后逆向分析出了要用到部分协议和账号密码,要逆向出完整的协议是几乎不可能的,除非协议特别简单功能特别少。
我已经逆推出完整的协议,协议为明文格式的XML文档,可以说只要能够发送数据就应该能够完成了,求直接向USB口发送数据的方式。[/quote] 那只能自己做一个驱动了,跟自己的驱动通信[/quote] 不能直接往USB接口写数据吗??不经过驱动,我只要求直接往接口发送数据
pcboyxhy 2015-12-25
  • 打赏
  • 举报
回复
引用 2 楼 u012666501 的回复:
[quote=引用 1 楼 pcboyxhy 的回复:] 前年我做过类似的事情,用device monitoring studio截取了设备和PC之间的报文,然后逆向分析出了要用到部分协议和账号密码,要逆向出完整的协议是几乎不可能的,除非协议特别简单功能特别少。
我已经逆推出完整的协议,协议为明文格式的XML文档,可以说只要能够发送数据就应该能够完成了,求直接向USB口发送数据的方式。[/quote] 那只能自己做一个驱动了,跟自己的驱动通信
风雅-小欣 2015-12-25
  • 打赏
  • 举报
回复
引用 1 楼 pcboyxhy 的回复:
前年我做过类似的事情,用device monitoring studio截取了设备和PC之间的报文,然后逆向分析出了要用到部分协议和账号密码,要逆向出完整的协议是几乎不可能的,除非协议特别简单功能特别少。
我已经逆推出完整的协议,协议为明文格式的XML文档,可以说只要能够发送数据就应该能够完成了,求直接向USB口发送数据的方式。
pcboyxhy 2015-12-25
  • 打赏
  • 举报
回复
前年我做过类似的事情,用device monitoring studio截取了设备和PC之间的报文,然后逆向分析出了要用到部分协议和账号密码,要逆向出完整的协议是几乎不可能的,除非协议特别简单功能特别少。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧