ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
阅读:3821回复:13

UsbBuildInterruptOrBulkTransferRequest()中的参数bufferlength,我该在哪里进行设置?

楼主#
更多 发布于:2007-05-09 16:46
  UsbBuildInterruptOrBulkTransferRequest()中的参数bufferlength,为进行数据传输的长度,但是没找到在哪里进行设置,我强行将它设置为0x200,但是当调用后,出现STATUS_ACCESS_VIOLATION,哪位老大知道,指点一下
ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-05-10 19:39
怎么没人回答我啊,自己顶一下
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-05-11 13:19
这个是应用程序传过来的啊。。
ULONG                      bufferLength =
                              irpStack->Parameters.DeviceIoControl.OutputBufferLength;
第一次听说这玩意能强制指定的。。
ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-05-12 17:08
谢谢了,那我看看我的应用程序吧
应用层用directshow做的,无法看到他每次设置数据包的大小,先谢谢了,我再查查
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-05-14 09:40
这个是应用程序里读写数据的函数的DeviceIoControl里的OutputBufferLength项决定的
查查MSDN吧
ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-05-14 10:55
楼上的老大,谢谢你的回答,还有问题
我现在做的是camera驱动,上面有个stream.sys调用我的驱动,可能是在那里有deviceiocontrol吧,
应用程序我用的directshow写的,里面都是封装的,没看到deviceiocontrol,
我写的驱动部分就是用testcap+usbd,我看到论坛里有很多人做过的
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-05-15 09:38
用下面这个试试
ULONG               bufferLength =
                    irpStack->Parameters.DeviceIoControl.OutputBufferLength;
wjt810907
驱动中牛
驱动中牛
  • 注册日期2004-08-18
  • 最后登录2011-04-16
  • 粉丝0
  • 关注0
  • 积分86分
  • 威望409点
  • 贡献值1点
  • 好评度402点
  • 原创分2分
  • 专家分0分
7楼#
发布于:2007-05-16 09:22
不错,jinghuiren很棒
mcu_boy
gutian98
禁止发言
禁止发言
  • 注册日期2003-01-12
  • 最后登录2016-12-11
  • 粉丝4
  • 关注2
  • 积分760分
  • 威望8026点
  • 贡献值1点
  • 好评度364点
  • 原创分0分
  • 专家分21分
  • 金点子奖
  • 社区居民
8楼#
发布于:2007-05-16 10:05
用户被禁言,该主题自动屏蔽!
ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-05-16 11:50
Re:gutian98
那按照你说的,bulk请求的bufferlength=分辨率了,那他向usbd发送的请求数据包是不是太大了,usb一次也不能传输那么多数据阿;
前段时间看usbintel上面好像对rawframe进行处理,里面好像也判断一祯数据是否接收完毕。
应该也是分成很多包,按序接收吧。
我现在用testcap加上usbd作为我的camera的驱动,我跟踪数据,每包的长度为0x70,但是不知道是从哪里获取的。
我用的是bulk传输的方式,不是同步。
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-05-16 16:39
应该是驱动自己读取数据后自己分析的吧,不可能一次只读0x70
ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-05-16 17:07
Re:jinghuiren
老大,你不是说是应用软件中deviceiocontrol中的参数进行设置长度吗?
bufferLength =
                    irpStack->Parameters.DeviceIoControl.OutputBufferLength;
就是这个bufferLength=0x70,不知道从哪里出来的值?我的问题就是这个值怎么能弄大点?
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-05-17 09:24
只要发送deviceiocontrol命令,outputbufflength就是上述获得方法
问题时现在这个值令人疑惑,如果能有应用程序的源代码就能清楚是怎么一回事了
难道在中间层还有一层驱动吗?
ke077
驱动牛犊
驱动牛犊
  • 注册日期2007-03-14
  • 最后登录2010-10-28
  • 粉丝1
  • 关注0
  • 积分362分
  • 威望134点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-05-17 11:31
re:jinghuiren
directshow-----stream.sys-----ke077.sys -------下位机
大体就是这样,怀疑可能是在stream.sys有一部分或者干脆就被directshow给封装了~~
游客

返回顶部