From beb81cc389b312d4f57677013e34ae492c85d7b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 26 Oct 2014 19:10:17 +0000 Subject: [PATCH] [NTFS] Prefer long file name when naming objects We now always see the long file name of an object when browsing NTFS partitions. svn path=/trunk/; revision=65027 --- reactos/drivers/filesystems/ntfs/attrib.c | 13 +++++++++++-- reactos/drivers/filesystems/ntfs/dirctl.c | 8 ++++---- reactos/drivers/filesystems/ntfs/fcb.c | 4 ++-- reactos/drivers/filesystems/ntfs/ntfs.h | 2 +- 4 files changed, 18 insertions(+), 9 deletions(-) diff --git a/reactos/drivers/filesystems/ntfs/attrib.c b/reactos/drivers/filesystems/ntfs/attrib.c index aa525475015..9d00a794f6b 100644 --- a/reactos/drivers/filesystems/ntfs/attrib.c +++ b/reactos/drivers/filesystems/ntfs/attrib.c @@ -287,16 +287,25 @@ NtfsDumpFileAttributes(PFILE_RECORD_HEADER FileRecord) } PFILENAME_ATTRIBUTE -GetFileNameFromRecord(PFILE_RECORD_HEADER FileRecord) +GetFileNameFromRecord(PFILE_RECORD_HEADER FileRecord, UCHAR NameType) { PNTFS_ATTR_RECORD Attribute; + PFILENAME_ATTRIBUTE Name; Attribute = (PNTFS_ATTR_RECORD)((ULONG_PTR)FileRecord + FileRecord->AttributeOffset); while (Attribute < (PNTFS_ATTR_RECORD)((ULONG_PTR)FileRecord + FileRecord->BytesInUse) && Attribute->Type != AttributeEnd) { if (Attribute->Type == AttributeFileName) - return (PFILENAME_ATTRIBUTE)((ULONG_PTR)Attribute + Attribute->Resident.ValueOffset); + { + Name = (PFILENAME_ATTRIBUTE)((ULONG_PTR)Attribute + Attribute->Resident.ValueOffset); + if (Name->NameType == NameType || + (Name->NameType == NTFS_FILE_NAME_WIN32_AND_DOS && NameType == NTFS_FILE_NAME_WIN32) || + (Name->NameType == NTFS_FILE_NAME_WIN32_AND_DOS && NameType == NTFS_FILE_NAME_DOS)) + { + return Name; + } + } Attribute = (PNTFS_ATTR_RECORD)((ULONG_PTR)Attribute + Attribute->Length); } diff --git a/reactos/drivers/filesystems/ntfs/dirctl.c b/reactos/drivers/filesystems/ntfs/dirctl.c index a078686edd7..254cc190869 100644 --- a/reactos/drivers/filesystems/ntfs/dirctl.c +++ b/reactos/drivers/filesystems/ntfs/dirctl.c @@ -135,7 +135,7 @@ NtfsGetNameInformation(PDEVICE_EXTENSION DeviceExt, DPRINT("NtfsGetNameInformation() called\n"); - FileName = GetFileNameFromRecord(FileRecord); + FileName = GetFileNameFromRecord(FileRecord, NTFS_FILE_NAME_WIN32); ASSERT(FileName != NULL); Length = FileName->NameLength * sizeof (WCHAR); @@ -163,7 +163,7 @@ NtfsGetDirectoryInformation(PDEVICE_EXTENSION DeviceExt, DPRINT("NtfsGetDirectoryInformation() called\n"); - FileName = GetFileNameFromRecord(FileRecord); + FileName = GetFileNameFromRecord(FileRecord, NTFS_FILE_NAME_WIN32); ASSERT(FileName != NULL); Length = FileName->NameLength * sizeof (WCHAR); @@ -204,7 +204,7 @@ NtfsGetFullDirectoryInformation(PDEVICE_EXTENSION DeviceExt, DPRINT("NtfsGetFullDirectoryInformation() called\n"); - FileName = GetFileNameFromRecord(FileRecord); + FileName = GetFileNameFromRecord(FileRecord, NTFS_FILE_NAME_WIN32); ASSERT(FileName != NULL); Length = FileName->NameLength * sizeof (WCHAR); @@ -246,7 +246,7 @@ NtfsGetBothDirectoryInformation(PDEVICE_EXTENSION DeviceExt, DPRINT("NtfsGetBothDirectoryInformation() called\n"); - FileName = GetFileNameFromRecord(FileRecord); + FileName = GetFileNameFromRecord(FileRecord, NTFS_FILE_NAME_WIN32); ASSERT(FileName != NULL); Length = FileName->NameLength * sizeof (WCHAR); diff --git a/reactos/drivers/filesystems/ntfs/fcb.c b/reactos/drivers/filesystems/ntfs/fcb.c index c6765a5b268..1e71fd4db51 100644 --- a/reactos/drivers/filesystems/ntfs/fcb.c +++ b/reactos/drivers/filesystems/ntfs/fcb.c @@ -289,7 +289,7 @@ NtfsMakeRootFCB(PNTFS_VCB Vcb) return NULL; } - FileName = GetFileNameFromRecord(MftRecord); + FileName = GetFileNameFromRecord(MftRecord, NTFS_FILE_NAME_WIN32); if (!FileName) { ExFreePoolWithTag(MftRecord, TAG_NTFS); @@ -391,7 +391,7 @@ NtfsMakeFCBFromDirEntry(PNTFS_VCB Vcb, DPRINT1("NtfsMakeFCBFromDirEntry(%p, %p, %wZ, %p, %p)\n", Vcb, DirectoryFCB, Name, Record, fileFCB); - FileName = GetFileNameFromRecord(Record); + FileName = GetFileNameFromRecord(Record, NTFS_FILE_NAME_WIN32); if (!FileName) { return STATUS_OBJECT_NAME_NOT_FOUND; // Not sure that's the best here diff --git a/reactos/drivers/filesystems/ntfs/ntfs.h b/reactos/drivers/filesystems/ntfs/ntfs.h index 663cba24a37..d53bdc54e88 100644 --- a/reactos/drivers/filesystems/ntfs/ntfs.h +++ b/reactos/drivers/filesystems/ntfs/ntfs.h @@ -448,7 +448,7 @@ VOID NtfsDumpFileAttributes(PFILE_RECORD_HEADER FileRecord); PFILENAME_ATTRIBUTE -GetFileNameFromRecord(PFILE_RECORD_HEADER FileRecord); +GetFileNameFromRecord(PFILE_RECORD_HEADER FileRecord, UCHAR NameType); /* blockdev.c */