|
阅读:2361回复:6
文件引用计数,判断文件关闭的疑问
我的代码是用的DDK中MINIFILTER CTX框架中修改的,我想判断一个文件正真被关闭,但是不知道如何判断,找了很多文章,还是不得其解,希望大虾们给予指点
以下是我的部分代码: FLT_POSTOP_CALLBACK_STATUS
CryptPostCreate (
__inout PFLT_CALLBACK_DATA Cbd,
__in PCFLT_RELATED_OBJECTS FltObjects,
__inout_opt PVOID CbdContext,
__in FLT_POST_OPERATION_FLAGS Flags
)
{
...........
.....
//新建CONTEXT
status = CtxFindOrCreateStreamContext(Cbd,
TRUE,
&streamContext,
&streamContextCreated);
.......
//
// 增加文件引用计数
//
if (streamContextCreated)
streamContext->Refcount = 1;
else
streamContext->Refcount ++;
........
....
}
FLT_PREOP_CALLBACK_STATUS
CryptPreClose (
__inout PFLT_CALLBACK_DATA Cbd,
__in PCFLT_RELATED_OBJECTS FltObjects,
__deref_out_opt PVOID *CompletionContext
)
{
.......
....
//
// Get the stream context
//
status = CtxFindOrCreateStreamContext(Cbd,
FALSE, // do not create if one does not exist
&streamContext,
&streamContextCreated);
...............
.........
//减少引用
if (streamContext->Refcount > 0)
{
streamContext->Refcount --;
}
//引用减到零时删除context
if (0 == streamContext->Refcount)
{
//删除Streamcontext
FltDeleteContext(streamContext);
}
.....................
} 怎样在CryptPreClose 回调中判断一个文件真正被关闭呢?3x |
|
|
沙发#
发布于:2009-08-21 15:26
IRP_MJ_CLOSE 完成例程返回后可以追尾,不过我测试我的过不了nod32 3.0。
还有IRP_MJ_CLEANUP里面可以追尾…… |
|
|
板凳#
发布于:2009-08-21 15:31
我调试发现,操作一个文件系统会发给你多个IRP_MJ_CLEANUP如何判断是哪一次需要加尾呢..?
|
|
|
地板#
发布于:2009-08-21 16:06
通常的做法好像是在文件create的时候计数,cleanup到计数清零的时候加尾
|
|
|
地下室#
发布于:2009-08-21 16:28
|
|
|
5楼#
发布于:2009-08-28 11:46
|
|
|
6楼#
发布于:2009-08-28 17:15
记得好象StreamFileObject也可能产生cleanup.
|
|
