Juan Sánchez Jurado <juan.s.jurado@gmail.com>

- UDF recognizer fixed so it doesn't perform partial sector reads. When trying to detect filesystem for a floppy without 0xaa55 signature UDF recognizer is called and it performed wrong partial sectors read because of a confusion between sectors and offset in bytes.
See issue #2287 for more details.

svn path=/trunk/; revision=37355
This commit is contained in:
Aleksey Bragin 2008-11-14 09:23:09 +00:00
parent 49050f13b3
commit a2d0db9460
2 changed files with 5 additions and 6 deletions

View file

@ -23,7 +23,7 @@
// //
// UDFS Offsets // UDFS Offsets
// //
#define UDFS_VRS_START_SECTOR 16 #define UDFS_VRS_START_OFFSET 32768
#define UDFS_AVDP_SECTOR 256 #define UDFS_AVDP_SECTOR 256
// //

View file

@ -24,12 +24,12 @@ FsRecIsUdfsVolume(IN PDEVICE_OBJECT DeviceObject,
LARGE_INTEGER Offset; LARGE_INTEGER Offset;
ULONG State = 0; ULONG State = 0;
Offset.QuadPart = UDFS_VRS_START_SECTOR; Offset.QuadPart = UDFS_VRS_START_OFFSET;
while (TRUE) while (TRUE)
{ {
if (!FsRecReadBlock(DeviceObject, if (!FsRecReadBlock(DeviceObject,
&Offset, &Offset,
512, SectorSize,
SectorSize, SectorSize,
(PVOID)&Buffer, (PVOID)&Buffer,
NULL)) NULL))
@ -41,8 +41,7 @@ FsRecIsUdfsVolume(IN PDEVICE_OBJECT DeviceObject,
{ {
case 0: case 0:
if ((Offset.QuadPart == UDFS_VRS_START_SECTOR) && if ((Buffer[1] == 'B') &&
(Buffer[1] == 'B') &&
(Buffer[2] == 'E') && (Buffer[2] == 'E') &&
(Buffer[3] == 'A') && (Buffer[3] == 'A') &&
(Buffer[4] == '0') && (Buffer[4] == '0') &&
@ -83,7 +82,7 @@ FsRecIsUdfsVolume(IN PDEVICE_OBJECT DeviceObject,
break; break;
} }
Offset.QuadPart++; Offset.QuadPart += SectorSize;
if (Offset.QuadPart == UDFS_AVDP_SECTOR) if (Offset.QuadPart == UDFS_AVDP_SECTOR)
{ {
ExFreePool(Buffer); ExFreePool(Buffer);