From de1f1fca9fa19507283de7b913ed11c67a09c2f6 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Thu, 25 Jun 2015 20:49:40 +0000 Subject: [PATCH] [NTFS] Don't attempt to read the unnamed stream of the $DATA attribute of each file matching: - We don't need such attribute later on - In case there's no such unammed stream, finding the file fails, whereas the file really exist This fixes (at least here) browsing Win7 NTFS system drives, where our driver was always failing on pagefile.sys svn path=/trunk/; revision=68268 --- reactos/drivers/filesystems/ntfs/dirctl.c | 10 ---------- reactos/drivers/filesystems/ntfs/mft.c | 18 +----------------- reactos/drivers/filesystems/ntfs/ntfs.h | 1 - 3 files changed, 1 insertion(+), 28 deletions(-) diff --git a/reactos/drivers/filesystems/ntfs/dirctl.c b/reactos/drivers/filesystems/ntfs/dirctl.c index 487fa165af8..1fc08a25bef 100644 --- a/reactos/drivers/filesystems/ntfs/dirctl.c +++ b/reactos/drivers/filesystems/ntfs/dirctl.c @@ -38,7 +38,6 @@ static NTSTATUS NtfsGetNameInformation(PDEVICE_EXTENSION DeviceExt, PFILE_RECORD_HEADER FileRecord, - PNTFS_ATTR_CONTEXT DataContext, PFILE_NAMES_INFORMATION Info, ULONG BufferLength) { @@ -66,7 +65,6 @@ NtfsGetNameInformation(PDEVICE_EXTENSION DeviceExt, static NTSTATUS NtfsGetDirectoryInformation(PDEVICE_EXTENSION DeviceExt, PFILE_RECORD_HEADER FileRecord, - PNTFS_ATTR_CONTEXT DataContext, ULONGLONG MFTIndex, PFILE_DIRECTORY_INFORMATION Info, ULONG BufferLength) @@ -112,7 +110,6 @@ NtfsGetDirectoryInformation(PDEVICE_EXTENSION DeviceExt, static NTSTATUS NtfsGetFullDirectoryInformation(PDEVICE_EXTENSION DeviceExt, PFILE_RECORD_HEADER FileRecord, - PNTFS_ATTR_CONTEXT DataContext, ULONGLONG MFTIndex, PFILE_FULL_DIRECTORY_INFORMATION Info, ULONG BufferLength) @@ -159,7 +156,6 @@ NtfsGetFullDirectoryInformation(PDEVICE_EXTENSION DeviceExt, static NTSTATUS NtfsGetBothDirectoryInformation(PDEVICE_EXTENSION DeviceExt, PFILE_RECORD_HEADER FileRecord, - PNTFS_ATTR_CONTEXT DataContext, ULONGLONG MFTIndex, PFILE_BOTH_DIR_INFORMATION Info, ULONG BufferLength) @@ -236,7 +232,6 @@ NtfsQueryDirectory(PNTFS_IRP_CONTEXT IrpContext) PFILE_OBJECT FileObject; NTSTATUS Status = STATUS_SUCCESS; PFILE_RECORD_HEADER FileRecord; - PNTFS_ATTR_CONTEXT DataContext; ULONGLONG MFTRecord, OldMFTRecord = 0; UNICODE_STRING Pattern; @@ -315,7 +310,6 @@ NtfsQueryDirectory(PNTFS_IRP_CONTEXT IrpContext) &Pattern, &Ccb->Entry, &FileRecord, - &DataContext, &MFTRecord, Fcb->MFTIndex); @@ -338,7 +332,6 @@ NtfsQueryDirectory(PNTFS_IRP_CONTEXT IrpContext) case FileNameInformation: Status = NtfsGetNameInformation(DeviceExtension, FileRecord, - DataContext, (PFILE_NAMES_INFORMATION)Buffer, BufferLength); break; @@ -346,7 +339,6 @@ NtfsQueryDirectory(PNTFS_IRP_CONTEXT IrpContext) case FileDirectoryInformation: Status = NtfsGetDirectoryInformation(DeviceExtension, FileRecord, - DataContext, MFTRecord, (PFILE_DIRECTORY_INFORMATION)Buffer, BufferLength); @@ -355,7 +347,6 @@ NtfsQueryDirectory(PNTFS_IRP_CONTEXT IrpContext) case FileFullDirectoryInformation: Status = NtfsGetFullDirectoryInformation(DeviceExtension, FileRecord, - DataContext, MFTRecord, (PFILE_FULL_DIRECTORY_INFORMATION)Buffer, BufferLength); @@ -364,7 +355,6 @@ NtfsQueryDirectory(PNTFS_IRP_CONTEXT IrpContext) case FileBothDirectoryInformation: Status = NtfsGetBothDirectoryInformation(DeviceExtension, FileRecord, - DataContext, MFTRecord, (PFILE_BOTH_DIR_INFORMATION)Buffer, BufferLength); diff --git a/reactos/drivers/filesystems/ntfs/mft.c b/reactos/drivers/filesystems/ntfs/mft.c index 58868521e18..5af760c5a42 100644 --- a/reactos/drivers/filesystems/ntfs/mft.c +++ b/reactos/drivers/filesystems/ntfs/mft.c @@ -796,13 +796,12 @@ NtfsFindFileAt(PDEVICE_EXTENSION Vcb, PUNICODE_STRING SearchPattern, PULONG FirstEntry, PFILE_RECORD_HEADER *FileRecord, - PNTFS_ATTR_CONTEXT *DataContext, PULONGLONG MFTIndex, ULONGLONG CurrentMFTIndex) { NTSTATUS Status; - DPRINT("NtfsFindFileAt(%p, %wZ, %p, %p, %p, %p, %I64x)\n", Vcb, SearchPattern, FirstEntry, FileRecord, DataContext, MFTIndex, CurrentMFTIndex); + DPRINT("NtfsFindFileAt(%p, %wZ, %p, %p, %p, %I64x)\n", Vcb, SearchPattern, FirstEntry, FileRecord, MFTIndex, CurrentMFTIndex); Status = NtfsFindMftRecord(Vcb, CurrentMFTIndex, SearchPattern, FirstEntry, TRUE, &CurrentMFTIndex); if (!NT_SUCCESS(Status)) @@ -826,21 +825,6 @@ NtfsFindFileAt(PDEVICE_EXTENSION Vcb, return Status; } - if (!((*FileRecord)->Flags & FRH_DIRECTORY)) - { - Status = FindAttribute(Vcb, *FileRecord, AttributeData, L"", 0, DataContext); - if (!NT_SUCCESS(Status)) - { - DPRINT("NtfsFindFileAt: Can't find data attribute\n"); - ExFreePoolWithTag(*FileRecord, TAG_NTFS); - return Status; - } - } - else - { - *DataContext = NULL; - } - *MFTIndex = CurrentMFTIndex; return STATUS_SUCCESS; diff --git a/reactos/drivers/filesystems/ntfs/ntfs.h b/reactos/drivers/filesystems/ntfs/ntfs.h index f7120916dd3..db1851a3977 100644 --- a/reactos/drivers/filesystems/ntfs/ntfs.h +++ b/reactos/drivers/filesystems/ntfs/ntfs.h @@ -739,7 +739,6 @@ NtfsFindFileAt(PDEVICE_EXTENSION Vcb, PUNICODE_STRING SearchPattern, PULONG FirstEntry, PFILE_RECORD_HEADER *FileRecord, - PNTFS_ATTR_CONTEXT *DataContext, PULONGLONG MFTIndex, ULONGLONG CurrentMFTIndex);