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:
Timo Kreuzer 2008-10-19 02:05:41 +00:00
parent 2f79d7bdbc
commit e77f768a09
7 changed files with 34 additions and 34 deletions

View file

@ -40,8 +40,6 @@ typedef struct _DESKTOPINFO
PVOID pvDesktopBase;
PVOID pvDesktopLimit;
HANDLE hKernelHeap;
ULONG_PTR HeapLimit;
HWND hTaskManWindow;
HWND hProgmanWindow;
HWND hShellWindow;

View file

@ -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;

View file

@ -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

View file

@ -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;
}

View file

@ -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;
}
}

View file

@ -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
{

View file

@ -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);