zyee
驱动牛犊
驱动牛犊
  • 注册日期2001-11-05
  • 最后登录2013-06-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2137回复:7

还是 win2k file filter driver 问题, notepad 打开的文件内容怎样读取???

楼主#
更多 发布于:2002-03-18 09:17
扑获 IRP_MJ_READ, 读取 UserBuffer 或 MDL 老是 raise exception?? 还有 Cache 进不去,PrivateCacheMap 为 NULL.
请高手指点。

最新喜欢:

flyfoxflyfox
matt
驱动中牛
驱动中牛
  • 注册日期2001-07-24
  • 最后登录2016-02-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-03-18 14:10
扑获 IRP_MJ_READ, 读取 UserBuffer 或 MDL 老是 raise exception??


1,确保dispatch给底层的IRP_MJ_READ返回之后,且不是PENDDING,再访问MDL/UserBuffer
2,对Mdl/UserBuffer的访问最好放在NonCachedIO时来做,因为对于Cached IO,可能导致Page Fault,数据的填充过程是在Page Fault中完成的。

还有 Cache 进不去,PrivateCacheMap 为 NULL.
请高手指点。


\"Cache 进不去\"是什么意思?
System Internals http://sys.xiloo.com
zyee
驱动牛犊
驱动牛犊
  • 注册日期2001-11-05
  • 最后登录2013-06-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-03-18 15:52
thanx, matt.

本是想通过 FileObject->PrivateCacheMap 是否为空来判断数据是否 Cache, 但发现 2k 下 notepad 再次打开文件时,进入到 IRP_MJ_FILE_SYSTEM_CONTROL 而是 IRP_MJ_READ, 从 Cache 中读取数据, 而PrivateCacheMap 始终为 NULL, 不太明白,直接用
CcCopyRead/CcMdlRead 去读数据可行吗?
matt
驱动中牛
驱动中牛
  • 注册日期2001-07-24
  • 最后登录2016-02-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-03-18 16:51
本是想通过 FileObject->PrivateCacheMap 是否为空来判断数据是否 Cache


你这种判断对一些文件系统可能不适用,比如这个FSD可能利用IoCreateStreamFileObject来产生一个替代。
但就你的情况,我想你是在filter VFAT吧。

但发现 2k 下 notepad 再次打开文件时,进入到 IRP_MJ_FILE_SYSTEM_CONTROL 而是 IRP_MJ_READ, 从 Cache 中读取数据, 而PrivateCacheMap 始终为 NULL,不太明白


你这句话,我没看明白。文件读要么在IRP_MJ_READ中完成,要么就是FastIO中。 你说的IRP_MJ_FILE_SYS_CONTROL,具体的Minor Function是什么,我猜可能是FSCTL_IS_VOLUME_MOUNTED。

直接用CcCopyRead/CcMdlRead 去读数据可行吗?


Ccxxx之前一定要对输入的FileObject的PrivateCacheMap初始化(CcInitializeCacheMap)...
System Internals http://sys.xiloo.com
zyee
驱动牛犊
驱动牛犊
  • 注册日期2001-11-05
  • 最后登录2013-06-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-03-18 17:58
当进入到 IRP_MJ_FILE_SYSTEM_CONTROL 时,DeviceIoControl.IoControlCode 为 第一次为 0x900c0,  后面的都是 0x90028, MinorFuction 好象无用, 都为 0.

经跟, FastIORead 里根本没有进去的。第一次打开时, irp_MJ_READ 进入的,后都进入到 IRP_MJ_FILE_SYSTEM_CONTROL 的. 查看 Flag ,好象也根本不是 FILE_OPEN_BY_FILE_ID 的,怪。。

(注: 别的应用几乎都是在 IRP_MJ_READ/FastIO 扑获得,就 notepad 不行)
matt
驱动中牛
驱动中牛
  • 注册日期2001-07-24
  • 最后登录2016-02-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-03-19 10:09
当进入到 IRP_MJ_FILE_SYSTEM_CONTROL 时,DeviceIoControl.IoControlCode 为 第一次为 0x900c0,  后面的都是 0x90028, MinorFuction 好象无用, 都为 0.


你这里跟IRP_MJ_FILE_SYSTEM_CONTROL应该没关系的。
MinorFunction = 0; IRP_MN_USER_FS_REQUEST
90028: FSCTL_IS_VOLUME_MOUNTED
900c0: FSCTL_CREATE_OR_GET_OBJECT_ID,此返回STATUS_INVALID_DEVICE_REQUEST (0xc0000010)吗?

经跟, FastIORead 里根本没有进去的。第一次打开时, irp_MJ_READ 进入的,后都进入到 IRP_MJ_FILE_SYSTEM_CONTROL 的. 查看 Flag ,好象也根本不是 FILE_OPEN_BY_FILE_ID 的,怪。

(注: 别的应用几乎都是在 IRP_MJ_READ/FastIO 扑获得,就 notepad 不行)


我在我的文件系统试了一下,会有两次IRP_MJ_READ。对你的情况,可能是系统对你Filter的FSD直接进行FastIO,而跳过了你的Filter.

对FastIO的机制,我还没常深入研究过,不敢枉谈。你不妨到NTFSD Mailing list中问问。(www.osr.com)
System Internals http://sys.xiloo.com
matt
驱动中牛
驱动中牛
  • 注册日期2001-07-24
  • 最后登录2016-02-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-03-19 10:12

当进入到 IRP_MJ_FILE_SYSTEM_CONTROL 时,DeviceIoControl.IoControlCode 为 第一次为 0x900c0,  后面的都是 0x90028, MinorFuction 好象无用, 都为 0.


你这里跟IRP_MJ_FILE_SYSTEM_CONTROL应该没关系的。
MinorFunction = 0; IRP_MN_USER_FS_REQUEST
90028: FSCTL_IS_VOLUME_MOUNTED
900c0: FSCTL_CREATE_OR_GET_OBJECT_ID,此返回STATUS_INVALID_DEVICE_REQUEST (0xc0000010)吗?

经跟, FastIORead 里根本没有进去的。第一次打开时, irp_MJ_READ 进入的,后都进入到 IRP_MJ_FILE_SYSTEM_CONTROL 的. 查看 Flag ,好象也根本不是 FILE_OPEN_BY_FILE_ID 的,怪。

(注: 别的应用几乎都是在 IRP_MJ_READ/FastIO 扑获得,就 notepad 不行)


我在我的文件系统试了一下,会有两次IRP_MJ_READ。对你的情况,可能是系统对你Filter的FSD直接进行FastIO,而跳过了你的Filter.

对FastIO的机制,我还没常深入研究过,不敢枉谈。你不妨到NTFSD Mailing list中问问。(www.osr.com

System Internals http://sys.xiloo.com
zyee
驱动牛犊
驱动牛犊
  • 注册日期2001-11-05
  • 最后登录2013-06-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-03-19 11:00
环境: win2k pro, hook fsd: FAT 软盘
操作: 利用 notepad 打开 文本文件。
游客

返回顶部