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

(u盘)总线驱动中的PnP

楼主#
更多 发布于:2003-03-12 08:49
我编写了一个USB移动磁盘驱动程序VirtualMass.sys,代替win2k下的USBSTOR.sys。Pnp过程如下(不妨将USBSTOR.sys或VirtualMass.sys称为“u盘总线驱动”,将Disk.sys称为“U盘”驱动,“u盘”是挂在“u盘总线”上的Child----我的理解应该没错吧?):
1.插入u盘后,系统可以枚举到我的设备,且安装了我的驱动VirtualMass.sys。不妨将这次安装的FDO称为\"U盘总线\"FDO。
2.接着,将进行一系列的FDO Pnp。在FDO的IRP_MN_QUERY_DEVICE_RELATIONS中,我用IoCreateDevice创建了一个“U盘”PDO,并已经成功返回给系统。
3.开始PDO的Pnp。一路小跑到四次IRP_MN_QUERY_ID后,安装过程结束。但只看见我的“u盘总线”上挂了一个“未知设备”,也就是说根本没给我装disk.sys。
大侠们给我指点一下谢谢!是IRP_MN_QUERY_ID的响应出了问题还是别的?


 

最新喜欢:

EdmundChenEdmund...
bag
bag
驱动牛犊
驱动牛犊
  • 注册日期2002-03-19
  • 最后登录2007-10-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-03-13 09:45
悄悄告诉你,别跟我老板说:D

HardwareID,DeviceID用
L\"XXXX\\\\Disk\\0XXXX\\\\GenDisk\\0GenDisk\\0\"
CompatibleID用
L\"XXXX\\\\Disk\\0XXXX\\\\RAW\\0\";

我就是这样成功的
daor
驱动牛犊
驱动牛犊
  • 注册日期2001-05-16
  • 最后登录2018-04-15
  • 粉丝0
  • 关注0
  • 积分-25分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-03-13 16:30
呵呵我昨天就已经过这一关了,我是改成L\"GenDisk\\\\0312\"以纪念
这个日子,居然就通过了哈哈!
虽然老兄晚re了一步,但稍后我还是会给你放分,以表谢意 :D
  
我现在是碰到该死的page fault,一整天都在重起。而且是我的程序的所有函数全部退出之后,内核跑了一会儿才出现的,不知道对这种情况,老兄有何高明的调试方法?我在汇编下跟踪了好久都抓不住问题所在,现在仅能确定似乎与IRQL有关。
  
另外,是不是只要FDO一收到IRP_MN_QUERY_DEVICE_RELATION(BusRelation)时,都要给它返回PDO的地址?我的FDO好像会收到不止一次。
bag
bag
驱动牛犊
驱动牛犊
  • 注册日期2002-03-19
  • 最后登录2007-10-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-03-13 22:15
我的做法是第一次用IoCreateDevice,以后就返回这个DeviceObject
daor
驱动牛犊
驱动牛犊
  • 注册日期2001-05-16
  • 最后登录2018-04-15
  • 粉丝0
  • 关注0
  • 积分-25分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-03-14 14:19
谢谢
另外,能否提示一下对SRB_FUNCTION_CLAIM_DEVICE我需要做些什么工作?
我在只填充了Srb->DataBuffer = Pdo,然后返回成功。
接着上层就发了一个Device I/o Control,控制码未知,然后就开始一个IRP_MN_QUERY_DEVICE_RELATION后,就发出IRP_MN_REMOVE_DEVICE删除我刚创建的PDO,最后就page fault了。
 :(
bag
bag
驱动牛犊
驱动牛犊
  • 注册日期2002-03-19
  • 最后登录2007-10-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-03-14 15:14
谢谢
另外,能否提示一下对SRB_FUNCTION_CLAIM_DEVICE我需要做些什么工作?
我在只填充了Srb->DataBuffer = Pdo,然后返回成功。
接着上层就发了一个Device I/o Control,控制码未知,然后就开始一个IRP_MN_QUERY_DEVICE_RELATION后,就发出IRP_MN_REMOVE_DEVICE删除我刚创建的PDO,最后就page fault了。
 :(


        Srb->DataBuffer = (PVOID)Pdo;
        Srb->SrbStatus = SRB_STATUS_SUCCESS;
        ntStatus = STATUS_SUCCESS;
        Irp->IoStatus.Status = ntStatus;
        IoCompleteRequest (Irp,IO_NO_INCREMENT);

未知控制码是多少?
daor
驱动牛犊
驱动牛犊
  • 注册日期2001-05-16
  • 最后登录2018-04-15
  • 粉丝0
  • 关注0
  • 积分-25分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-03-14 18:10
非常感谢!
那我估计不是claim的问题了,因为我的代码跟你的几乎一摸一样,
除了变量名字呵呵。
那个控制码是2d1400,在ddk的源码中都查不到。
也可能跟它无关呢?确实ddk中对storage driver没有说过要必须专门处理什么io control

bag
bag
驱动牛犊
驱动牛犊
  • 注册日期2002-03-19
  • 最后登录2007-10-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-03-18 17:05
非常感谢!
那我估计不是claim的问题了,因为我的代码跟你的几乎一摸一样,
除了变量名字呵呵。
那个控制码是2d1400,在ddk的源码中都查不到。
也可能跟它无关呢?确实ddk中对storage driver没有说过要必须专门处理什么io control

 


是否这个IOCTL_STORAGE_RESET_BUS
很奇怪,我没有收到过这个消息
daor
驱动牛犊
驱动牛犊
  • 注册日期2001-05-16
  • 最后登录2018-04-15
  • 粉丝0
  • 关注0
  • 积分-25分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-03-18 17:35
    那么我看应该是前面的irp处理出了问题,导致win2k认为我的设备不正常,所以想灭掉它,但暗杀过程中出了差错,最终同归于尽。
    好几天了,进展停滞,不知道什么时候会轮到老板向我发出IRP_MN_QUERY_REMOVE......

    鉴于bag兄已帮我解决我原先的问题,因此,在此先抛分收盘以表谢意,对于这个新的问题,打算另行发行新股请教,希望bag兄有空的话,能继续指导一下
 :D
bag
bag
驱动牛犊
驱动牛犊
  • 注册日期2002-03-19
  • 最后登录2007-10-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-03-18 17:40
   那么我看应该是前面的irp处理出了问题,导致win2k认为我的设备不正常,所以想灭掉它,但暗杀过程中出了差错,最终同归于尽。
    好几天了,进展停滞,不知道什么时候会轮到老板向我发出IRP_MN_QUERY_REMOVE......

    鉴于bag兄已帮我解决我原先的问题,因此,在此先抛分收盘以表谢意,对于这个新的问题,打算另行发行新股请教,希望bag兄有空的话,能继续指导一下
 :D


指导不敢当,一起切磋吧
EdmundChen
驱动牛犊
驱动牛犊
  • 注册日期2004-05-08
  • 最后登录2009-07-16
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-05-08 17:50
我也遇到同样的问题,但我连IOCreateDevice的各参数应该写什么东西都不知道,楼主是不是该帮一个忙。
游客

返回顶部