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
//
#define UDFS_VRS_START_SECTOR 16
#define UDFS_VRS_START_OFFSET 32768
#define UDFS_AVDP_SECTOR 256
//

View file

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