daor
驱动牛犊
驱动牛犊
  • 注册日期2001-05-16
  • 最后登录2018-04-15
  • 粉丝0
  • 关注0
  • 积分-25分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1856回复:8

(u盘)总线驱动中的PnP(续)

楼主#
更多 发布于:2003-03-18 18:10
现象:
==========================
?插入u盘后,枚举成功;
?在BusRelations的IRP_MN_QUERY_DEVICE_RELATIONS中,创建(只在第一次创建)并返回U盘PDO;
  。。。。。。
?系统了解到总线结构,开始针对以上创建的PDO进行一系列pnp,并开始安装上层的disk.sys,这时我的u盘程序接收到第一个IRP_MJ_SCSI,其功能为SRB_FUNCTION_CLAIM_DEVICE,正确处理并返回后,
?系统发出一个不明Io control,code = 2d1400。接着就发出IRP_MN_QUERY_DEVICE_RELATIONS,最后IRP_MN_REMOVE_DEVICE灭掉我的PDO。Game Over。
============================
不知道是什么IRP的处理出了问题?
另外,系统针对PDO已经发出的IRP_MJ_PNP有:

IRP_MN_QUERY_CAPA­BILITIES //随便填充一些信息返回成功;
IRP_MN_QUERY_ID // 正确处理并成功返回;
IRP_MN_QUERY_DEVICE_ TEXT // 正确处理并成功返回;
IRP_MN_QUERY_BUS_INFORMATION // 未作任何处理返回(即保持原状返回);
IRP_MN_QUERY_RESOURCES // 未作任何处理返回,或者成功返回;
IRP_MN_QUERY_RESOURCE_ REQUIREMENTS // 未作任何处理返回, 或者成功返回;
IRP_MN_START_DEVICE // 成功返回;
IRP_MN_QUERY_DEVICE_ RELATIONS // 是BusRelations则填充pdo地址,并成功返回;
IRP_MN_REMOVE_DEVICE //成功返回。

请大侠帮忙分析一下,我的哪个IRP处理出了错误?其中,IRP_MN_QUERY_RESOURCES和IRP_MN_QUERY_RESOURCE_ REQUIREMENTS发出了两次,我曾经尝试不作任何处理,或成功返回,都还是如此。

谢谢

[编辑 -  3/18/03 by  daor]
bag
bag
驱动牛犊
驱动牛犊
  • 注册日期2002-03-19
  • 最后登录2007-10-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-18 21:20
现象:
==========================
?插入u盘后,枚举成功;
?在BusRelations的IRP_MN_QUERY_DEVICE_RELATIONS中,创建(只在第一次创建)并返回U盘PDO;
  。。。。。。
?系统了解到总线结构,开始针对以上创建的PDO进行一系列pnp,并开始安装上层的disk.sys,这时我的u盘程序接收到第一个IRP_MJ_SCSI,其功能为SRB_FUNCTION_CLAIM_DEVICE,正确处理并返回后,
?系统发出一个不明Io control,code = 2d1400。接着就发出IRP_MN_QUERY_DEVICE_RELATIONS,最后IRP_MN_REMOVE_DEVICE灭掉我的PDO。Game Over。
============================
不知道是什么IRP的处理出了问题?
另外,系统针对PDO已经发出的IRP_MJ_PNP有:

IRP_MN_QUERY_CAPA­BILITIES //随便填充一些信息返回成功;
IRP_MN_QUERY_ID // 正确处理并成功返回;
IRP_MN_QUERY_DEVICE_ TEXT // 正确处理并成功返回;
IRP_MN_QUERY_BUS_INFORMATION // 未作任何处理返回(即保持原状返回);
IRP_MN_QUERY_RESOURCES // 未作任何处理返回,或者成功返回;
IRP_MN_QUERY_RESOURCE_ REQUIREMENTS // 未作任何处理返回, 或者成功返回;
IRP_MN_START_DEVICE // 成功返回;
IRP_MN_QUERY_DEVICE_ RELATIONS // 是BusRelations则填充pdo地址,并成功返回;
IRP_MN_REMOVE_DEVICE //成功返回。

请大侠帮忙分析一下,我的哪个IRP处理出了错误?其中,IRP_MN_QUERY_RESOURCES和IRP_MN_QUERY_RESOURCE_ REQUIREMENTS发出了两次,我曾经尝试不作任何处理,或成功返回,都还是如此。

谢谢

[编辑 -  3/18/03 by  daor]


这两个消息我也没有处理,
我估计问题可能还在IOCTL的地方,

IOCTL_STORAGE_GET_DEVICE_NUMBER
IOCTL_STORAGE_QUERY_PROPERTY

这两个好像比较重要,不知你处理过了吗?
daor
驱动牛犊
驱动牛犊
  • 注册日期2001-05-16
  • 最后登录2018-04-15
  • 粉丝0
  • 关注0
  • 积分-25分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-20 13:04
