Hi, Comments inline.
Le 05/07/2016 09:00, tthomp...@svn.reactos.org a écrit : > Modified: branches/GSoC_2016/NTFS/drivers/filesystems/ntfs/mft.c > URL: > http://svn.reactos.org/svn/reactos/branches/GSoC_2016/NTFS/drivers/filesystems/ntfs/mft.c?rev=71820&r1=71819&r2=71820&view=diff > ============================================================================== > --- branches/GSoC_2016/NTFS/drivers/filesystems/ntfs/mft.c [iso-8859-1] > (original) > +++ branches/GSoC_2016/NTFS/drivers/filesystems/ntfs/mft.c [iso-8859-1] > Tue Jul 5 07:00:43 2016 > @@ -170,6 +172,50 @@ > return AttrRecord->Resident.ValueLength; > } > > +void > +InternalSetResidentAttributeLength(PNTFS_ATTR_CONTEXT AttrContext, > + PFILE_RECORD_HEADER FileRecord, > + ULONG AttrOffset, > + ULONG DataSize) > +{ > + ULONG EndMarker = AttributeEnd; > + ULONG FinalMarker = FILE_RECORD_END; > + ULONG NextAttributeOffset; > + ULONG Offset; > + USHORT Padding; > + > + DPRINT("InternalSetResidentAttributeLength( %p, %p, %lu, %lu )\n", > AttrContext, FileRecord, AttrOffset, DataSize); > + > + // update ValueLength Field > + AttrContext->Record.Resident.ValueLength = DataSize; > + Offset = AttrOffset + FIELD_OFFSET(NTFS_ATTR_RECORD, > Resident.ValueLength); > + RtlCopyMemory((PCHAR)FileRecord + Offset, &DataSize, sizeof(ULONG)); That part looks a bit over-engineered to me and might be simplified (like not using an intermediate var, nor RtlCopyMemory). Cosmetic, I'd replace PCHAR by ULONG_PTR. Same comment goes to code below doing basically the same thing. > + > + // calculate the record length and end marker offset > + AttrContext->Record.Length = DataSize + > AttrContext->Record.Resident.ValueOffset; > + NextAttributeOffset = AttrOffset + AttrContext->Record.Length; > + > + // Ensure NextAttributeOffset is aligned to an 8-byte boundary > + if (NextAttributeOffset % 8 != 0) > + { > + Padding = 8 - (NextAttributeOffset % 8); > + NextAttributeOffset += Padding; > + AttrContext->Record.Length += Padding; > + } > + > + // update the record length > + Offset = AttrOffset + FIELD_OFFSET(NTFS_ATTR_RECORD, Length); > + RtlCopyMemory((PCHAR)FileRecord + Offset, &AttrContext->Record.Length, > sizeof(ULONG)); > + > + // write the end marker > + RtlCopyMemory((PCHAR)FileRecord + NextAttributeOffset, &EndMarker, > sizeof(ULONG)); > + > + // write the final marker > + Offset = NextAttributeOffset + sizeof(ULONG); > + RtlCopyMemory((PCHAR)FileRecord + Offset, &FinalMarker, sizeof(ULONG)); > + > + FileRecord->BytesInUse = Offset + sizeof(ULONG); > +} > > NTSTATUS > SetAttributeDataLength(PFILE_OBJECT FileObject, > @@ -179,6 +225,18 @@ > PFILE_RECORD_HEADER FileRecord, > PLARGE_INTEGER DataSize) > { > + NTSTATUS Status = STATUS_SUCCESS; > + > + // are we truncating the file? > + if (DataSize->QuadPart < AttributeDataLength(&AttrContext->Record) Unless I'm blind, I'm not sure it builds. > + { > + if (!MmCanFileBeTruncated(FileObject->SectionObjectPointer, > (PLARGE_INTEGER)&AllocationSize)) > + { > + DPRINT1("Can't truncate a memory-mapped file!\n"); > + return STATUS_USER_MAPPED_FILE; > + } > + } > + > if (AttrContext->Record.IsNonResident) > { > ULONG BytesPerCluster = Fcb->Vcb->NtfsInfo.BytesPerCluster; > Modified: branches/GSoC_2016/NTFS/drivers/filesystems/ntfs/volinfo.c > URL: > http://svn.reactos.org/svn/reactos/branches/GSoC_2016/NTFS/drivers/filesystems/ntfs/volinfo.c?rev=71820&r1=71819&r2=71820&view=diff > ============================================================================== > --- branches/GSoC_2016/NTFS/drivers/filesystems/ntfs/volinfo.c > [iso-8859-1] (original) > +++ branches/GSoC_2016/NTFS/drivers/filesystems/ntfs/volinfo.c > [iso-8859-1] Tue Jul 5 07:00:43 2016 > @@ -158,7 +157,7 @@ > DPRINT1("Total clusters in bitmap: %I64x\n", BitmapDataSize * 8); > DPRINT1("Diff in size: %I64d B\n", ((BitmapDataSize * 8) - > DeviceExt->NtfsInfo.ClusterCount) * DeviceExt->NtfsInfo.SectorsPerCluster * > DeviceExt->NtfsInfo.BytesPerSector); > > - ReadAttribute(DeviceExt, DataContext, Read, > (PCHAR)((ULONG_PTR)BitmapData + Read), (ULONG)BitmapDataSize); > + ReadAttribute(DeviceExt, DataContext, 0, (PCHAR)BitmapData, > (ULONG)BitmapDataSize); What's this change? > > RtlInitializeBitMap(&Bitmap, (PULONG)BitmapData, > DeviceExt->NtfsInfo.ClusterCount); > FreeClusters = RtlNumberOfClearBits(&Bitmap); > > -- Pierre Schweitzer <pierre at reactos.org> System & Network Administrator Senior Kernel Developer ReactOS Deutschland e.V.
smime.p7s
Description: Signature cryptographique S/MIME
_______________________________________________ Ros-dev mailing list Ros-dev@reactos.org http://www.reactos.org/mailman/listinfo/ros-dev