From 78c1aeecb9857f02f688d26fd6a4c1495a537230 Mon Sep 17 00:00:00 2001 From: Colin Finck Date: Tue, 22 Aug 2017 09:09:19 +0000 Subject: [PATCH] [FS_REC] Always register CDFS as a low-priority filesystem. This inserts it at the tail of the filesystem queue instead of the head, meaning UDF always takes precedence and UDF/CDFS hybrid media is properly detected as UDF. Thanks to Pierre for the hint! Should fix what's reported in https://jira.reactos.org/browse/CORE-9816?focusedCommentId=78820&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-78820 svn path=/trunk/; revision=75638 --- reactos/drivers/filesystems/fs_rec/fs_rec.c | 36 ++++++++++++++------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/reactos/drivers/filesystems/fs_rec/fs_rec.c b/reactos/drivers/filesystems/fs_rec/fs_rec.c index f279adff3f2..185d37cd4d0 100644 --- a/reactos/drivers/filesystems/fs_rec/fs_rec.c +++ b/reactos/drivers/filesystems/fs_rec/fs_rec.c @@ -220,7 +220,8 @@ FsRecRegisterFs(IN PDRIVER_OBJECT DriverObject, IN PCWSTR FsName, IN PCWSTR RecognizerName, IN ULONG FsType, - IN DEVICE_TYPE DeviceType) + IN DEVICE_TYPE DeviceType, + IN ULONG AdditionalFlags) { OBJECT_ATTRIBUTES ObjectAttributes; IO_STATUS_BLOCK IoStatus; @@ -278,6 +279,9 @@ FsRecRegisterFs(IN PDRIVER_OBJECT DriverObject, &DeviceObject); if (NT_SUCCESS(Status)) { + /* Set additional flags in the device object */ + DeviceObject->Flags |= AdditionalFlags; + /* Get the device extension and set it up */ DeviceExtension = DeviceObject->DeviceExtension; DeviceExtension->FsType = FsType; @@ -348,7 +352,8 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject, L"\\Cdfs", L"\\FileSystem\\CdfsRecognizer", FS_TYPE_CDFS, - FILE_DEVICE_CD_ROM_FILE_SYSTEM); + FILE_DEVICE_CD_ROM_FILE_SYSTEM, + DO_LOW_PRIORITY_FILESYSTEM); if (NT_SUCCESS(Status)) DeviceCount++; /* Register CDFS for HDDs */ @@ -358,7 +363,8 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject, L"\\CdfsHdd", L"\\FileSystem\\CdfsHddRecognizer", FS_TYPE_CDFS, - FILE_DEVICE_DISK_FILE_SYSTEM); + FILE_DEVICE_DISK_FILE_SYSTEM, + DO_LOW_PRIORITY_FILESYSTEM); if (NT_SUCCESS(Status)) DeviceCount++; /* Register UDFS for CDs */ @@ -368,7 +374,8 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject, L"\\UdfsCdRom", L"\\FileSystem\\UdfsCdRomRecognizer", FS_TYPE_UDFS, - FILE_DEVICE_CD_ROM_FILE_SYSTEM); + FILE_DEVICE_CD_ROM_FILE_SYSTEM, + 0); if (NT_SUCCESS(Status)) DeviceCount++; /* Register UDFS for HDDs */ @@ -378,7 +385,8 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject, L"\\UdfsDisk", L"\\FileSystem\\UdfsDiskRecognizer", FS_TYPE_UDFS, - FILE_DEVICE_DISK_FILE_SYSTEM); + FILE_DEVICE_DISK_FILE_SYSTEM, + 0); if (NT_SUCCESS(Status)) DeviceCount++; /* Register FAT */ @@ -388,7 +396,8 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject, L"\\Fat", L"\\FileSystem\\FatRecognizer", FS_TYPE_VFAT, - FILE_DEVICE_DISK_FILE_SYSTEM); + FILE_DEVICE_DISK_FILE_SYSTEM, + 0); if (NT_SUCCESS(Status)) DeviceCount++; /* Register NTFS */ @@ -398,7 +407,8 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject, L"\\Ntfs", L"\\FileSystem\\NtfsRecognizer", FS_TYPE_NTFS, - FILE_DEVICE_DISK_FILE_SYSTEM); + FILE_DEVICE_DISK_FILE_SYSTEM, + 0); if (NT_SUCCESS(Status)) DeviceCount++; /* Register EXT2 */ @@ -408,7 +418,8 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject, L"\\Ext2fs", L"\\FileSystem\\Ext2Recognizer", FS_TYPE_EXT2, - FILE_DEVICE_DISK_FILE_SYSTEM); + FILE_DEVICE_DISK_FILE_SYSTEM, + 0); if (NT_SUCCESS(Status)) DeviceCount++; /* Register BTRFS */ @@ -418,7 +429,8 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject, L"\\Btrfs", L"\\FileSystem\\BtrfsRecognizer", FS_TYPE_BTRFS, - FILE_DEVICE_DISK_FILE_SYSTEM); + FILE_DEVICE_DISK_FILE_SYSTEM, + 0); if (NT_SUCCESS(Status)) DeviceCount++; /* Register REISERFS */ @@ -428,7 +440,8 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject, L"\\Reiserfs", L"\\FileSystem\\ReiserfsRecognizer", FS_TYPE_REISERFS, - FILE_DEVICE_DISK_FILE_SYSTEM); + FILE_DEVICE_DISK_FILE_SYSTEM, + 0); if (NT_SUCCESS(Status)) DeviceCount++; /* Register FFS */ @@ -438,7 +451,8 @@ DriverEntry(IN PDRIVER_OBJECT DriverObject, L"\\ffs", L"\\FileSystem\\FfsRecognizer", FS_TYPE_FFS, - FILE_DEVICE_DISK_FILE_SYSTEM); + FILE_DEVICE_DISK_FILE_SYSTEM, + 0); if (NT_SUCCESS(Status)) DeviceCount++; /* Return appropriate Status */