阅读:1900回复:2
dazzy请进,关于UsbStorage驱动程序的开发!!
以前做了个应用程序对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..);可是还是不行,错误总提示说不支持的网络请求,这是为什么呢???你能帮我分析一下原因或是想个解决的办法么,谢谢你了!!! |
|
沙发#
发布于:2003-09-24 12:07
你的这个问题比较奇怪,vid/pid 变成ffff, usbstor.sys加载了吗?
如果加载了,可以考虑用CreateFile打开它,然后发送IOCTL_SCSI_PASS_THROUGH。 做过滤驱动,你不能用IoCallDriver(usbstor.sys,..);关于过滤驱动的编写,ddk上有说明。 |
|
板凳#
发布于: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的其他原码给我参考一下么,万分感谢!!!
|
|