FltAllocateCallbackData & FltPerformSynchronousIo for IRP_MJ_SET_INFORMATION

Due to FltSetInformationFile does not work for my mini filter. I am trying
to use
FltAllocateCallbackData to rename a file. It always returns 0xC0000033
(STATUS_OBJECT_NAME_INVALID).
Could someone tell me what is wrong?

Here is the piece of code:

status = FltAllocateCallbackData( Instance, FileObject, &CallbackData );
if (!NT_SUCCESS(status))
{
return status;
}
CallbackData->Iopb->MajorFunction = IRP_MJ_SET_INFORMATION;
CallbackData->Iopb->MinorFunction = 0;
Params = &CallbackData->Iopb->Parameters;
Params->SetFileInformation.Length = RenameInfoLen;
Params->SetFileInformation.InfoBuffer = RenameInfo;
Params->SetFileInformation.FileInformationClass = FileRenameInformation;
Params->SetFileInformation.ReplaceIfExists = FALSE;
Params->SetFileInformation.ParentOfTarget = DirFileObject;
FltPerformSynchronousIo(CallbackData);
status = CallbackData->IoStatus.Status;
FltFreeCallbackData(CallbackData);

FILE_RENAME_INFORMATION::FileName -> ??\F:\tt\ttt.tt
DirFileObject points to F:\tt\

For the target file name, I tried all kinds of file paths from
\Device\HarddiskVolume… to \tt\ttt.tt or ttt.tt.
The result is same.

Thanks,
Shangwu