mirror of
https://github.com/reactos/reactos.git
synced 2024-06-30 18:01:07 +00:00
Win32 structure cleanup (WIP):
- replace hKernelHeap and HeapLimit from DESKTOPINFO with pvDesktopBase and pvDesktopLimit- replace hDesktopHeap with pheapDesktop in DESKTOP - use PWIN32HEAP for the heap handle and use this and only this as the handle. - Use the real base address for pvDesktopBase, instead of a copy of the heap handle svn path=/trunk/; revision=36824
This commit is contained in:
parent
2f79d7bdbc
commit
e77f768a09
|
@ -40,8 +40,6 @@ typedef struct _DESKTOPINFO
|
|||
PVOID pvDesktopBase;
|
||||
PVOID pvDesktopLimit;
|
||||
|
||||
HANDLE hKernelHeap;
|
||||
ULONG_PTR HeapLimit;
|
||||
HWND hTaskManWindow;
|
||||
HWND hProgmanWindow;
|
||||
HWND hShellWindow;
|
||||
|
|
|
@ -25,7 +25,7 @@ typedef struct _DESKTOP
|
|||
|
||||
LIST_ENTRY ShellHookWindows;
|
||||
|
||||
HANDLE hDesktopHeap;
|
||||
PWIN32HEAP pheapDesktop;
|
||||
PSECTION_OBJECT DesktopHeapSection;
|
||||
PDESKTOPINFO DesktopInfo;
|
||||
} DESKTOP, *PDESKTOP;
|
||||
|
@ -139,7 +139,7 @@ static __inline PVOID
|
|||
DesktopHeapAlloc(IN PDESKTOP Desktop,
|
||||
IN SIZE_T Bytes)
|
||||
{
|
||||
return RtlAllocateHeap(Desktop->DesktopInfo->hKernelHeap,
|
||||
return RtlAllocateHeap(Desktop->pheapDesktop,
|
||||
HEAP_NO_SERIALIZE,
|
||||
Bytes);
|
||||
}
|
||||
|
@ -148,7 +148,7 @@ static __inline BOOL
|
|||
DesktopHeapFree(IN PDESKTOP Desktop,
|
||||
IN PVOID lpMem)
|
||||
{
|
||||
return RtlFreeHeap(Desktop->DesktopInfo->hKernelHeap,
|
||||
return RtlFreeHeap(Desktop->pheapDesktop,
|
||||
HEAP_NO_SERIALIZE,
|
||||
lpMem);
|
||||
}
|
||||
|
@ -160,7 +160,7 @@ DesktopHeapReAlloc(IN PDESKTOP Desktop,
|
|||
{
|
||||
#if 0
|
||||
/* NOTE: ntoskrnl doesn't export RtlReAllocateHeap... */
|
||||
return RtlReAllocateHeap(Desktop->DesktopInfo->hKernelHeap,
|
||||
return RtlReAllocateHeap(Desktop->pheapDesktop,
|
||||
HEAP_NO_SERIALIZE,
|
||||
lpMem,
|
||||
Bytes);
|
||||
|
@ -168,14 +168,14 @@ DesktopHeapReAlloc(IN PDESKTOP Desktop,
|
|||
SIZE_T PrevSize;
|
||||
PVOID pNew;
|
||||
|
||||
PrevSize = RtlSizeHeap(Desktop->DesktopInfo->hKernelHeap,
|
||||
PrevSize = RtlSizeHeap(Desktop->pheapDesktop,
|
||||
HEAP_NO_SERIALIZE,
|
||||
lpMem);
|
||||
|
||||
if (PrevSize == Bytes)
|
||||
return lpMem;
|
||||
|
||||
pNew = RtlAllocateHeap(Desktop->DesktopInfo->hKernelHeap,
|
||||
pNew = RtlAllocateHeap(Desktop->pheapDesktop,
|
||||
HEAP_NO_SERIALIZE,
|
||||
Bytes);
|
||||
if (pNew != NULL)
|
||||
|
@ -187,7 +187,7 @@ DesktopHeapReAlloc(IN PDESKTOP Desktop,
|
|||
lpMem,
|
||||
Bytes);
|
||||
|
||||
RtlFreeHeap(Desktop->DesktopInfo->hKernelHeap,
|
||||
RtlFreeHeap(Desktop->pheapDesktop,
|
||||
HEAP_NO_SERIALIZE,
|
||||
lpMem);
|
||||
}
|
||||
|
@ -202,20 +202,20 @@ DesktopHeapGetUserDelta(VOID)
|
|||
PW32HEAP_USER_MAPPING Mapping;
|
||||
PTHREADINFO pti;
|
||||
PW32PROCESS W32Process;
|
||||
HANDLE hDesktopHeap;
|
||||
PWIN32HEAP pheapDesktop;
|
||||
ULONG_PTR Delta = 0;
|
||||
|
||||
pti = PsGetCurrentThreadWin32Thread();
|
||||
if (!pti->Desktop)
|
||||
return 0;
|
||||
|
||||
hDesktopHeap = pti->Desktop->hDesktopHeap;
|
||||
pheapDesktop = pti->Desktop->pheapDesktop;
|
||||
|
||||
W32Process = PsGetCurrentProcessWin32Process();
|
||||
Mapping = W32Process->HeapMappings.Next;
|
||||
while (Mapping != NULL)
|
||||
{
|
||||
if (Mapping->KernelMapping == (PVOID)hDesktopHeap)
|
||||
if (Mapping->KernelMapping == (PVOID)pheapDesktop)
|
||||
{
|
||||
Delta = (ULONG_PTR)Mapping->KernelMapping - (ULONG_PTR)Mapping->UserMapping;
|
||||
break;
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef __INCLUDE_NAPI_WIN32_H
|
||||
#define __INCLUDE_NAPI_WIN32_H
|
||||
|
||||
typedef struct _WIN32HEAP WIN32HEAP, *PWIN32HEAP;
|
||||
|
||||
#include <pshpack1.h>
|
||||
|
||||
typedef struct _TL
|
||||
|
|
|
@ -102,7 +102,7 @@ IntUserHeapCommitRoutine(IN PVOID Base,
|
|||
return Status;
|
||||
}
|
||||
|
||||
static HANDLE
|
||||
static PWIN32HEAP
|
||||
IntUserHeapCreate(IN PSECTION_OBJECT SectionObject,
|
||||
IN PVOID *SystemMappedBase,
|
||||
IN ULONG HeapSize)
|
||||
|
@ -111,7 +111,7 @@ IntUserHeapCreate(IN PSECTION_OBJECT SectionObject,
|
|||
LARGE_INTEGER Offset;
|
||||
SIZE_T ViewSize = PAGE_SIZE;
|
||||
RTL_HEAP_PARAMETERS Parameters = {0};
|
||||
HANDLE hHeap;
|
||||
PVOID pHeap;
|
||||
NTSTATUS Status;
|
||||
|
||||
Offset.QuadPart = 0;
|
||||
|
@ -150,23 +150,23 @@ IntUserHeapCreate(IN PSECTION_OBJECT SectionObject,
|
|||
Parameters.InitialReserve = (SIZE_T)HeapSize;
|
||||
Parameters.CommitRoutine = IntUserHeapCommitRoutine;
|
||||
|
||||
hHeap = RtlCreateHeap(HEAP_ZERO_MEMORY | HEAP_NO_SERIALIZE,
|
||||
pHeap = RtlCreateHeap(HEAP_ZERO_MEMORY | HEAP_NO_SERIALIZE,
|
||||
*SystemMappedBase,
|
||||
(SIZE_T)HeapSize,
|
||||
ViewSize,
|
||||
NULL,
|
||||
&Parameters);
|
||||
|
||||
return hHeap;
|
||||
return pHeap;
|
||||
}
|
||||
|
||||
HANDLE
|
||||
PWIN32HEAP
|
||||
UserCreateHeap(OUT PSECTION_OBJECT *SectionObject,
|
||||
IN OUT PVOID *SystemBase,
|
||||
IN SIZE_T HeapSize)
|
||||
{
|
||||
LARGE_INTEGER SizeHeap;
|
||||
HANDLE hHeap = NULL;
|
||||
PWIN32HEAP pHeap = NULL;
|
||||
NTSTATUS Status;
|
||||
|
||||
SizeHeap.QuadPart = HeapSize;
|
||||
|
@ -200,11 +200,11 @@ UserCreateHeap(OUT PSECTION_OBJECT *SectionObject,
|
|||
}
|
||||
|
||||
/* create the heap */
|
||||
hHeap = IntUserHeapCreate(*SectionObject,
|
||||
pHeap = IntUserHeapCreate(*SectionObject,
|
||||
SystemBase,
|
||||
HeapSize);
|
||||
|
||||
if (hHeap == NULL)
|
||||
if (pHeap == NULL)
|
||||
{
|
||||
ObDereferenceObject(*SectionObject);
|
||||
*SectionObject = NULL;
|
||||
|
@ -212,5 +212,5 @@ UserCreateHeap(OUT PSECTION_OBJECT *SectionObject,
|
|||
SetLastNtError(STATUS_UNSUCCESSFUL);
|
||||
}
|
||||
|
||||
return hHeap;
|
||||
return pHeap;
|
||||
}
|
||||
|
|
|
@ -981,10 +981,10 @@ NtUserCreateDesktop(
|
|||
if (!NT_SUCCESS(Status)) RETURN(NULL);
|
||||
|
||||
DesktopObject->DesktopHeapSection = NULL;
|
||||
DesktopObject->hDesktopHeap = UserCreateHeap(&DesktopObject->DesktopHeapSection,
|
||||
DesktopObject->pheapDesktop = UserCreateHeap(&DesktopObject->DesktopHeapSection,
|
||||
&DesktopHeapSystemBase,
|
||||
HeapLimit);
|
||||
if (DesktopObject->hDesktopHeap == NULL)
|
||||
if (DesktopObject->pheapDesktop == NULL)
|
||||
{
|
||||
ObDereferenceObject(DesktopObject);
|
||||
DPRINT1("Failed to create desktop heap!\n");
|
||||
|
@ -994,7 +994,7 @@ NtUserCreateDesktop(
|
|||
DesktopInfoSize = FIELD_OFFSET(DESKTOPINFO,
|
||||
szDesktopName[(lpszDesktopName->Length / sizeof(WCHAR)) + 1]);
|
||||
|
||||
DesktopObject->DesktopInfo = RtlAllocateHeap(DesktopObject->hDesktopHeap,
|
||||
DesktopObject->DesktopInfo = RtlAllocateHeap(DesktopObject->pheapDesktop,
|
||||
HEAP_NO_SERIALIZE,
|
||||
DesktopInfoSize);
|
||||
|
||||
|
@ -1008,8 +1008,8 @@ NtUserCreateDesktop(
|
|||
RtlZeroMemory(DesktopObject->DesktopInfo,
|
||||
DesktopInfoSize);
|
||||
|
||||
DesktopObject->DesktopInfo->hKernelHeap = DesktopObject->hDesktopHeap;
|
||||
DesktopObject->DesktopInfo->HeapLimit = HeapLimit;
|
||||
DesktopObject->DesktopInfo->pvDesktopBase = DesktopHeapSystemBase;
|
||||
DesktopObject->DesktopInfo->pvDesktopLimit = (PVOID)HeapLimit;
|
||||
RtlCopyMemory(DesktopObject->DesktopInfo->szDesktopName,
|
||||
lpszDesktopName->Buffer,
|
||||
lpszDesktopName->Length);
|
||||
|
@ -1745,7 +1745,7 @@ IntUnmapDesktopView(IN PDESKTOP DesktopObject)
|
|||
HeapMapping = *PrevLink;
|
||||
while (HeapMapping != NULL)
|
||||
{
|
||||
if (HeapMapping->KernelMapping == (PVOID)DesktopObject->hDesktopHeap)
|
||||
if (HeapMapping->KernelMapping == (PVOID)DesktopObject->pheapDesktop)
|
||||
{
|
||||
if (--HeapMapping->Count == 0)
|
||||
{
|
||||
|
@ -1798,7 +1798,7 @@ IntMapDesktopView(IN PDESKTOP DesktopObject)
|
|||
HeapMapping = *PrevLink;
|
||||
while (HeapMapping != NULL)
|
||||
{
|
||||
if (HeapMapping->KernelMapping == (PVOID)DesktopObject->hDesktopHeap)
|
||||
if (HeapMapping->KernelMapping == (PVOID)DesktopObject->pheapDesktop)
|
||||
{
|
||||
HeapMapping->Count++;
|
||||
return STATUS_SUCCESS;
|
||||
|
@ -1809,7 +1809,7 @@ IntMapDesktopView(IN PDESKTOP DesktopObject)
|
|||
}
|
||||
|
||||
/* we're the first, map the heap */
|
||||
DPRINT("Noone mapped the desktop heap %p yet, so - map it!\n", DesktopObject->hDesktopHeap);
|
||||
DPRINT("Noone mapped the desktop heap %p yet, so - map it!\n", DesktopObject->pheapDesktop);
|
||||
Offset.QuadPart = 0;
|
||||
Status = MmMapViewOfSection(DesktopObject->DesktopHeapSection,
|
||||
PsGetCurrentProcess(),
|
||||
|
@ -1838,7 +1838,7 @@ IntMapDesktopView(IN PDESKTOP DesktopObject)
|
|||
}
|
||||
|
||||
HeapMapping->Next = NULL;
|
||||
HeapMapping->KernelMapping = (PVOID)DesktopObject->hDesktopHeap;
|
||||
HeapMapping->KernelMapping = (PVOID)DesktopObject->pheapDesktop;
|
||||
HeapMapping->UserMapping = UserBase;
|
||||
HeapMapping->Limit = ViewSize;
|
||||
HeapMapping->Count = 1;
|
||||
|
@ -1853,7 +1853,7 @@ IntMapDesktopView(IN PDESKTOP DesktopObject)
|
|||
if (ti->Desktop == NULL)
|
||||
{
|
||||
ti->Desktop = DesktopObject->DesktopInfo;
|
||||
ti->DesktopHeapBase = DesktopObject->hDesktopHeap;
|
||||
ti->DesktopHeapBase = DesktopObject->pheapDesktop;
|
||||
ti->DesktopHeapLimit = ViewSize;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -462,8 +462,8 @@ GetW32ThreadInfo(VOID)
|
|||
if (W32Thread->Desktop != NULL)
|
||||
{
|
||||
ti->Desktop = W32Thread->Desktop->DesktopInfo;
|
||||
ti->DesktopHeapBase = W32Thread->Desktop->DesktopInfo->hKernelHeap;
|
||||
ti->DesktopHeapLimit = W32Thread->Desktop->DesktopInfo->HeapLimit;
|
||||
ti->DesktopHeapBase = W32Thread->Desktop->DesktopInfo->pvDesktopBase;
|
||||
ti->DesktopHeapLimit = (ULONG_PTR)W32Thread->Desktop->DesktopInfo->pvDesktopLimit;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -71,7 +71,7 @@ typedef DRIVEROBJ *PDRIVEROBJ;
|
|||
/* User heap */
|
||||
extern HANDLE GlobalUserHeap;
|
||||
|
||||
HANDLE
|
||||
PWIN32HEAP
|
||||
UserCreateHeap(OUT PSECTION_OBJECT *SectionObject,
|
||||
IN OUT PVOID *SystemBase,
|
||||
IN SIZE_T HeapSize);
|
||||
|
|
Loading…
Reference in a new issue