[NTFS] - Fix index entries storing the wrong allocated file size when the file is resident. Fix a typo in a DPRINT.

svn path=/branches/GSoC_2016/NTFS/; revision=75479
This commit is contained in:
Trevor Thompson 2017-08-04 17:58:06 +00:00 committed by Thomas Faber
parent 92d1f92a61
commit f2e47474f0
3 changed files with 6 additions and 7 deletions

View file

@ -597,7 +597,7 @@ NtfsSetEndOfFile(PNTFS_FCB Fcb,
DPRINT("Found record for %wS\n", Fcb->ObjectName); DPRINT("Found record for %wS\n", Fcb->ObjectName);
CurrentFileSize.QuadPart = NtfsGetFileSize(DeviceExt, FileRecord, L"", 0, (PULONGLONG)&CurrentFileSize); CurrentFileSize.QuadPart = NtfsGetFileSize(DeviceExt, FileRecord, L"", 0, NULL);
// Are we trying to decrease the file size? // Are we trying to decrease the file size?
if (NewFileSize->QuadPart < CurrentFileSize.QuadPart) if (NewFileSize->QuadPart < CurrentFileSize.QuadPart)
@ -673,7 +673,7 @@ NtfsSetEndOfFile(PNTFS_FCB Fcb,
FileName.Length = FileNameAttribute->NameLength * sizeof(WCHAR); FileName.Length = FileNameAttribute->NameLength * sizeof(WCHAR);
FileName.MaximumLength = FileName.Length; FileName.MaximumLength = FileName.Length;
AllocationSize = ROUND_UP(NewFileSize->QuadPart, Fcb->Vcb->NtfsInfo.BytesPerCluster); AllocationSize = AttributeAllocatedLength(&DataContext->Record);
Status = UpdateFileNameRecord(Fcb->Vcb, Status = UpdateFileNameRecord(Fcb->Vcb,
ParentMFTId, ParentMFTId,

View file

@ -173,7 +173,7 @@ AttributeAllocatedLength(PNTFS_ATTR_RECORD AttrRecord)
if (AttrRecord->IsNonResident) if (AttrRecord->IsNonResident)
return AttrRecord->NonResident.AllocatedSize; return AttrRecord->NonResident.AllocatedSize;
else else
return AttrRecord->Resident.ValueLength; return ALIGN_UP_BY(AttrRecord->Resident.ValueLength, ATTR_RECORD_ALIGNMENT);
} }
@ -399,7 +399,7 @@ SetAttributeDataLength(PFILE_OBJECT FileObject,
{ {
NTSTATUS Status = STATUS_SUCCESS; NTSTATUS Status = STATUS_SUCCESS;
DPRINT1("SetAttributeDataLenth(%p, %p, %p, %lu, %p, %I64u)\n", DPRINT1("SetAttributeDataLength(%p, %p, %p, %lu, %p, %I64u)\n",
FileObject, FileObject,
Fcb, Fcb,
AttrContext, AttrContext,

View file

@ -432,11 +432,8 @@ NTSTATUS NtfsWriteFile(PDEVICE_EXTENSION DeviceExt,
DataSize.QuadPart = WriteOffset + Length; DataSize.QuadPart = WriteOffset + Length;
AllocationSize = ROUND_UP(DataSize.QuadPart, Fcb->Vcb->NtfsInfo.BytesPerCluster);
// set the attribute data length // set the attribute data length
Status = SetAttributeDataLength(FileObject, Fcb, DataContext, AttributeOffset, FileRecord, &DataSize); Status = SetAttributeDataLength(FileObject, Fcb, DataContext, AttributeOffset, FileRecord, &DataSize);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
ReleaseAttributeContext(DataContext); ReleaseAttributeContext(DataContext);
@ -445,6 +442,8 @@ NTSTATUS NtfsWriteFile(PDEVICE_EXTENSION DeviceExt,
return Status; return Status;
} }
AllocationSize = AttributeAllocatedLength(&DataContext->Record);
// now we need to update this file's size in every directory index entry that references it // now we need to update this file's size in every directory index entry that references it
// TODO: put this code in its own function and adapt it to work with every filename / hardlink // TODO: put this code in its own function and adapt it to work with every filename / hardlink
// stored in the file record. // stored in the file record.