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!