阅读:5510回复:6
irp->AssociatedIrp.SystemBuffer的大小是多少啊
这个BUFFER是什么时候分配的啊,大小是多少啊
|
|
沙发#
发布于:2008-06-21 11:13
楼上的不是吧
|
|
板凳#
发布于:2008-06-22 14:21
我的理解仅供参考:
如果顶层设备指定的是 DO_BUFFER_IO 标志,主功能码为 IRP_MJ_READ或IRP_MJ_WRITE,那么I/O管理器先分配相应大小(如果是读的话应该是需读取的大小,驱动就分配相应的buffer)的用户缓冲,并在内核模式分配和用户buffer相同大小的非分页内存,如果是读则用于存储驱动返回的数据,驱动返回后,由I/O管理器把内核模式拷贝到用户模式buffer,实际数据的大小由irp->iostatus->information指定. 欢迎批评...指正.... 学习中.................. |
|
地板#
发布于:2008-06-23 07:46
我看武安河的书上是先拷贝,再指定information的大小的,就这点不明白
如下,原封不动拷过来的 strncpy((PCHAR)I.IoctlBuffer(),&c[n*2],2); //驱动程序传给应用程序的字节数 I.Information() = 2; |
|
地下室#
发布于:2008-07-01 13:55
这个论坛的人气实在不怎么滴,buffer 的大小是应用程序来分配的并由应用程序传给驱动程序
|
|
5楼#
发布于:2008-11-14 13:50
Irp->AssociatedIrp.SystemBuffer的大小应该是输入缓冲区内容的大小吧~~~
|
|
6楼#
发布于:2008-12-06 16:26
iostack->Parameters.DeviceIoControl.inputbufferlength
或者 iostack->Parameters.DeviceIoControl.outputbufferlength |
|