Author: fireball
Date: Tue Mar 29 10:56:28 2011
New Revision: 51192
URL: 
http://svn.reactos.org/svn/reactos?rev=51192&view=rev
Log:
[NTOS/MM]
- Remove IMG_SCN_TYPE_NOLOAD support which was firstly removed by Alex, then reenabled by
Herve. Hopefully it works this time.
- Return proper image size after successfully mapping an image section (previously, 0 was
always returned). The change above is necessary for returning correct size.
Modified:
    trunk/reactos/ntoskrnl/mm/section.c
Modified: trunk/reactos/ntoskrnl/mm/section.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/section.c?rev=…
==============================================================================
--- trunk/reactos/ntoskrnl/mm/section.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/section.c [iso-8859-1] Tue Mar 29 10:56:28 2011
@@ -4326,14 +4326,11 @@
        * and calculate the image base address */
       for (i = 0; i < NrSegments; i++)
       {
-         if (!(SectionSegments[i].Characteristics & IMAGE_SCN_TYPE_NOLOAD))
-         {
-            if (Segment == &SectionSegments[i])
-            {
-               ImageBaseAddress = (char*)BaseAddress -
(ULONG_PTR)SectionSegments[i].VirtualAddress;
-               break;
-            }
-         }
+          if (Segment == &SectionSegments[i])
+          {
+              ImageBaseAddress = (char*)BaseAddress -
(ULONG_PTR)SectionSegments[i].VirtualAddress;
+              break;
+          }
       }
       if (i >= NrSegments)
       {
@@ -4342,13 +4339,10 @@
       for (i = 0; i < NrSegments; i++)
       {
-         if (!(SectionSegments[i].Characteristics & IMAGE_SCN_TYPE_NOLOAD))
-         {
-            PVOID SBaseAddress = (PVOID)
-                                 ((char*)ImageBaseAddress +
(ULONG_PTR)SectionSegments[i].VirtualAddress);
-
-            Status = MmUnmapViewOfSegment(AddressSpace, SBaseAddress);
-         }
+          PVOID SBaseAddress = (PVOID)
+                               ((char*)ImageBaseAddress +
(ULONG_PTR)SectionSegments[i].VirtualAddress);
+
+          Status = MmUnmapViewOfSegment(AddressSpace, SBaseAddress);
       }
    }
    else
@@ -4625,13 +4619,10 @@
       ImageSize = 0;
       for (i = 0; i < NrSegments; i++)
       {
-         if (!(SectionSegments[i].Characteristics & IMAGE_SCN_TYPE_NOLOAD))
-         {
-            ULONG_PTR MaxExtent;
-            MaxExtent = (ULONG_PTR)SectionSegments[i].VirtualAddress +
-                        SectionSegments[i].Length;
-            ImageSize = max(ImageSize, MaxExtent);
-         }
+          ULONG_PTR MaxExtent;
+          MaxExtent = (ULONG_PTR)SectionSegments[i].VirtualAddress +
+                      SectionSegments[i].Length;
+          ImageSize = max(ImageSize, MaxExtent);
       }
       ImageSectionObject->ImageSize = ImageSize;
@@ -4659,29 +4650,27 @@
       for (i = 0; i < NrSegments; i++)
       {
-         if (!(SectionSegments[i].Characteristics & IMAGE_SCN_TYPE_NOLOAD))
-         {
-            PVOID SBaseAddress = (PVOID)
-                                 ((char*)ImageBase +
(ULONG_PTR)SectionSegments[i].VirtualAddress);
-            MmLockSectionSegment(&SectionSegments[i]);
-            Status = MmMapViewOfSegment(AddressSpace,
-                                        Section,
-                                        &SectionSegments[i],
-                                        &SBaseAddress,
-                                        SectionSegments[i].Length,
-                                        SectionSegments[i].Protection,
-                                        0,
-                                        0);
-            MmUnlockSectionSegment(&SectionSegments[i]);
-            if (!NT_SUCCESS(Status))
-            {
-               MmUnlockAddressSpace(AddressSpace);
-               return(Status);
-            }
-         }
+          PVOID SBaseAddress = (PVOID)
+                               ((char*)ImageBase +
(ULONG_PTR)SectionSegments[i].VirtualAddress);
+          MmLockSectionSegment(&SectionSegments[i]);
+          Status = MmMapViewOfSegment(AddressSpace,
+                                      Section,
+                                      &SectionSegments[i],
+                                      &SBaseAddress,
+                                      SectionSegments[i].Length,
+                                      SectionSegments[i].Protection,
+                                      0,
+                                      0);
+          MmUnlockSectionSegment(&SectionSegments[i]);
+          if (!NT_SUCCESS(Status))
+          {
+              MmUnlockAddressSpace(AddressSpace);
+              return(Status);
+          }
       }
       *BaseAddress = (PVOID)ImageBase;
+      *ViewSize = ImageSize;
    }
    else
    {