From 5e1a81a59636614dc1145e72e9a3339d3d5238cb Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Wed, 10 Dec 2014 20:45:04 +0000 Subject: [PATCH] [NTFS] Implement the downward fashion of FSCTL_GET_NTFS_FILE_RECORD and always return a file record which is in use CORE-8725 svn path=/trunk/; revision=65601 --- reactos/drivers/filesystems/ntfs/fsctl.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/reactos/drivers/filesystems/ntfs/fsctl.c b/reactos/drivers/filesystems/ntfs/fsctl.c index 71f884c492c..31cabb45996 100644 --- a/reactos/drivers/filesystems/ntfs/fsctl.c +++ b/reactos/drivers/filesystems/ntfs/fsctl.c @@ -626,14 +626,23 @@ GetNtfsFileRecord(PDEVICE_EXTENSION DeviceExt, InputBuffer = (PNTFS_FILE_RECORD_INPUT_BUFFER)Irp->AssociatedIrp.SystemBuffer; MFTRecord = InputBuffer->FileReferenceNumber.QuadPart; - Status = ReadFileRecord(DeviceExt, MFTRecord, FileRecord); - if (!NT_SUCCESS(Status)) - { - DPRINT1("Failed reading record: %I64x\n", MFTRecord); - ExFreePoolWithTag(FileRecord, TAG_NTFS); - return Status; - } + DPRINT1("Requesting: %I64x\n", MFTRecord); + do + { + Status = ReadFileRecord(DeviceExt, MFTRecord, FileRecord); + if (NT_SUCCESS(Status)) + { + if (FileRecord->Flags & FRH_IN_USE) + { + break; + } + } + + --MFTRecord; + } while (TRUE); + + DPRINT1("Returning: %I64x\n", MFTRecord); OutputBuffer = (PNTFS_FILE_RECORD_OUTPUT_BUFFER)Irp->AssociatedIrp.SystemBuffer; OutputBuffer->FileReferenceNumber.QuadPart = MFTRecord; OutputBuffer->FileRecordLength = DeviceExt->NtfsInfo.BytesPerFileRecord;