首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 驱动开发 >

顶层驱动的缓冲区为NULL有关问题

2013-07-01 
顶层驱动的缓冲区为NULL问题虚拟磁盘驱动程序,先创建设备,再设置Flags 为 DO_BUFFERED_IO方式,如下:IoCrea

顶层驱动的缓冲区为NULL问题
虚拟磁盘驱动程序,先创建设备,再设置Flags 为 DO_BUFFERED_IO方式,如下:

IoCreateDevice(DriverObject,0,&deviceName,FILE_DEVICE_DISK,FILE_DEVICE_SECURE_OPEN,FALSE,&pDevObj);
pDevObj->Flags |= DO_BUFFERED_IO;

可是接着收到的irp_mj_read却显示是系统mdl有效,AssociatedIrp.SystemBuffer为NULL,这却是对应的DIRECT_IO 方式,我设置的是buffered_io方式啊,为什么出现错误了?
有网友指出,如果驱动是顶层驱动,还需要进行特殊处理,我这个确实是顶层驱动,那么要如何特殊处理呢?
[解决办法]
原来是这样,但是我还有一个疑问,那就是,在所有的接受到的Irp中间,有2,3个Irp确实是buffer_io方式的,其MDl为NULL,而其余的10几个irp确实都是direct_io方式,均设置了MDL有效。
我的疑问就是,为什么还是有几个irp是buffer io方式呢?按照这个帖子的说法,好像应该所有的irp都是direct io方式啊。

热点排行