xzjfile
禁止发言
禁止发言
  • 注册日期2001-12-14
  • 最后登录2018-07-12
  • 粉丝0
  • 关注0
  • 积分6970分
  • 威望50721点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:4286回复:24

2000下过滤FSD为什么说只要处理PagingI/O就可以了?Coolice大大帮忙阿...

楼主#
更多 发布于:2003-01-13 17:30
用户被禁言,该主题自动屏蔽!

最新喜欢:

ljmmaryljmmar...
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-02-12 14:01
呵呵,下面是我刚才用FILEMON跟踪这个例子的记录结果
其中IRP_MJ_READ* IRP_MJ_WRITE*两个IRP就是paging io

kfcopy.exe IRP_MJ_CREATE E:\\RYO\\KFC\\1.TXT SUCCESS Attributes: N Options: Open
kfcopy.exe FASTIO_QUERY_STANDARD_INFO E:\\RYO\\KFC\\1.TXT FAILURE
kfcopy.exe IRP_MJ_QUERY_INFORMATION E:\\RYO\\KFC\\1.TXT SUCCESS FileStandardInformation
kfcopy.exe IRP_MJ_CREATE E:\\RYO\\KFC\\2.TXT FILE NOT FOUND Attributes: N Options: Open
kfcopy.exe IRP_MJ_READ* E:\\RYO\\KFC\\1.TXT SUCCESS Offset: 0 Length: 4096
System        IRP_MJ_CLEANUP E:\\RYO\\KFC\\1.TXT SUCCESS
kfcopy.exe IRP_MJ_CREATE E:\\ryo\\kfc\\1.txt SUCCESS Attributes: Any Options: Open
kfcopy.exe IRP_MJ_CREATE E:\\ryo\\kfc\\2.txt SUCCESS Attributes: A Options: OverwriteIf
kfcopy.exe IRP_MJ_QUERY_INFORMATION E:\\ryo\\kfc\\1.txt SUCCESS FileStandardInformation
kfcopy.exe IRP_MJ_SET_INFORMATION E:\\ryo\\kfc\\2.txt SUCCESS FileAllocationInformation
kfcopy.exe IRP_MJ_READ E:\\ryo\\kfc\\1.txt SUCCESS Offset: 0 Length: 3
System        IRP_MJ_CLOSE E:\\RYO\\KFC\\1.TXT SUCCESS
System          IRP_MJ_QUERY_INFORMATION E:\\ryo\\kfc\\1.txt SUCCESS FileNameInformation
kfcopy.exe IRP_MJ_WRITE E:\\ryo\\kfc\\2.txt SUCCESS Offset: 0 Length: 3
System   IRP_MJ_QUERY_INFORMATION E:\\ryo\\kfc\\2.txt SUCCESS FileNameInformation
kfcopy.exe IRP_MJ_CLEANUP E:\\ryo\\kfc\\1.txt SUCCESS
kfcopy.exe IRP_MJ_FLUSH E:\\ryo\\kfc\\2.txt SUCCESS
kfcopy.exe IRP_MJ_WRITE* E:\\ryo\\kfc\\2.txt SUCCESS Offset: 0 Length: 4096
kfcopy.exe IRP_MJ_CLEANUP E:\\ryo\\kfc\\2.txt SUCCESS
System   IRP_MJ_SET_INFORMATION E:\\ryo\\kfc\\2.txt SUCCESS FileEndOfFileInformation
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-02-12 13:57
果然是我疏忽了. RYO的例子是FSD调用CCXXX来让CACHE MGR处理.
SECUDISK.SYS是按照FILE_NO_INTERMEDIATE_BUFFERING的处理的不算
非标志FSD又不算, 那到是没折了.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-02-12 13:28
paging io正常情况都不是应用程序或者非fsd通知cache manager发出的,你的那个例子和应用程序原理上一点区别都没有。

你见过有人在程序或者 driver里读写文件加上IRP_PAGING_IO IRP_SYNCHRONOUS_PAGING_IO标志吗?当然不可能有!那么IRP_PAGING_IP就不用处理吗?当然不!呵呵
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-02-12 13:24
RYO的例子是创建自己的IRP,本身既然不是FSD,发出的IRP_MJ_READ/IRP_MJ_WRITE到了FSD,会由FSD通知Cache Manager发出paging io,你有没有试过啊?

如果你说的SECUDISK.SYS不是FSD的话,也一样。
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-02-12 13:10
SECUDISK.SYS不是FSD. 而是使用NTFS/VFAT的一个DRIVER而已. 使用方法就如我所描述.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-02-12 13:06
OSR中有个自己组合IRP的例子RYO.ZIP想必COOLICE也看过. 里面是使用的RW操作也并不设定IRP_PAGING_IO IRP_SYNCHRONOUS_PAGING_IO的FLAG.
static VOID KfcWrite(PFILE_OBJECT FileObject,
                     PLARGE_INTEGER Offset,
                     ULONG Length,
                     PMDL Mdl,
                     PIO_STATUS_BLOCK IoStatusBlock)
{
    ...    
    //
    // Set up the event we\'ll use.
    //
    ...
    //
    // Allocate and build the IRP we\'ll be sending to the FSD.
    //
    ...
    //
    // Indicate that this is a WRITE operation.
    //

    irp->Flags = IRP_WRITE_OPERATION;
    
    
    //
    // Set up the next I/O stack location.  These are the parameters
    // that will be passed to the underlying driver.
    //
    ...

    //
    // We use a completion routine to keep the I/O Manager from doing
    // \"cleanup\" on our IRP - like freeing our MDL.
    //
    
    
    //
    // Send it on.  Ignore the return code.
    //
    ...
    //
    // Wait for the I/O to complete.
    //
    ...
    
    //
    // Done.  Return results are in the io status block.
    //
    
    return;

}
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-02-12 13:01
NOCACHE的情况当然要处理,paging io是基于cached irp而提出的,两种没有任何矛盾。

