tycoon
驱动牛犊
驱动牛犊
  • 注册日期2007-07-25
  • 最后登录2008-02-26
  • 粉丝0
  • 关注0
  • 积分330分
  • 威望34点
  • 贡献值0点
  • 好评度33点
  • 原创分0分
  • 专家分0分
阅读:1381回复:6

请教,过滤驱动中覆盖的问题如何处理??

楼主#
更多 发布于:2007-08-10 09:29
请教,过滤驱动中覆盖的问题如何处理??
wisebo
驱动小牛
驱动小牛
  • 注册日期2006-04-13
  • 最后登录2012-07-18
  • 粉丝0
  • 关注1
  • 积分825分
  • 威望218点
  • 贡献值0点
  • 好评度80点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-08-12 19:56
IRP标志
I love niu
hhyDriver
驱动小牛
驱动小牛
  • 注册日期2007-06-06
  • 最后登录2009-01-19
  • 粉丝0
  • 关注0
  • 积分154分
  • 威望150点
  • 贡献值0点
  • 好评度146点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-08-13 16:15
引用第1楼wisebo于2007-08-12 19:56发表的  :
IRP标志


能否讲得具体点.
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
地板#
发布于:2007-08-14 08:47
FILE_OVERWRITE_IF,是这个标志吗?斑竹牛人们都进来指点一下。
在孤独和无助中缓慢前行...
wisebo
驱动小牛
驱动小牛
  • 注册日期2006-04-13
  • 最后登录2012-07-18
  • 粉丝0
  • 关注1
  • 积分825分
  • 威望218点
  • 贡献值0点
  • 好评度80点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-08-14 10:22
FILE_OPEN_IF
I love niu
ceabie
驱动牛犊
驱动牛犊
  • 注册日期2006-08-23
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分599分
  • 威望140点
  • 贡献值0点
  • 好评度59点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2007-08-14 10:26
多着了,Irp_Create 和 Irp_setinformation 都有替换的问题
a. Irp_create:
    这个要在Irp完成后处理,但要在开始时先保存一些数据,不然Irp完成后,Irp的部分参数会被修改.
    
    // 要保存的:
    ULONG      disposition = (IrpSp->Parameters.Create.Options>> 24) & 0xFF;

    // Irp完成后:
    ULONG_PTR  Information = Irp->IoStatus.Information;
    BOOLEAN    Replaced;
      
    switch( disposition ) {

        case FILE_SUPERSEDE:

            Replaced = Information == FILE_SUPERSEDED;

            break;
        case FILE_OVERWRITE_IF:
        case FILE_OVERWRITE:

            if( Information == FILE_OVERWRITTEN ) Replaced = TRUE;

            break;        

        }

b. Irp_set_information
   这里主要是rename的操作,要在Irp向下传递之前处理:

PFILE_RENAME_INFORMATION      RenameInfo = Irp->AssociatedIrp.SystemBuffer;

if( IrpSp->Parameters.SetFile.FileInformationClass == FileRenameInformation ) {
  
     if( RenameInfo->ReplaceIfExists ) {
            
       Replaced = QueryFileExists( IrpSp->FileObject );

     }
}

// QueryFileExists()要你自己去写了,主要方法是向下查询IrpSp->FileObject(目标文件)是否存在,方法很多,我用的ZwCreateFile,看看返回的ioStatus.Information 等不等 FILE_OPENED

我暂时也只知道这些,其他的自己发现吧.
XeChini
hhyDriver
驱动小牛
驱动小牛
  • 注册日期2007-06-06
  • 最后登录2009-01-19
  • 粉丝0
  • 关注0
  • 积分154分
  • 威望150点
  • 贡献值0点
  • 好评度146点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-08-14 11:37
按照5楼的方法试了一下:当是replace时,在write方法中进行写。结果是文件中是密文(正确),而缓存中也是密文(错误)。
游客

返回顶部