sinking
驱动牛犊
驱动牛犊
  • 注册日期2003-08-18
  • 最后登录2006-02-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1491回复:5

请教一个IoBuildDeviceIoControlRequest的菜鸟问题

楼主#
更多 发布于:2004-02-13 11:18
用IoBuildDeviceIoControlRequest()参见IRP_MJ_DEVICE_CONTROL, 如果参数InputBuffer和OutputBuffet均不为空,那么在底层驱动中如何得到这两个buffer,好像只传入一个Irp->AssociatedIrp.SystemBuffer,它到底是InputBuffer还是OutputBuffer啊,地址和InputBuffer、OutputBuffet都不一样啊。请大侠指教!
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
沙发#
发布于:2004-02-14 20:53
是这样的,我用
pIrp = IoBuildDeviceIoControlRequest(IOCTL_BULKUSB_READ,  
                                     DeviceObject,
                                     NULL, 0,
                                     rwbuf, *len,
                                     false, &kevent,
                                     &IoStatus);
创建IRP,在下层驱动中,Irp->AssociatedIrp.SystemBuffer也得到了正确的值,我用IoCompleteRequest()返回后。发现rwbuf并未填入值,为什么,我如何将Irp->AssociatedIrp.SystemBuffer得到的值返回。


将你的参数:
*len,
改成:
&len,
(len是rwbuf的长度)
再试试
 
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
sinking
驱动牛犊
驱动牛犊
  • 注册日期2003-08-18
  • 最后登录2006-02-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-02-13 16:15
刚刚说错了,不是把InputBuffer中的内容拷贝到OutputBuffer,但也没有拷贝Irp->AssociatedIrp.SystemBuffer中的内容。我的IOCTL用的是METHOD_BUFFERED, 急啊,哪位能指点一下!
sinking
驱动牛犊
驱动牛犊
  • 注册日期2003-08-18
  • 最后登录2006-02-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-02-13 15:23
另外,我如果把InputBuffer和OutputBuffer都填入,那么该IRP完成后,仅会将InputBuffer中的内容拷贝到OutputBuffer,而不是拷贝出Irp->AssociatedIrp.SystemBuffer中的内容,为什么? :(
sinking
驱动牛犊
驱动牛犊
  • 注册日期2003-08-18
  • 最后登录2006-02-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-02-13 14:25
是这样的,我用
pIrp = IoBuildDeviceIoControlRequest(IOCTL_BULKUSB_READ,  
                                     DeviceObject,
                                     NULL, 0,
                                     rwbuf, *len,
                                     false, &kevent,
                                     &IoStatus);
创建IRP,在下层驱动中,Irp->AssociatedIrp.SystemBuffer也得到了正确的值,我用IoCompleteRequest()返回后。发现rwbuf并未填入值,为什么,我如何将Irp->AssociatedIrp.SystemBuffer得到的值返回。
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-02-13 11:29
是的,IN、Out都是它
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部