阅读:2223回复: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.
|
|