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
This commit is contained in:
Pierre Schweitzer
2015-06-25 20:49:40 +00:00
parent f6cf980d01
commit de1f1fca9f
3 changed files with 1 additions and 28 deletions
-10
View File
@@ -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);
+1 -17
View File
@@ -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;
-1
View File
@@ -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);