hyy301
驱动牛犊
驱动牛犊
  • 注册日期2006-10-08
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望19点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:5510回复:6

irp->AssociatedIrp.SystemBuffer的大小是多少啊

楼主#
更多 发布于:2008-06-20 07:57
这个BUFFER是什么时候分配的啊,大小是多少啊
hyy301
驱动牛犊
驱动牛犊
  • 注册日期2006-10-08
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望19点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2008-06-21 11:13
楼上的不是吧
petsatan
驱动牛犊
驱动牛犊
  • 注册日期2007-09-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望133点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-06-22 14:21
我的理解仅供参考:
   如果顶层设备指定的是 DO_BUFFER_IO 标志,主功能码为 IRP_MJ_READ或IRP_MJ_WRITE,那么I/O管理器先分配相应大小(如果是读的话应该是需读取的大小,驱动就分配相应的buffer)的用户缓冲,并在内核模式分配和用户buffer相同大小的非分页内存,如果是读则用于存储驱动返回的数据,驱动返回后,由I/O管理器把内核模式拷贝到用户模式buffer,实际数据的大小由irp->iostatus->information指定.

欢迎批评...指正....
学习中..................
hyy301
驱动牛犊
驱动牛犊
  • 注册日期2006-10-08
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望19点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-06-23 07:46
我看武安河的书上是先拷贝,再指定information的大小的,就这点不明白
如下,原封不动拷过来的
strncpy((PCHAR)I.IoctlBuffer(),&c[n*2],2);
//驱动程序传给应用程序的字节数
I.Information() = 2;
hyy301
驱动牛犊
驱动牛犊
  • 注册日期2006-10-08
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分8分
  • 威望19点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-07-01 13:55
这个论坛的人气实在不怎么滴,buffer 的大小是应用程序来分配的并由应用程序传给驱动程序
sqpcd
驱动牛犊
驱动牛犊
  • 注册日期2008-10-24
  • 最后登录2010-05-12
  • 粉丝0
  • 关注0
  • 积分24分
  • 威望171点
  • 贡献值1点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2008-11-14 13:50
Irp->AssociatedIrp.SystemBuffer的大小应该是输入缓冲区内容的大小吧~~~
bruclan
驱动牛犊
驱动牛犊
  • 注册日期2007-10-23
  • 最后登录2009-07-14
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望26点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2008-12-06 16:26
iostack->Parameters.DeviceIoControl.inputbufferlength
或者
iostack->Parameters.DeviceIoControl.outputbufferlength
游客

返回顶部