hbirr@svn.reactos.com wrote:
- Changed the calculation of the base address of an image section.
- Removed some unnecessary members from section object.
- Changed the allocation of a section object back to paged pool.
Updated files: trunk/reactos/ntoskrnl/include/internal/mm.h trunk/reactos/ntoskrnl/mm/section.c
Ros-svn mailing list Ros-svn@reactos.com http://reactos.com:8080/mailman/listinfo/ros-svn
Thanks Hartmut.
If you're up for it, here are the public NT structures used...maybe it won't be a bad idea if we use them if it's not too much code change:
lkd> dt _SECTION_OBJECT -b +0x000 StartingVa : Ptr32 +0x004 EndingVa : Ptr32 +0x008 Parent : Ptr32 +0x00c LeftChild : Ptr32 +0x010 RightChild : Ptr32 +0x014 Segment : Ptr32 lkd> dt _SEGMENT_OBJECT +0x000 BaseAddress : Ptr32 Void +0x004 TotalNumberOfPtes : Uint4B +0x008 SizeOfSegment : _LARGE_INTEGER +0x010 NonExtendedPtes : Uint4B +0x014 ImageCommitment : Uint4B +0x018 ControlArea : Ptr32 _CONTROL_AREA +0x01c Subsection : Ptr32 _SUBSECTION +0x020 LargeControlArea : Ptr32 _LARGE_CONTROL_AREA +0x024 MmSectionFlags : Ptr32 _MMSECTION_FLAGS +0x028 MmSubSectionFlags : Ptr32 _MMSUBSECTION_FLAGS lkd> DT _CONTROL_AREA +0x000 Segment : Ptr32 _SEGMENT +0x004 DereferenceList : _LIST_ENTRY +0x00c NumberOfSectionReferences : Uint4B +0x010 NumberOfPfnReferences : Uint4B +0x014 NumberOfMappedViews : Uint4B +0x018 NumberOfSubsections : Uint2B +0x01a FlushInProgressCount : Uint2B +0x01c NumberOfUserReferences : Uint4B +0x020 u : __unnamed +0x024 FilePointer : Ptr32 _FILE_OBJECT +0x028 WaitingForDeletion : Ptr32 _EVENT_COUNTER +0x02c ModifiedWriteCount : Uint2B +0x02e NumberOfSystemCacheViews : Uint2B lkd> dt _SEGMENT +0x000 ControlArea : Ptr32 _CONTROL_AREA +0x004 TotalNumberOfPtes : Uint4B +0x008 NonExtendedPtes : Uint4B +0x00c WritableUserReferences : Uint4B +0x010 SizeOfSegment : Uint8B +0x018 SegmentPteTemplate : _MMPTE +0x01c NumberOfCommittedPages : Uint4B +0x020 ExtendInfo : Ptr32 _MMEXTEND_INFO +0x024 SystemImageBase : Ptr32 Void +0x028 BasedAddress : Ptr32 Void +0x02c u1 : __unnamed +0x030 u2 : __unnamed +0x034 PrototypePte : Ptr32 _MMPTE +0x038 ThePtes : [1] _MMPTE lkd> dt _SUBSECTION +0x000 ControlArea : Ptr32 _CONTROL_AREA +0x004 u : __unnamed +0x008 StartingSector : Uint4B +0x00c NumberOfFullSectors : Uint4B +0x010 SubsectionBase : Ptr32 _MMPTE +0x014 UnusedPtes : Uint4B +0x018 PtesInSubsection : Uint4B +0x01c NextSubsection : Ptr32 _SUBSECTION
I think it's important because many of the Section implementation details are documented in books (including driver-related books) and known to driver developers who might be using the structures in their code... I can name NT Insider, Windows Internals 4th Edition and Windows NT File System Internals as some examples...but anyways it's just an idea.
There's even a nice diagram in one of the books:
As a sidenote, do we have a PFN Database? It seems so much of our Mm is messy and old code that was written in a hurry to get ReactOS to work. I dislike the abusive use of macros and the difficult to understand code (imo).
Best regards, Alex Ionescu