阅读:1201回复:0
请教一个USB驱动的问题
因工作需要,要写个U盘管理工具。现在还没有用过滤驱动,先做个验证程序,直接
钩住usbstor.sys。下面是部分记录数据: ... 0000013 6.10442734 (FDO!)IRP_MJ_PNP : IRP_MN_QUERY_CAPABILITIES 00000014 6.10454082 (FDO!)IRP_MJ_PNP : IRP_MN_QUERY_PNP_DEVICE_STATE 00000015 6.10457468 (FDO!)IRP_MJ_PNP : IRP_MN_QUERY_DEVICE_RELATIONS 00000016 6.10460329 (PDO!)IRP_MJ_PNP : IRP_MN_QUERY_ID 00000017 6.10461950 BusQueryDeviceID 00000018 6.10463810 USBSTOR\Disk&Ven_BenQ&Prod_U-Disk&Rev_1.00 00000019 6.10466146 (PDO!)IRP_MJ_PNP : IRP_MN_QUERY_CAPABILITIES 00000020 6.10468578 (PDO!)IRP_MJ_PNP : IRP_MN_QUERY_DEVICE_TEXT 00000021 6.10471344 (PDO!)IRP_MJ_PNP : IRP_MN_QUERY_DEVICE_TEXT 00000022 6.10473442 (PDO!)IRP_MJ_PNP : IRP_MN_QUERY_ID 00000023 6.10474730 BusQueryInstanceID 00000024 6.10476303 13CF885FE5A22&0 00000025 6.10511780 (PDO!)IRP_MJ_PNP : IRP_MN_QUERY_ID 00000026 6.10513449 BusQueryHardwareIDs 00000027 6.10516787 USBSTOR\DiskBenQ____U-Disk__________1.00 00000028 6.10519218 (PDO!)IRP_MJ_PNP : IRP_MN_QUERY_ID 00000029 6.10520840 BusQueryCompatibleIDs 00000030 6.10522223 USBSTOR\Disk .... 00000038 6.10713005 (PDO!)IRP_MJ_PNP : IRP_MN_START_DEVICE ... 到这里usbstor自己取出了U盘的id(这东西能作为唯一的标识用吗?)。判定id是否允许(还没写), 然后对IRP_MN_START_DEVICE的响应直接返回失败。 if (irpStack->MinorFunction == IRP_MN_START_DEVICE) { Irp->IoStatus.Status = STATUS_UNSUCCESSFUL; IoCompleteRequest(Irp, IO_NO_INCREMENT); return STATUS_UNSUCCESSFUL; } 随后收到: 00000040 6.10814428 (PDO!)IRP_MJ_PNP : IRP_MN_REMOVE_DEVICE 问题是,这样做U盘的逻辑驱动器是没加载起来,但在托盘中还是出现了,需要手动删除。要怎样做 才能使其完全卸载? 在响应IRP_MN_REMOVE_DEVICE的地方试了好久也搞不定。 请高人指点,先谢谢了。 |
|