对于非标准的FSD来说,除了这种FSD自己的应用程序,Windows永远不会DIRECT SEND IRP TO FSD,所有的文件读写还是通过标准的IRP进行。如果这种FSD不支持标准的IRP,根本不在加密Filter考虑之列!
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-02-12 12:49
这个DRIVER的文件控制部分全部是DIRECT SEND IRP TO FSD. 与其搭配的USER MODE部分没有ATTACH进来.
我可以给你们讲述一下
1. ATTACH SYSTEM PROCESS. 打开文件, 参数为FILE_NON_DIRECTORY_FILE|FILE_SYNCHRONOUS_IO_NONALERT|FILE_NO_INTERMEDIATE_BUFFERING;
2. 获取FILE_OBJ
3. 任意的进程会访问打开的文件.
4. 自行组合IRP.
RW部分Irp->Flags = IRP_WRITE_OPERATION|IRP_NOCACHE;
没有IRP_PAGING_IO IRP_SYNCHRONOUS_PAGING_IO的FLAG!!!
另外,每次对文件操作时, 都会获取文件操作时刻TOP LEVEL的FILE SYSTEM DEVICE OBJECT. 这样, 任意的FILTER均会有机会执行. 这是一个产品中的DRIVER. 务必不要傻眼. 经验这个东西, 可不是说有就有的.

[编辑 -  2/12/03 by  lu0]
附件名称/大小 下载次数 最后更新
2003-02-12_SecuDisk.sys (21KB)  21
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-02-10 10:46
\"目前大部分的FSD调用FSRTL来处理RW状况\"
作为版主能说出这样的话,真让人哭笑不得哦~
rsman
驱动小牛
驱动小牛
  • 注册日期2003-01-14
  • 最后登录2016-01-22
  • 粉丝0
  • 关注0
  • 积分969分
  • 威望101点
  • 贡献值0点
  • 好评度92点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-02-02 15:41
陆板主,是否可以给我们一些参考资料连接,说明你的观点。我看了vcmfc所提到的nt file system,觉得应该处理NOCAHCE和PAGING_IO两种情况就够了。

[编辑 -  2/2/03 by  rsman]
rsman
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-02-01 23:42
Coolice: 如果一定要坚持假定存在
IRP_PAGING_IO IRP_SYNCHRONOUS_PAGING_IO 我并没有意见. 但是只能说明你见到的状况还不够多. 开发了几个FILTER就以为遇到了所有的状况. :)
目前大部分的FSD调用FSRTL来处理RW状况. 这样,CACHE MANAGER就会产生你所需要的条件. 但是并不是绝对如此. 我并不打算提供更详细的状况. 如果你一生都没有遇到其他状况, 算你运气. :D
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-01-30 11:32
目前我只处理nocache与sijun的buffer:FO_NO_INTERMEDIATE,还没有发现哪种类型文件不支持,且发现大部分是nocache,也就是pageio,coolice说的也有道理,pageio对于文件,可以说是解决了95%的Encrypt的问题。
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-01-30 10:08
老兄,拜托如果没有做过Filter就不要误导!
“我手头上有几个DRIVER就是自己发IRP进行读写的. 绝对不是PAGE IO的.”-> 我们在说加密驱动需要处理的IRP !!!
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-01-29 17:53
只假定只要PAGE IO绝对是错误的. 从来没有FSD规范说一定只用PAGE IO的. 一般情况下, FSD本身读数据请求的量一定是512的倍数倒是正确的.
我手头上有几个DRIVER就是自己发IRP进行读写的. 绝对不是PAGE IO的.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-01-16 17:13
我将三种状态全部print出来了,除非还有其它方式!!!
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-01-16 10:11
不是不产生,是产生了你没看见
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2003-01-15 22:17
coolice:好多程序是不产生pageio的,是用userbuffer,Irp->MdlAddress就是null,.rar就是一例,全是UserBuffer正在头脑中...........
xzjfile
禁止发言
禁止发言
  • 注册日期2001-12-14
  • 最后登录2018-07-12
  • 粉丝0
  • 关注0
  • 积分6970分
  • 威望50721点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
  • 社区居民
18楼#
发布于:2003-01-15 16:11
用户被禁言,该主题自动屏蔽!
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2003-01-15 10:21
给你点提示:


notepad打开.txt,一般是用page io,使用MDL方式,你只要处理Irp->MdlAddress就可以了。绝对有效,我这边已实现了。



任何应用程序的文件读写最终都是Paging IO,而且也都只有MDL一种方式。Notepad当然没有例外
上一页
游客

返回顶部