Win32 structure cleanup (WIP):

- Use CLIENTINFO.ulClientDelta instead of W32THREADINFO.DesktopHeapDelta
- Remove DesktopHeapDelta from W32THREADINFO- Add PtiList to DESKTOP
- Add pClientInfo to THREADINFO

svn path=/trunk/; revision=36800
This commit is contained in:
Timo Kreuzer 2008-10-17 21:07:24 +00:00
parent eed100a55c
commit 9353696890
6 changed files with 17 additions and 8 deletions

View file

@ -65,12 +65,14 @@ static __inline PVOID
DesktopPtrToUser(PVOID Ptr)
{
PW32THREADINFO ti = GetW32ThreadInfo();
PCLIENTINFO pci = GetWin32ClientInfo();
ASSERT(Ptr != NULL);
ASSERT(ti != NULL);
if ((ULONG_PTR)Ptr >= (ULONG_PTR)ti->DesktopHeapBase &&
(ULONG_PTR)Ptr < (ULONG_PTR)ti->DesktopHeapBase + ti->DesktopHeapLimit)
{
return (PVOID)((ULONG_PTR)Ptr - ti->DesktopHeapDelta);
return (PVOID)((ULONG_PTR)Ptr - pci->ulClientDelta);
}
else
{

View file

@ -312,7 +312,6 @@ typedef struct _W32THREADINFO
PDESKTOPINFO Desktop;
PVOID DesktopHeapBase;
ULONG_PTR DesktopHeapLimit;
ULONG_PTR DesktopHeapDelta;
/* A mask of what hooks are currently active */
ULONG Hooks;
CLIENTTHREADINFO ClientThreadInfo;

View file

@ -10,6 +10,8 @@ typedef struct _DESKTOP
CSHORT Size;
LIST_ENTRY ListEntry;
LIST_ENTRY PtiList;
/* Pointer to the associated window station. */
struct _WINSTATION_OBJECT *WindowStation;
/* Pointer to the active queue. */
@ -203,7 +205,9 @@ DesktopHeapGetUserDelta(VOID)
ULONG_PTR Delta = 0;
pti = PsGetCurrentThreadWin32Thread();
ASSERT(pti->Desktop != NULL);
if (!pti->Desktop)
return 0;
hDesktopHeap = pti->Desktop->hDesktopHeap;
Mapping = PsGetCurrentProcessWin32Process()->HeapMappings.Next;

View file

@ -28,6 +28,7 @@ typedef struct _THREADINFO
{
W32THREAD W32Thread;
PDESKTOPINFO pDeskInfo;
PCLIENTINFO pClientInfo;
LIST_ENTRY PtiLink;
struct _USER_MESSAGE_QUEUE* MessageQueue;

View file

@ -1768,9 +1768,9 @@ IntUnmapDesktopView(IN PDESKTOP DesktopObject)
ti->Desktop = NULL;
ti->DesktopHeapBase = NULL;
ti->DesktopHeapLimit = 0;
ti->DesktopHeapDelta = 0;
}
}
GetWin32ClientInfo()->ulClientDelta = 0;
return Status;
}
@ -1846,9 +1846,9 @@ IntMapDesktopView(IN PDESKTOP DesktopObject)
ti->Desktop = DesktopObject->DesktopInfo;
ti->DesktopHeapBase = DesktopObject->hDesktopHeap;
ti->DesktopHeapLimit = ViewSize;
ti->DesktopHeapDelta = DesktopHeapGetUserDelta();
}
}
GetWin32ClientInfo()->ulClientDelta = DesktopHeapGetUserDelta();
return STATUS_SUCCESS;
}
@ -1895,10 +1895,15 @@ IntSetThreadDesktop(IN PDESKTOP DesktopObject,
if (ti != NULL)
{
ti->Desktop = NULL;
ti->DesktopHeapDelta = 0;
}
}
/* Hack for system threads */
if (NtCurrentTeb())
{
GetWin32ClientInfo()->ulClientDelta = DesktopHeapGetUserDelta();
}
if (OldDesktop != NULL &&
!IntCheckProcessDesktopClasses(OldDesktop->DesktopInfo,
FreeOnFailure))

View file

@ -464,14 +464,12 @@ GetW32ThreadInfo(VOID)
ti->Desktop = W32Thread->Desktop->DesktopInfo;
ti->DesktopHeapBase = W32Thread->Desktop->DesktopInfo->hKernelHeap;
ti->DesktopHeapLimit = W32Thread->Desktop->DesktopInfo->HeapLimit;
ti->DesktopHeapDelta = DesktopHeapGetUserDelta();
}
else
{
ti->Desktop = NULL;
ti->DesktopHeapBase = NULL;
ti->DesktopHeapLimit = 0;
ti->DesktopHeapDelta = 0;
}
W32Thread->ThreadInfo = ti;