多谢老兄指点

我的驱动类型是FILE_DEVICE_MASS_STORAGE(我反汇编USBSTOR.SYS 看出来,它也是用这个类型),应该收不到你所说的这两个io control irp。

我现在暂时把前面工作放下了,先写个usbstor.sys的上层过滤,对系统内部的东西做一个全面的监视。

也许可以看出一点东西来。
bag
bag
驱动牛犊
驱动牛犊
  • 注册日期2002-03-19
  • 最后登录2007-10-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-20 23:22
多谢老兄指点

我的驱动类型是FILE_DEVICE_MASS_STORAGE(我反汇编USBSTOR.SYS 看出来,它也是用这个类型),应该收不到你所说的这两个io control irp。

我现在暂时把前面工作放下了,先写个usbstor.sys的上层过滤,对系统内部的东西做一个全面的监视。

也许可以看出一点东西来。


你可以用DevView来观察usbstor的层次架构,可以看到它用的是什么类型,我自己用的是FILE_DEVICE_DISK类型,基本已经完成。
另外,如果你的上层过滤写好,能否给我一份,懒得自己动手了 :D
daor
驱动牛犊
驱动牛犊
  • 注册日期2001-05-16
  • 最后登录2018-04-15
  • 粉丝0
  • 关注0
  • 积分-25分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-21 09:05
 
你可以用DevView来观察usbstor的层次架构,可以看到它用的是什么类型,我自己用的是FILE_DEVICE_DISK类型,基本已经完成。
另外,如果你的上层过滤写好,能否给我一份,懒得自己动手了


你说的DevView是什么工具?我怎么没有?以前我听人家说这个东东,还以为是windows的设备管理器 :D我信箱是suriyu@163.com,给我寄一个吧,谢谢!
上层过滤已经安装完成,并且已经能输出Scsi指令的内容。当然读写数据、sensedata等各种信息的显示还没做,做完了可以给你。显示终端是DS的调试输出工具Monitor。
以后我可能想自己做Monitor,但是我在考虑怎样显示输出数据,才能最大限度地不影响驱动程序的效率。不知兄弟有何高见? :cool:
bag
bag
驱动牛犊
驱动牛犊
  • 注册日期2002-03-19
  • 最后登录2007-10-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-21 09:28
[quote] 你可以用DevView来观察usbstor的层次架构,可以看到它用的是什么类型,我自己用的是FILE_DEVICE_DISK类型,基本已经完成。
另外,如果你的上层过滤写好,能否给我一份,懒得自己动手了


你说的DevView是什么工具?我怎么没有?以前我听人家说这个东东,还以为是windows的设备管理器 :D我信箱是suriyu@163.com,给我寄一个吧,谢谢!
上层过滤已经安装完成,并且已经能输出Scsi指令的内容。当然读写数据、sensedata等各种信息的显示还没做,做完了可以给你。显示终端是DS的调试输出工具Monitor。
以后我可能想自己做Monitor,但是我在考虑怎样显示输出数据,才能最大限度地不影响驱动程序的效率。不知兄弟有何高见? :cool: [/quote]

mail已经发出,DS的Monitor不如Sysinternals的DebugViewer好使,程序不用改,换个工具而已。

要不影响效率可难说,你根据不同的debug level输出不同的数据吧,另外数据尽量在内存中组织好再一次性用DbgPrint输出……

[编辑 -  3/21/03 by  bag]
daor
驱动牛犊
驱动牛犊
  • 注册日期2001-05-16
  • 最后登录2018-04-15
  • 粉丝0
  • 关注0
  • 积分-25分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-03-25 12:00
谢谢你提供的东东!非常有用!
我大概看了一下sniffUSB,发现它驱动UsbSnoop.sys的写法跟我的大体一样,都是参考了oney的书 :D
我倒对它的安装手法很感兴趣,它在安装UsbSnoop.sys时,用了一个很变态的手段----不是把UsbSnoop.sys从一个地方拷贝到系统目录,而是在系统目录那里建立一个UsbSnoop.sys新文件,然后直接往里面灌bin数据流
实在是太变态了 :mad: :mad:
 :D

[编辑 -  3/25/03 by  daor]
daor
驱动牛犊
驱动牛犊
  • 注册日期2001-05-16
  • 最后登录2018-04-15
  • 粉丝0
  • 关注0
  • 积分-25分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-03-25 12:05
主要是我想做成可以在各个层次安装的过滤。
我现在已经能在SCSI上层和Bulk下层过滤了。
我发现过滤驱动的写法基本上都是固定的,只是对数据流进行
翻译显示时,很耗体力
daor
驱动牛犊
驱动牛犊
  • 注册日期2001-05-16
  • 最后登录2018-04-15
  • 粉丝0
  • 关注0
  • 积分-25分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-03-28 09:10
收盘
过滤已经发出
游客

返回顶部