Author: pschweitzer Date: Wed Jun 1 20:13:15 2016 New Revision: 71490
URL: http://svn.reactos.org/svn/reactos?rev=71490&view=rev Log: [FS_REC] Fix the UDFS recognizer. Patch by Pater Hater.
CORE-9816
Modified: trunk/reactos/drivers/filesystems/fs_rec/udfs.c
Modified: trunk/reactos/drivers/filesystems/fs_rec/udfs.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/fs_rec/... ============================================================================== --- trunk/reactos/drivers/filesystems/fs_rec/udfs.c [iso-8859-1] (original) +++ trunk/reactos/drivers/filesystems/fs_rec/udfs.c [iso-8859-1] Wed Jun 1 20:13:15 2016 @@ -25,74 +25,80 @@ { PVOLSTRUCTDESC VolumeStructDesc = NULL; LARGE_INTEGER Offset; - ULONG State = 0; + BOOLEAN ret = FALSE; + int i; PAGED_CODE();
- Offset.QuadPart = UDFS_VRS_START_OFFSET; - while (TRUE) + Offset.QuadPart = 16 * SectorSize; + for (i = 0; i < 16; i++) { if (!FsRecReadBlock(DeviceObject, &Offset, SectorSize, SectorSize, - (PVOID)&VolumeStructDesc, + (PVOID *)&VolumeStructDesc, NULL)) { break; }
- switch (State) + if (!strncmp((const char*)VolumeStructDesc->Ident, + VSD_STD_ID_BEA01, + VSD_STD_ID_LEN)) { - case 0: + DPRINT("BEA01 found\n"); + }
- if (!strncmp((const char*)VolumeStructDesc->Ident, - VSD_STD_ID_BEA01, - VSD_STD_ID_LEN)) - { - State = 1; - } - else - { - ExFreePool(VolumeStructDesc); - return FALSE; - } - break; + if (!strncmp((const char*)VolumeStructDesc->Ident, + VSD_STD_ID_NSR03, + VSD_STD_ID_LEN)) + { + DPRINT("NSR03 found\n"); + ret = TRUE; + }
- case 1: + if (!strncmp((const char*)VolumeStructDesc->Ident, + VSD_STD_ID_NSR02, + VSD_STD_ID_LEN)) + { + DPRINT("NSR02 found\n"); + ret = TRUE; + }
- if (!strncmp((const char*)VolumeStructDesc->Ident, - VSD_STD_ID_NSR03, - VSD_STD_ID_LEN) || - !strncmp((const char*)VolumeStructDesc->Ident, - VSD_STD_ID_NSR02, - VSD_STD_ID_LEN)) - { - State = 2; - } - break; + if (!strncmp((const char*)VolumeStructDesc->Ident, + VSD_STD_ID_TEA01, + VSD_STD_ID_LEN)) + { + DPRINT("TEA01 found\n"); + }
- case 2: + if (!strncmp((const char*)VolumeStructDesc->Ident, + VSD_STD_ID_CD001, + VSD_STD_ID_LEN)) + { + DPRINT("CD001 found\n"); + }
- if (!strncmp((const char*)VolumeStructDesc->Ident, - VSD_STD_ID_TEA01, - VSD_STD_ID_LEN)) - { - ExFreePool(VolumeStructDesc); - return TRUE; - } - break; + if (!strncmp((const char*)VolumeStructDesc->Ident, + VSD_STD_ID_CDW02, + VSD_STD_ID_LEN)) + { + DPRINT("CDW02 found\n"); + } + + if (!strncmp((const char*)VolumeStructDesc->Ident, + VSD_STD_ID_BOOT2, + VSD_STD_ID_LEN)) + { + DPRINT("BOOT2 found\n"); }
Offset.QuadPart += SectorSize; - if (Offset.QuadPart == UDFS_AVDP_SECTOR) - { - ExFreePool(VolumeStructDesc); - return FALSE; - } }
- ExFreePool(VolumeStructDesc); - return TRUE; + if (VolumeStructDesc) + ExFreePool(VolumeStructDesc); + return ret; }
NTSTATUS