diff --git a/reactos/win32ss/gdi/eng/mapping.c b/reactos/win32ss/gdi/eng/mapping.c index 4556f9984c0..e13453c83ba 100644 --- a/reactos/win32ss/gdi/eng/mapping.c +++ b/reactos/win32ss/gdi/eng/mapping.c @@ -11,10 +11,6 @@ #define NDEBUG #include -// 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); diff --git a/reactos/win32ss/gdi/ntgdi/gdiobj.c b/reactos/win32ss/gdi/ntgdi/gdiobj.c index 7e4aa730b39..7d294c54497 100644 --- a/reactos/win32ss/gdi/ntgdi/gdiobj.c +++ b/reactos/win32ss/gdi/ntgdi/gdiobj.c @@ -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)) diff --git a/reactos/win32ss/user/ntuser/misc/usrheap.c b/reactos/win32ss/user/ntuser/misc/usrheap.c index 92889b1b4a7..be5c0d94adf 100644 --- a/reactos/win32ss/user/ntuser/misc/usrheap.c +++ b/reactos/win32ss/user/ntuser/misc/usrheap.c @@ -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);