20楼#
发布于:2004-02-11 15:23
第一个问题,正如你所说的,可以采用定时器或者另外开一个系统线程从USB设备上读取。
第二个和第三个问题,属于USB client driver如何向USBD层读写数据的范围。可以参考一下ddk的bulk, iso等例子。一般来说usb client driver生成irp发送到下层,这个方法都比较固定。那些例子里边都有很多演示的用法。 |
|
21楼#
发布于:2004-02-11 16:42
可能我刚才没说清楚。
我现在的问题: 在 应用程序 没有产生IRP_MJ_READ的 请求包的情况下,怎样生成IRP_MJ_READ请求包? 所以我问了 这两个问题 2)若用IoAllocateIrp() 创建一个Irp, MDL 应如何创建? 3)该Irp的参数应如何填充? 而usb sample中说的都是在 有应用程序没有产生IRP_MJ_READ的情况下,接管该IRP. 这个好做。 请牛人指教!! 谢谢。。 |
|
22楼#
发布于:2004-02-11 16:59
你的意思是不是:
在 应用程序 没有产生IRP_MJ_READ的 请求包的情况下,如何向底层的驱动发送IRP_MJ_READ请求吗? 如果是这样的话,就在定时器里边向下层发送读取数据的命令。 可能我还没有理解你的意思。:( |
|
23楼#
发布于:2004-02-11 17:21
是这个意思。
在定时器处理routine 中 , 我就不知道 怎样生成和配置这个read 请求包。 你能给我个例子看看。 因为在该Irp中涉及到mdl 的访问的问题, 你帮我分析分析 。。。 解决这个问题,我想这个driver 就能工作了 。 非常谢谢!!! |
|
24楼#
发布于:2004-02-11 17:43
生成一个新的Irp有好几个函数可以做到。有的不需要mdl。我以前做的一个usb client driver的项目好像没有怎么处理mdl的问题。当使用的一个函数生成irp,好像没有对mdl进行处理。现在记不清当时用的什么irp生成函数了。
目前手头上没有那个程序了。你不妨换一个函数试试看。 |
|
25楼#
发布于:2004-02-17 16:26
楼主,有幸得你的例子使我完成了一个虚拟串口驱动程序,不过还是有两个问题没有解决:
1。安装驱动后在设备管理器中会显示VirtualSerial,但重新启动后这个图标不见了,运行enum -p 1只是说明我的设备已安装成功, test.exe却提示没有虚拟设备。测试了你的程序也是这样,怎样使我重新启动后在设备管理器中仍会显示VirtualSerial呢,是要改inf文件还是driver代码呢? 怎么改? 2。如果装N次busenum.sys,那么在设备管理器中的系统设备中会有N个Toaster Bus Enumerator DeviceDesc,怎样使我装N次busenum.sys仅只显示一个Toaster Bus Enumerator DeviceDesc呢? |
|
26楼#
发布于:2004-02-17 16:32
楼主,有幸得你的例子使我完成了一个虚拟串口驱动程序,不过还是有两个问题没有解决:
1。安装驱动后在设备管理器中会显示VirtualSerial,但重新启动后这个图标不见了,运行enum -p 1只是说我的设备已安装成功, test.exe却提示没有虚拟设备。测试了你的程序也是这样,怎样使我重新启动后在设备管理器中仍会显示VirtualSerial呢,是要改inf文件还是driver代码呢? 怎么改? 2。如果装N次busenum.sys,那么在设备管理器中的系统设备中会有N个Toaster Bus Enumerator DeviceDesc,怎样使我装N次busenum.sys仅只显示一个Toaster Bus Enumerator DeviceDesc呢? |
|
27楼#
发布于:2004-02-17 16:55
1.之所以这样动态生成虚拟设备完全是原来代码toaster的基础上开发的结果。这样比较方便调试。就像usb设备一样可以热插拔设备。当然完全可以改成toaster bus driver一启动就枚举出虚拟设备。改动的方法,我目前能够想到的有两个:
1、写一个win32程序或者是cpl程序(就是在控制面班上的程序)系统一启动就自动向toaster bus driver发送生成新设备的命令 2、改动toaster bus driver。使得它start device以后就枚举出一定数量的新设备。 两种方法各有千秋。 2.这个现象是正常的。就像你的电脑里边安装N个网卡就会有N个图标一样。如果没有相应的图标反而不正常了。 |
|
28楼#
发布于:2004-02-18 09:07
多谢楼主回复!!!
|
|
29楼#
发布于:2004-02-18 10:28
Thank you!
|
|
30楼#
发布于:2004-02-19 22:48
请问楼主能不能把你的虚拟串口程序发给我,先谢了!
lwc@an-sen.com |
|
31楼#
发布于:2004-02-20 02:52
不是已经提供下载吗 ??
|
|
32楼#
发布于:2004-02-21 08:02
楼主,问你一个比较菜鸟性的问题,但对于刚入门的人是很重要的,请楼主回答:
你这个程序中有个Debuglog文件夹,里面记载的是调试信息的TXT文件,比如“toaster_bus分析2003_12_11.txt"等等,请问,这些信息是怎样从驱动中写入这些txt文件中的,是用softice?, 那具体的要怎样做呢? 谢谢!!! |
|
33楼#
发布于:2004-02-21 08:27
用这个就可以啦 !!
http://www.sysinternals.com/files/dbgvnt.zip |
|
34楼#
发布于:2004-02-21 08:47
谢谢KMK,
不过还想问楼主的是: 楼主是否也是用dbgView? |
|
35楼#
发布于:2004-02-21 09:30
用的是softice
启动soiftice symbol loader file->Save SoftIce history as.. 就可以把softice的屏幕信息保存到文件中。 |
|
36楼#
发布于:2004-02-22 12:55
首先谢谢楼主提供代码。
请问编译环境是什么?我用win xp DDK,不能编译,请多赐教! 另外,enum -p 1在windows me下不起作用,怎么解决? 多谢! 新手上路,多多关照 |
|
37楼#
发布于:2004-02-23 09:28
我没有用过xpddk编译过。应该问题不大吧?可能一些小地方需要修改。
我开发和测试用的平台是windows 2000 sp4 win2000 ddk vc 6.0 |
|
38楼#
发布于:2004-02-24 23:47
多谢楼主回复
|
|
39楼#
发布于:2004-02-27 22:07
我没有用过xpddk编译过。应该问题不大吧?可能一些小地方需要修改。 我看了你的东东,很好! 我也写里一个驱动程序!这个驱动是一个游戏程序!但只能在 windows xp 或者 windows xp sp1 上跑。你可以到 http://link.coolala.net/temp/game.rar 该游戏是热键激活的。 (ctrl + f12) (Esc 键退出)(图形界面) 我建议这位老兄最好用 c++ 写驱动。这样可以管理大的代码。 你应该用个版本管理软件。 例如 CVS Sourcesafe 等。 只说不练假把势。 只练不说傻把势。 又说又练真把势。 |
|