Hi Colin,
Thanks for your work. This commit is likely breaking UDFS recognition
when media has a protective CDFS partition with UDFS afterwards, while
both FSD are unloaded.
You'll first match the CDFS recognizer and not the UDFS recognizer.
I would suggest you modify FsRecRegisterFs() so that you can register
low priority FS.
Cheers,
Pierre
Le 20/08/2017 à 17:30, cfi...@svn.reactos.org a écrit :
> Author: cfinck
> Date: Sun Aug 20 15:30:59 2017
> New Revision: 75630
>
> URL: http://svn.reactos.org/svn/reactos?rev=75630=rev
> Log:
> [FS_REC]
> - Add a detection routine for CDFS (ISO-9660) volumes that verifies the
> Primary Volume Descriptor.
> - Use this to also detect CDFS on disks and load the CDFS driver if it has
> not been loaded yet (e.g. when a bootcd/livecd flashed USB drive is inserted
> at boot of an installed ReactOS).
> - Fix a comment in udfs.c.
>
> Added:
> trunk/reactos/drivers/filesystems/fs_rec/cdfs.h (with props)
> Modified:
> trunk/reactos/drivers/filesystems/fs_rec/cdfs.c
> trunk/reactos/drivers/filesystems/fs_rec/fs_rec.c
> trunk/reactos/drivers/filesystems/fs_rec/udfs.c
>
> Modified: trunk/reactos/drivers/filesystems/fs_rec/cdfs.c
> URL:
> http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/fs_rec/cdfs.c?rev=75630=75629=75630=diff
> ==
> --- trunk/reactos/drivers/filesystems/fs_rec/cdfs.c [iso-8859-1] (original)
> +++ trunk/reactos/drivers/filesystems/fs_rec/cdfs.c [iso-8859-1] Sun Aug 20
> 15:30:59 2017
> @@ -1,10 +1,10 @@
> /*
> - * COPYRIGHT:See COPYING in the top level directory
> - * PROJECT: ReactOS File System Recognizer
> - * FILE: drivers/filesystems/fs_rec/cdfs.c
> - * PURPOSE: CDFS Recognizer
> - * PROGRAMMER: Alex Ionescu (alex.ione...@reactos.org)
> - * Eric Kohl
> + * PROJECT: ReactOS File System Recognizer
> + * LICENSE: GPL-2.0 (https://spdx.org/licenses/GPL-2.0)
> + * PURPOSE: CDFS Recognizer
> + * COPYRIGHT: Copyright 2002 Eric Kohl
> + * Copyright 2007 Alex Ionescu
> + * Copyright 2017 Colin Finck
> */
>
> /* INCLUDES
> */
> @@ -14,13 +14,60 @@
> #define NDEBUG
> #include
>
> +#include "cdfs.h"
> +
> /* FUNCTIONS
> /
> +
> +BOOLEAN
> +NTAPI
> +FsRecIsCdfsVolume(IN PDEVICE_OBJECT DeviceObject,
> + IN ULONG SectorSize)
> +{
> +BOOLEAN bReturnValue = FALSE;
> +LARGE_INTEGER Offset;
> +PVD_HEADER pVdHeader = NULL;
> +PAGED_CODE();
> +
> +// Read the Primary Volume Descriptor.
> +Offset.QuadPart = VD_HEADER_OFFSET;
> +if (!FsRecReadBlock(DeviceObject, , sizeof(VD_HEADER),
> SectorSize, (PVOID*), NULL))
> +{
> +// We cannot read this block, so no reason to let the CDFS driver
> try it.
> +goto Cleanup;
> +}
> +
> +// Verify the fields.
> +if (pVdHeader->Type != VD_TYPE_PRIMARY)
> +goto Cleanup;
> +
> +DPRINT("pVdHeader->Type verified!\n");
> +
> +if (RtlCompareMemory(pVdHeader->Identifier, VD_IDENTIFIER,
> VD_IDENTIFIER_LENGTH) != VD_IDENTIFIER_LENGTH)
> +goto Cleanup;
> +
> +DPRINT("pVdHeader->Identifier verified!\n");
> +
> +if (pVdHeader->Version != VD_VERSION)
> +goto Cleanup;
> +
> +DPRINT("pVdHeader->Version verified! This is a CDFS volume!\n");
> +
> +bReturnValue = TRUE;
> +
> +Cleanup:
> +if (pVdHeader)
> +ExFreePool(pVdHeader);
> +
> +return bReturnValue;
> +}
>
> NTSTATUS
> NTAPI
> FsRecCdfsFsControl(IN PDEVICE_OBJECT DeviceObject,
> IN PIRP Irp)
> {
> +PDEVICE_OBJECT MountDevice;
> +ULONG SectorSize;
> PIO_STACK_LOCATION Stack;
> NTSTATUS Status;
> PAGED_CODE();
> @@ -31,8 +78,21 @@
> {
> case IRP_MN_MOUNT_VOLUME:
>
> -/* We don't validate */
> -Status = STATUS_FS_DRIVER_REQUIRED;
> +/* Assume failure */
> +Status = STATUS_UNRECOGNIZED_VOLUME;
> +
> +/* Get the device object and request the sector size */
> +MountDevice = Stack->Parameters.MountVolume.DeviceObject;
> +if (FsRecGetDeviceSectorSize(MountDevice, ))
> +{
> +/* Check if it's an actual CDFS (ISO-9660) volume */
> +if (FsRecIsCdfsVolume(MountDevice, SectorSize))
> +{
> +/* It is! */
> +Status = STATUS_FS_DRIVER_REQUIRED;
> +}
> +}
> +
> break;
>
> case IRP_MN_LOAD_FILE_SYSTEM:
>
> Added: trunk/reactos/drivers/filesystems/fs_rec/cdfs.h
> URL:
> http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/fs_rec/cdfs.h?rev=75630
>