Hi
I tried to register a name provider in passThrough example as following, it failed to register the filer in windows 2008 with error INVALID PARMETER(c000000d), But it succeeded in windows 2003, Anyone can point out what wrong of the code?
if i remove the name call back, it is fine.
NTSTATUS
GenerateFileNameCallback(
__in PFLT_INSTANCE Instance,
__in PFILE_OBJECT FileObject,
__in_opt PFLT_CALLBACK_DATA CallbackData,
__in FLT_FILE_NAME_OPTIONS NameOptions,
__out PBOOLEAN CacheFileNameInformation,
__out PFLT_NAME_CONTROL FileName
)
{
NTSTATUS ntStatus = STATUS_SUCCESS;
PFLT_FILE_NAME_INFORMATION FileNameInformation = NULL;
if (CallbackData)
{
ntStatus = FltGetFileNameInformation(CallbackData, NameOptions, &FileNameInformation);
}
else
{
ntStatus = FltGetFileNameInformationUnsafe(FileObject, Instance, NameOptions, &FileNameInformation);
}
if (!NT_SUCCESS(ntStatus))
{
DbgPrint(“GenerateFileNameCallback failed to get file name:%wZ,status:%0x”,&FileObject->FileName,ntStatus);
return ntStatus;
}
*CacheFileNameInformation = TRUE;
ntStatus = FltCheckAndGrowNameControl(FileName, FileNameInformation->Name.Length);
if (!NT_SUCCESS(ntStatus))
{
DbgPrint(“FltCheckAndGrowNameControl:%wZ failed,status:%0x”,&FileObject->FileName,ntStatus);
return ntStatus;
}
RtlCopyUnicodeString(&FileName->Name, &FileNameInformation->Name);
FltReleaseFileNameInformation(FileNameInformation);
return ntStatus;
}
//
// This defines what we want to filter with FltMgr
//
CONST FLT_REGISTRATION FilterRegistration = {
sizeof( FLT_REGISTRATION ), // Size
FLT_REGISTRATION_VERSION, // Version
0, // Flags
NULL, // Context
Callbacks, // Operation callbacks
PtUnload, // MiniFilterUnload
PtInstanceSetup, // InstanceSetup
PtInstanceQueryTeardown, // InstanceQueryTeardown
PtInstanceTeardownStart, // InstanceTeardownStart
PtInstanceTeardownComplete, // InstanceTeardownComplete
GenerateFileNameCallback, // GenerateFileName
NULL, // GenerateDestinationFileName
NULL // NormalizeNameComponent
};
Thanks
BEN