xzjfile
禁止发言
禁止发言
  • 注册日期2001-12-14
  • 最后登录2018-07-12
  • 粉丝0
  • 关注0
  • 积分6970分
  • 威望50721点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:4104回复: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-01-13 17:54
别把Paging IO和SL_OPEN_PAGING_FILE搞混了。
SL_OPEN_PAGING_FILE是指Paging File

Paging IO是Read/Write时的
IRP_PAGING_IO IRP_SYNCHRONOUS_PAGING_IO 两个标记

关于第二点,你自己试试可能会更明白,做个应用程序,用CreateFileMapping来读文件,在Filter层跟踪Read/Write,会让你对Filter理解更深。
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-14 19:10
给你点提示:


notepad打开.txt,一般是用page io,使用MDL方式,你只要处理Irp->MdlAddress就可以了。绝对有效,我这边已实现了。
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-01-14 19:13
lists.osr.com上有一个较完整的代码来处理IRP_MJ_READ的代码,对你绝对是有帮助的,我的加解密就是参考里面的。



这个论坛人真少,妈的,不来了。
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-01-14 21:16
lists.osr.com上有一个较完整的代码来处理IRP_MJ_READ的代码,对你绝对是有帮助的,我的加解密就是参考里面的。



这个论坛人真少,妈的,不来了。


呵呵! :D
不过,你sina的信箱也太滥了!经常被退信!俺的最后一封信,你就没有收到吧?
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-01-14 23:37
to rayyang2000:

我的新浪油箱可是付费的任你邮呀!!!!!


可能收到了,谢谢你在这段时间的帮助,再次感谢!!!!
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-01-15 10:21
给你点提示:


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



任何应用程序的文件读写最终都是Paging IO,而且也都只有MDL一种方式。Notepad当然没有例外
xzjfile
禁止发言
禁止发言
  • 注册日期2001-12-14
  • 最后登录2018-07-12
  • 粉丝0
  • 关注0
  • 积分6970分
  • 威望50721点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2003-01-15 16:11
用户被禁言,该主题自动屏蔽!
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-01-15 22:17
coolice:好多程序是不产生pageio的,是用userbuffer,Irp->MdlAddress就是null,.rar就是一例,全是UserBuffer正在头脑中...........
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-01-16 10:11
不是不产生,是产生了你没看见
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-01-16 17:13
我将三种状态全部print出来了,除非还有其它方式!!!
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
11楼#
发布于: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
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-01-30 10:08
老兄,拜托如果没有做过Filter就不要误导!
“我手头上有几个DRIVER就是自己发IRP进行读写的. 绝对不是PAGE IO的.”-> 我们在说加密驱动需要处理的IRP !!!
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2003-01-30 11:32
目前我只处理nocache与sijun的buffer:FO_NO_INTERMEDIATE,还没有发现哪种类型文件不支持,且发现大部分是nocache,也就是pageio,coolice说的也有道理,pageio对于文件,可以说是解决了95%的Encrypt的问题。
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
14楼#
发布于: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
rsman
驱动小牛
驱动小牛
  • 注册日期2003-01-14
  • 最后登录2016-01-22
  • 粉丝0
  • 关注0
  • 积分969分
  • 威望101点
  • 贡献值0点
  • 好评度92点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-02-02 15:41
陆板主,是否可以给我们一些参考资料连接,说明你的观点。我看了vcmfc所提到的nt file system,觉得应该处理NOCAHCE和PAGING_IO两种情况就够了。

[编辑 -  2/2/03 by  rsman]
rsman
Coolice
驱动小牛
驱动小牛
  • 注册日期2002-11-13
  • 最后登录2003-08-22
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2003-02-10 10:46
\"目前大部分的FSD调用FSRTL来处理RW状况\"
作为版主能说出这样的话,真让人哭笑不得哦~
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
17楼#
发布于: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分
18楼#
发布于: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分
19楼#
发布于: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
上一页
游客

返回顶部