unload hang .if regist pre/post write callback routine.

Hi,

I write a minifilter .
It always run with driver verifier enabled. if I have regist write callback
routine the unload will hang. the code here are:

NTSTATUS status;
PFLT_FILE_NAME_INFORMATION FileNameInfo=NULL;
UNICODE_STRING usTmpDirPath;
PCTX_INSTANCE_CONTEXT instanceContext=NULL;
PAGED_CODE();

if(FLT_IS_FASTIO_OPERATION(Data))
{
return FLT_PREOP_DISALLOW_FASTIO;
}
RtlInitUnicodeString(&usTmpDirPath,TMP_PATH_STRING);

status=FltGetInstanceContext(Data->Iopb->TargetInstance,&instanceContext);
if (!NT_SUCCESS(status))
{
goto prewrite_passthr;
}
if (instanceContext->DosName!=TMP_VOL_DOSNAME)
{
goto prewrite_passthr;
}
status=FltGetFileNameInformation(Data,FLT_FILE_NAME_NORMALIZED|FLT_FILE_NAME_QUERY_DEFAULT,&FileNameInfo); if (!NT_SUCCESS(status)) { goto prewrite_passthr; } status=FltParseFileNameInformation(FileNameInfo); if (!NT_SUCCESS(status)) { goto prewrite_passthr; } if(RtlCompareUnicodeString(&FileNameInfo->ParentDir,&usTmpDirPath,TRUE)!=0) { goto prewrite_passthr; }prewrite_callback: if (instanceContext) { FltReleaseContext(&instanceContext); } return FLT_PREOP_SUCCESS_WITH_CALLBACK;prewrite_passthr: if (instanceContext) { FltReleaseContext(&instanceContext); } return FLT_PREOP_SUCCESS_NO_CALLBACK;the post callback routine:FLT_POSTOP_CALLBACK_STATUSFrmPostWriteCallback ( __inout PFLT_CALLBACK_DATA Data, __in PCFLT_RELATED_OBJECTS FltObjects, __in PVOID CompletionContext, __in FLT_POST_OPERATION_FLAGS Flags ){ PFILE_OBJECT FileObject; PFSRTL_COMMON_FCB_HEADER Fcb1; if (Flags&FLTFL_POST_OPERATION_DRAINING) { //minifilter is being detached return FLT_POSTOP_FINISHED_PROCESSING; }/* FileObject=Data->Iopb->TargetFileObject;*/ FileObject=FltObjects->FileObject; Fcb1=(PFSRTL_COMMON_FCB_HEADER)FileObject->FsContext; if (FileObject->CurrentByteOffset.QuadPart==Fcb1->FileSize.QuadPart) { } return FLT_POSTOP_FINISHED_PROCESSING;}Any input will be appreciated!

I’m sorry for forgeting.
A more information is missed that the filter detach from volume successed.

Hi!

One thing that i noticed in your code is that you have not called FltReleaseFileNameInformation for FileNameInfo.

And consider posting the code in a more readable format… :slight_smile:

Regards,

Ayush Gupta

Also, on Vista and beyond, enabling “IO Verification” for your driver in Driver Verifier, enables filter manager verifier for your minifilter. Filter manager verifier tracks the resources (objects, file name info structures, contexts) that your filter uses/references and on unload will point out what resources you may have leaked that are blocking unload of your filter.

Regards,
Sarosh.
File System Filter Lead
Microsoft Corp

This posting is provided “AS IS” with no warranties, and confers no Rights

Thanks all of you .

The issue is resolved.