[WIN32K]: And all along I thought I had committed this... I guess it must work pretty well if I never noticed the difference :). This patch makes Win32k use session space instead of system space, now that we've had session space for a while. tkreuzer: review?

svn path=/trunk/; revision=57330
This commit is contained in:
Alex Ionescu
2012-09-19 01:56:28 +00:00
parent 9766e56248
commit f049284961
3 changed files with 54 additions and 18 deletions
+49 -11
View File
@@ -11,10 +11,6 @@
#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);
+1 -3
View 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))
+4 -4
View 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);