color918
驱动牛犊
驱动牛犊
  • 注册日期2003-09-13
  • 最后登录2004-07-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1900回复:2

dazzy请进,关于UsbStorage驱动程序的开发!!

楼主#
更多 发布于:2003-09-23 14:07
以前做了个应用程序对U盘进行低级格式化,还可以发命令从U盘内取出用户进行低格的密码,如果U盘是好的,我可以用hDevice = createFile(\"\\\\.\\F:\"..)得到handle,然后用bResult = DeviceIoControl(hDevice,IOCTL_SCSI_PASS_THROUGH,spt,spt->TotalSize,spt,spt->TotalSize,&returned,FALSE);与U盘通信

现在假如U盘坏掉,插如U盘不能出现盘符,vid和pid都变成了ffff,系统已经不能加载磁盘驱动,不过还能识别它是USB设备,在这种情况下还想和U盘通讯,对其低格,该怎么做呢???

我是这样做的,可是不行,如下:通过Setup API得到这个U盘USB设备的Symbol link后,用CreateFile打开这个句柄,hDevice = CreateFile(\"\\\\?\\usb#vid_ffff&pid_ffff#007#{a5dcbf10-6530-11d2-901f-00c04fb951ed}\",......);然后在createfile打开端口
然后用writefile写数据,可是总提示我参数错误,后来看了你的那篇文章才知道usbstor.sys的IRP_MJ_READ和IRP_MJ_WRITE不做什么处理,主要是通过IRP_MJ_SCSI处理读写操作,于是我想做个上层过滤驱动,当打开U盘这个USB设备时修改IRP为IRP_MJ_SCSI然后在去IoCallDriver(usbstor.sys..);可是还是不行,错误总提示说不支持的网络请求,这是为什么呢???你能帮我分析一下原因或是想个解决的办法么,谢谢你了!!!

dazzy
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-08-12
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望10点
  • 贡献值1点
  • 好评度10点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-09-24 12:07
你的这个问题比较奇怪,vid/pid 变成ffff, usbstor.sys加载了吗?

如果加载了,可以考虑用CreateFile打开它,然后发送IOCTL_SCSI_PASS_THROUGH。

 做过滤驱动,你不能用IoCallDriver(usbstor.sys,..);关于过滤驱动的编写,ddk上有说明。
color918
驱动牛犊
驱动牛犊
  • 注册日期2003-09-13
  • 最后登录2004-07-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-10-17 15:37
我check了一下,vid/pid变成了ffff,usbstor.sys确实已经加载上了,因为可以识别它这个usb设备啊,只是不能识别它是磁盘设备了,所以disk.sys没有加载上,也没出现盘符,正常情况下,应该是我们通过createfile() 然后发IOCTL_SCSI_PASS_THROUGH,这个IRP先经过disk.sys处理,整理成IRP_MJ_SCSI然后在到usbstor.sys去处理,我现在,disk.sys这一级已经有问题了,应用程序想直接通过usbstor.sys去传IRP和下层打交道,不知道怎么做,您明白我的意思了么,请继续指点,另能把2K下,usbstor.sys的其他原码给我参考一下么,万分感谢!!!
游客

返回顶部