When using the following codes to create/open a file, status will be STATUS_OBJECT_PATH_SYNTAX_BAD after calling FltCreateFile, please give me some hint, thank you very much.
RtlInitUnicodeString(&sFileDosFullPath, L"\\??\\D:\1.doc");
// init object attribute
InitializeObjectAttributes(&ob, &sFileDosFullPath, OBJ_KERNEL_HANDLE|OBJ_CASE_INSENSITIVE, NULL,NULL) ;
// create/open file
uCreateDisposition = Cbd->Iopb->Parameters.Create.Options>>24 ;
uCreateOptions = Cbd->Iopb->Parameters.Create.Options & 0x00ffffff ;
uShareAccess = Cbd->Iopb->Parameters.Create.ShareAccess ;
uFileAttributes = Cbd->Iopb->Parameters.Create.FileAttributes ;
status = FltCreateFile(FltObjects->Filter,
FltObjects->Instance,
&hFile,
uDesiredAccess,
&ob,
&IoStatus,
NULL,
uFileAttributes,
uShareAccess,
uCreateDisposition,
uCreateOptions,
NULL,
0,
IO_IGNORE_SHARE_ACCESS_CHECK
) ;
if (!NT_SUCCESS(status))
{
FltStatus = FLT_PREOP_COMPLETE ;
__leave ;
}
RtlInitUnicodeString(&sFileDosFullPath, L"\\??\\D:\1.doc");
// init object attribute
InitializeObjectAttributes(&ob, &sFileDosFullPath, OBJ_KERNEL_HANDLE|OBJ_CASE_INSENSITIVE, NULL,NULL) ;
// create/open file
uCreateDisposition = Cbd->Iopb->Parameters.Create.Options>>24 ;
uCreateOptions = Cbd->Iopb->Parameters.Create.Options & 0x00ffffff ;
uShareAccess = Cbd->Iopb->Parameters.Create.ShareAccess ;
uFileAttributes = Cbd->Iopb->Parameters.Create.FileAttributes ;
status = FltCreateFile(FltObjects->Filter,
FltObjects->Instance,
&hFile,
uDesiredAccess,
&ob,
&IoStatus,
NULL,
uFileAttributes,
uShareAccess,
uCreateDisposition,
uCreateOptions,
NULL,
0,
IO_IGNORE_SHARE_ACCESS_CHECK
) ;
if (!NT_SUCCESS(status))
{
FltStatus = FLT_PREOP_COMPLETE ;
__leave ;
}