阅读:1328回复:6
我用DS3.1做的驱动,怎么一用WriteFile就蓝屏重起了?
我用DS3.1驱动向导做的驱动,类型为USB,端点1和2均为Bulk,端点1 IN OUT缓冲均为16,端点2 IN OUT缓冲均为64,只处理读写请求、cleanup等常规请求,生成后,用VC6编译生成的*.sys文件,查找管道好像都没问题,但一对端点使用WriteFile或ReadFile操作就立马蓝屏然后电脑重起了,请教一下各位,怎么回事呢?
|
|
沙发#
发布于:2004-07-01 11:21
我碰到过类似问题。跟踪一下你的驱动程序,看看在write中获取管道最大传输量那行语句,他要先判断管道是否打开。我的就是因为管道未打开,返回最大长度0,导致最终重启计算机的。
[编辑 - 7/1/04 by metalwing] |
|
|
板凳#
发布于:2004-07-01 11:47
我用DS3.1驱动向导做的驱动,类型为USB,端点1和2均为Bulk,端点1 IN OUT缓冲均为16,端点2 IN OUT缓冲均为64,只处理读写请求、cleanup等常规请求,生成后,用VC6编译生成的*.sys文件,查找管道好像都没问题,但一对端点使用WriteFile或ReadFile操作就立马蓝屏然后电脑重起了,请教一下各位,怎么回事呢? 还是自己跟踪一下吧,这样的问题有很多原因都会导致这个结果。 |
|
|
地板#
发布于:2004-07-01 13:14
奇怪的时我跟踪过,发现没什么问题啊,最大传输长度和我送的字节数都正确,最后的WriteComplete返回的状态也是STATUS_SUCCESS啊,在WriteComplete完成后就进入好多汇编程序段,我就退出来了,看了一下DriverMonitor,上面的信息显示写了我指定的字节,然后是cleanup,然后close了。是不是跟GUID有关?我把原来DS生成的GUID改成D12 smart board的了,请大家帮帮忙吧,我准备再加点分送了
[编辑 - 7/1/04 by bobbysun2000] |
|
地下室#
发布于:2004-07-01 17:28
是不是驱动那边访问的缓冲区错了?应用端过来的用户缓冲区会以不同的方式匹配到IRP的各个域,你是如何处理缓冲区的访问?
|
|
5楼#
发布于:2004-07-01 19:29
我用的是direct方式,访问是使用
KMemory Mem(I.Mdl()); 语句访问IRP域的memory descriptor list |
|
6楼#
发布于:2004-07-02 15:26
怎么没有人回啊,大家帮帮忙吧。
|
|