阅读:2348回复:10
(u盘)总线驱动中的PnP
我编写了一个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的响应出了问题还是别的? |
|
最新喜欢:Edmund... |
沙发#
发布于:2003-03-13 09:45
悄悄告诉你,别跟我老板说:D
HardwareID,DeviceID用 L\"XXXX\\\\Disk\\0XXXX\\\\GenDisk\\0GenDisk\\0\" CompatibleID用 L\"XXXX\\\\Disk\\0XXXX\\\\RAW\\0\"; 我就是这样成功的 |
|
板凳#
发布于:2003-03-13 16:30
呵呵我昨天就已经过这一关了,我是改成L\"GenDisk\\\\0312\"以纪念
这个日子,居然就通过了哈哈! 虽然老兄晚re了一步,但稍后我还是会给你放分,以表谢意 :D 我现在是碰到该死的page fault,一整天都在重起。而且是我的程序的所有函数全部退出之后,内核跑了一会儿才出现的,不知道对这种情况,老兄有何高明的调试方法?我在汇编下跟踪了好久都抓不住问题所在,现在仅能确定似乎与IRQL有关。 另外,是不是只要FDO一收到IRP_MN_QUERY_DEVICE_RELATION(BusRelation)时,都要给它返回PDO的地址?我的FDO好像会收到不止一次。 |
|
地板#
发布于:2003-03-13 22:15
我的做法是第一次用IoCreateDevice,以后就返回这个DeviceObject
|
|
地下室#
发布于: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了。 :( |
|
5楼#
发布于:2003-03-14 15:14
谢谢 Srb->DataBuffer = (PVOID)Pdo; Srb->SrbStatus = SRB_STATUS_SUCCESS; ntStatus = STATUS_SUCCESS; Irp->IoStatus.Status = ntStatus; IoCompleteRequest (Irp,IO_NO_INCREMENT); 未知控制码是多少? |
|
6楼#
发布于:2003-03-14 18:10
非常感谢!
那我估计不是claim的问题了,因为我的代码跟你的几乎一摸一样, 除了变量名字呵呵。 那个控制码是2d1400,在ddk的源码中都查不到。 也可能跟它无关呢?确实ddk中对storage driver没有说过要必须专门处理什么io control |
|
7楼#
发布于:2003-03-18 17:05
非常感谢! 是否这个IOCTL_STORAGE_RESET_BUS 很奇怪,我没有收到过这个消息 |
|
8楼#
发布于:2003-03-18 17:35
那么我看应该是前面的irp处理出了问题,导致win2k认为我的设备不正常,所以想灭掉它,但暗杀过程中出了差错,最终同归于尽。
好几天了,进展停滞,不知道什么时候会轮到老板向我发出IRP_MN_QUERY_REMOVE...... 鉴于bag兄已帮我解决我原先的问题,因此,在此先抛分收盘以表谢意,对于这个新的问题,打算另行发行新股请教,希望bag兄有空的话,能继续指导一下 :D |
|
9楼#
发布于:2003-03-18 17:40
那么我看应该是前面的irp处理出了问题,导致win2k认为我的设备不正常,所以想灭掉它,但暗杀过程中出了差错,最终同归于尽。 指导不敢当,一起切磋吧 |
|
10楼#
发布于:2004-05-08 17:50
我也遇到同样的问题,但我连IOCreateDevice的各参数应该写什么东西都不知道,楼主是不是该帮一个忙。
|
|