qinlicang
驱动牛犊
驱动牛犊
  • 注册日期2004-09-13
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望250点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2925回复:11

开发U盘驱动,2G的正常 4G的不能显示盘符

楼主#
更多 发布于:2010-01-27 17:03
各位老大,我现在在写个U盘驱动,发现2G的U盘能够正常显示操作,但4G的不能显示盘符,并且bulk urb在频繁的发送4096字节,好像死循环一样,但在资源管理器中,看不到该盘盘符,我计算了一下2G是0x40000000字节,但4G是0x100000000字节,是不是我哪个变量由于是int型,4字节,导致访问4G的地址溢出了。但究竟是哪个变量或为什么有这种不支持4G的情况,还是不清楚,请这方面的高手支持一下,万分感谢!
qinlicang
驱动牛犊
驱动牛犊
  • 注册日期2004-09-13
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望250点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2010-01-28 09:39
自己顶一下,我的开发平台是windows xp 使用的ddk是6001.18002, 使用wdm开发。请u盘高手 帮忙看一下,是什么变量溢出了,还是我分析的有问题???
qinlicang
驱动牛犊
驱动牛犊
  • 注册日期2004-09-13
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望250点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2010-01-28 10:59
继续顶啊,那位高手给指点一二,我看到驱动中其实没有用几种类型的irp啊,只有UsbBuildGetDescriptorRequest UsbBuildInterruptOrBulkTransferRequest UsbBuildVendorRequest并且只可能和UsbBuildInterruptOrBulkTransferRequest 有关,但从定义上有没有看到哪个变量要设置为64位的,难道是我分析错了?
xujinf
驱动牛犊
驱动牛犊
  • 注册日期2010-01-26
  • 最后登录2012-03-01
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望61点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2010-01-28 14:02
用bus hound抓一下协议包,看看总线上到底在传什么数据。

windows 文件系统一次数据传输大小最大为64k,磁盘容量是以扇区为单位的,不存在访问地址溢出的问题。

你对比一下2G好4G U盘的扇区大小是否一致,一般U盘扇区大小为512,有些设备则是1k/2k/4k。这是设备识别时候最容易出错的地方

可以使用 read capacity命令查询,具体请参考scsi2协议。
qinlicang
驱动牛犊
驱动牛犊
  • 注册日期2004-09-13
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望250点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2010-01-29 09:16
那usb驱动应该支持不同扇区大小的U盘啊,这个不同扇区大小的设置在驱动的什么地方呢,还是在微软的disk.SYS中呢,在usb驱动中应该没有和SCSI相关的代码啊 ?
jally76
驱动牛犊
驱动牛犊
  • 注册日期2005-04-28
  • 最后登录2010-11-23
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望590点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2010-01-31 23:13
你的驱动是不是Mass Storage标准的驱动吧?
扇区大小的设置应该是在U盘固件里定义的,READ CAPACITY命令可以读出。disk.sys驱动是可以发送这个命令的。
xujinf
驱动牛犊
驱动牛犊
  • 注册日期2010-01-26
  • 最后登录2012-03-01
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望61点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2010-02-04 09:06
在USB mass storage class驱动里当然有SCSI相关的代码了,建议你先看一下mass storage class协议先,做USB驱动开发,这个是必看的
qinlicang
驱动牛犊
驱动牛犊
  • 注册日期2004-09-13
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望250点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2010-02-05 17:00
我写的是usb 驱动,不是class驱动啊,
我这边只能得到一些urb。不会涉及到scsi的解析,这些是在disk.sys上层出来的啊?
求教了,是我理解的不对吗?
jally76
驱动牛犊
驱动牛犊
  • 注册日期2005-04-28
  • 最后登录2010-11-23
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望590点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2010-02-09 13:32
磁盘的大小等信息是在SRB里的SCSI命令及其返回值中体现的。
而且一般是以512字节大小扇区为一个基础单位,每次读写都是整个扇区地操作,所以磁盘大小就是扇区的个数,2G和4G应该是没有分别的。除非其它地方出现了问题。
qinlicang
驱动牛犊
驱动牛犊
  • 注册日期2004-09-13
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望250点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2010-03-04 15:38
这个问题还是过不去啊,查看了一下我U盘的扇区大小4G的扇区是4096 2G的也是,在我的usb驱动中只有urb相关的代码,涉及不到SCSI的协议,我使用irptrace跟踪后发现后面总在几个irp包做死循环,包的大小分别为
 in 13字节,
out 31字节
in 4096字节,不知道这是在做什么?是在读取u盘的容量,好像总在这做死循环。

之后系统就死掉了。

请问牛人,在usb驱动中会有和容量相关的代码吗?怎么我现在的驱动针对任何小于2G的盘都没有问题,一大于2G就失败呢,


郁闷中,求教了!!!!!!!!!!!希望高手给与帮助
jally76
驱动牛犊
驱动牛犊
  • 注册日期2005-04-28
  • 最后登录2010-11-23
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望590点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2010-03-08 10:48
最好是将做死循环的数据包的内容贴上来,这样好分析
13个字节的应该是Mass Storage的CSW包
31个字节的应该是CBW包
它们的内容各是什么,不看它们的内容很难分析问题出在哪里
yufengzungzhe
驱动牛犊
驱动牛犊
  • 注册日期2010-01-23
  • 最后登录2010-05-21
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望51点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2010-05-19 14:53
楼主能不能加我QQ281273905.。   我想向你请教个问题,我也是在开发一个U盘。涉及到驱动问题
游客

返回顶部