softworm
驱动牛犊
驱动牛犊
  • 注册日期2005-09-20
  • 最后登录2021-09-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1201回复:0

请教一个USB驱动的问题

楼主#
更多 发布于:2008-03-29 12:19
 因工作需要,要写个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的地方试了好久也搞不定。

请高人指点,先谢谢了。
游客

返回顶部