[WIN32K]: And all along I thought I had committed this... I guess it must work pretty...
authorAlex Ionescu <aionescu@gmail.com>
Wed, 19 Sep 2012 01:56:28 +0000 (01:56 +0000)
committerAlex Ionescu <aionescu@gmail.com>
Wed, 19 Sep 2012 01:56:28 +0000 (01:56 +0000)
svn path=/trunk/; revision=57330

reactos/win32ss/gdi/eng/mapping.c
reactos/win32ss/gdi/ntgdi/gdiobj.c
reactos/win32ss/user/ntuser/misc/usrheap.c

index 4556f99..e13453c 100644 (file)
 #define NDEBUG
 #include <debug.h>
 
-// HACK!!!
-#define MmMapViewInSessionSpace MmMapViewInSystemSpace
-#define MmUnmapViewInSessionSpace MmUnmapViewInSystemSpace
-
 HANDLE ghSystem32Directory;
 HANDLE ghRootDirectory;
 
@@ -128,6 +124,48 @@ EngCreateSection(
     return pSection;
 }
 
+PVOID
+NTAPI
+EngCreateSectionHack(
+    IN ULONG fl,
+    IN SIZE_T cjSize,
+    IN ULONG ulTag)
+{
+    NTSTATUS Status;
+    PENGSECTION pSection;
+    PVOID pvSectionObject;
+    LARGE_INTEGER liSize;
+
+    /* Allocate a section object */
+    pSection = EngAllocMem(0, sizeof(ENGSECTION), 'stsU');
+    if (!pSection) return NULL;
+
+    liSize.QuadPart = cjSize;
+    Status = MmCreateSection(&pvSectionObject,
+                             SECTION_ALL_ACCESS,
+                             NULL,
+                             &liSize,
+                             PAGE_READWRITE,
+                             SEC_COMMIT | 1,
+                             NULL,
+                             NULL);
+    if (!NT_SUCCESS(Status))
+    {
+        DPRINT1("Failed to create a section Status=0x%x\n", Status);
+        EngFreeMem(pSection);
+        return NULL;
+    }
+
+    /* Set the fields of the section */
+    pSection->ulTag = ulTag;
+    pSection->pvSectionObject = pvSectionObject;
+    pSection->pvMappedBase = NULL;
+    pSection->cjViewSize = cjSize;
+
+    return pSection;
+}
+
+
 
 BOOL
 APIENTRY
@@ -250,7 +288,7 @@ EngAllocSectionMem(
     if (cjSize == 0) return NULL;
 
     /* Allocate a section object */
-    pSection = EngCreateSection(fl, cjSize, ulTag);
+    pSection = EngCreateSectionHack(fl, cjSize, ulTag);
     if (!pSection)
     {
         *ppvSection = NULL;
@@ -408,10 +446,10 @@ EngMapModule(
 
     pFileView->cjView = 0;
 
-    /* Map the section in session space */
-    Status = MmMapViewInSessionSpace(pFileView->pSection,
-                                     &pFileView->pvKView,
-                                     &pFileView->cjView);
+       /* FIXME: Use system space because ARM3 doesn't support executable sections yet */
+    Status = MmMapViewInSystemSpace(pFileView->pSection,
+                                    &pFileView->pvKView,
+                                    &pFileView->cjView);
     if (!NT_SUCCESS(Status))
     {
         DPRINT1("Failed to map a section Status=0x%x\n", Status);
@@ -430,8 +468,8 @@ EngFreeModule(IN HANDLE h)
     PFILEVIEW pFileView = (PFILEVIEW)h;
     NTSTATUS Status;
 
-    /* Unmap the section */
-    Status = MmUnmapViewInSessionSpace(pFileView->pvKView);
+       /* FIXME: Use system space because ARM3 doesn't support executable sections yet */
+    Status = MmUnmapViewInSystemSpace(pFileView->pvKView);
     if (!NT_SUCCESS(Status))
     {
         DPRINT1("MmUnmapViewInSessionSpace failed: 0x%lx\n", Status);
index 7e4aa73..7d294c5 100644 (file)
@@ -60,8 +60,6 @@
 #define ASSERT_EXCLUSIVE_OBJECT_TYPE(objt)
 #endif
 
-#define MmMapViewInSessionSpace MmMapViewInSystemSpace
-
 #if defined(_M_IX86) || defined(_M_AMD64)
 #define InterlockedOr16 _InterlockedOr16
 #endif
@@ -166,7 +164,7 @@ InitGdiHandleTable(void)
                              NULL,
                              &liSize,
                              PAGE_READWRITE,
-                             SEC_COMMIT,
+                             SEC_COMMIT | 0x1,
                              NULL,
                              NULL);
     if (!NT_SUCCESS(status))
index 92889b1..be5c0d9 100644 (file)
@@ -188,7 +188,7 @@ UserCreateHeap(OUT PSECTION_OBJECT *SectionObject,
                              NULL,
                              &SizeHeap,
                              PAGE_EXECUTE_READWRITE, /* Would prefer PAGE_READWRITE, but thanks to RTL heaps... */
-                             SEC_RESERVE,
+                             SEC_RESERVE | 1,
                              NULL,
                              NULL);
 
@@ -198,9 +198,9 @@ UserCreateHeap(OUT PSECTION_OBJECT *SectionObject,
         return FALSE;
     }
 
-    Status = MmMapViewInSystemSpace(*SectionObject,
-                                    SystemBase,
-                                    &HeapSize);
+    Status = MmMapViewInSessionSpace(*SectionObject,
+                                     SystemBase,
+                                     &HeapSize);
     if (!NT_SUCCESS(Status))
     {
         ObDereferenceObject(*SectionObject);