阅读:1381回复:6
请教,过滤驱动中覆盖的问题如何处理??
请教,过滤驱动中覆盖的问题如何处理??
|
|
沙发#
发布于:2007-08-12 19:56
IRP标志
|
|
|
板凳#
发布于:2007-08-13 16:15
引用第1楼wisebo于2007-08-12 19:56发表的 : 能否讲得具体点. |
|
地板#
发布于:2007-08-14 08:47
FILE_OVERWRITE_IF,是这个标志吗?斑竹牛人们都进来指点一下。
|
|
|
地下室#
发布于:2007-08-14 10:22
FILE_OPEN_IF
|
|
|
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 我暂时也只知道这些,其他的自己发现吧. |
|
|
6楼#
发布于:2007-08-14 11:37
按照5楼的方法试了一下:当是replace时,在write方法中进行写。结果是文件中是密文(正确),而缓存中也是密文(错误)。
|
|