- [Win32k] Removed W32THREADINFO.

- Tested AbiWord, User32 wine tests. Yes, of course, this needs more testing.


svn path=/trunk/; revision=42746
This commit is contained in:
James Tabor 2009-08-16 21:44:59 +00:00
parent c365f1c1bb
commit 46af179093
20 changed files with 80 additions and 168 deletions

View file

@ -100,7 +100,7 @@ IsThreadHooked(PCLIENTINFO pci)
static __inline PDESKTOPINFO static __inline PDESKTOPINFO
GetThreadDesktopInfo(VOID) GetThreadDesktopInfo(VOID)
{ {
PW32THREADINFO ti; PTHREADINFO ti;
PDESKTOPINFO di = NULL; PDESKTOPINFO di = NULL;
ti = GetW32ThreadInfo(); ti = GetW32ThreadInfo();

View file

@ -199,7 +199,7 @@ typedef struct _USER_HANDLE_ENTRY
union union
{ {
PVOID pi; PVOID pi;
PW32THREADINFO pti; // pointer to Win32ThreadInfo PTHREADINFO pti; // pointer to Win32ThreadInfo
PPROCESSINFO ppi; // pointer to W32ProcessInfo PPROCESSINFO ppi; // pointer to W32ProcessInfo
}; };
unsigned short type; /* object type (0 if free) */ unsigned short type; /* object type (0 if free) */

View file

@ -335,7 +335,7 @@ GetConnected(VOID)
USERCONNECT UserCon; USERCONNECT UserCon;
// ERR("GetConnected\n"); // ERR("GetConnected\n");
if ((PW32THREADINFO)NtCurrentTeb()->Win32ThreadInfo == NULL) if ((PTHREADINFO)NtCurrentTeb()->Win32ThreadInfo == NULL)
NtUserGetThreadState(THREADSTATE_GETTHREADINFO); NtUserGetThreadState(THREADSTATE_GETTHREADINFO);
if (gpsi && g_ppi) return; if (gpsi && g_ppi) return;

View file

@ -104,17 +104,17 @@ UpdatePerUserSystemParameters(
return NtUserUpdatePerUserSystemParameters(dwReserved, bEnable); return NtUserUpdatePerUserSystemParameters(dwReserved, bEnable);
} }
PW32THREADINFO PTHREADINFO
GetW32ThreadInfo(VOID) GetW32ThreadInfo(VOID)
{ {
PW32THREADINFO ti; PTHREADINFO ti;
ti = (PW32THREADINFO)NtCurrentTeb()->Win32ThreadInfo; ti = (PTHREADINFO)NtCurrentTeb()->Win32ThreadInfo;
if (ti == NULL) if (ti == NULL)
{ {
/* create the W32THREADINFO structure */ /* create the THREADINFO structure */
NtUserGetThreadState(THREADSTATE_GETTHREADINFO); NtUserGetThreadState(THREADSTATE_GETTHREADINFO);
ti = (PW32THREADINFO)NtCurrentTeb()->Win32ThreadInfo; ti = (PTHREADINFO)NtCurrentTeb()->Win32ThreadInfo;
} }
return ti; return ti;
@ -250,13 +250,13 @@ WINAPI
IsGUIThread( IsGUIThread(
BOOL bConvert) BOOL bConvert)
{ {
PW32THREADINFO ti = (PW32THREADINFO)NtCurrentTeb()->Win32ThreadInfo; PTHREADINFO ti = (PTHREADINFO)NtCurrentTeb()->Win32ThreadInfo;
if (ti == NULL) if (ti == NULL)
{ {
if(bConvert) if(bConvert)
{ {
NtUserGetThreadState(THREADSTATE_GETTHREADINFO); NtUserGetThreadState(THREADSTATE_GETTHREADINFO);
if ((PW32THREADINFO)NtCurrentTeb()->Win32ThreadInfo) return TRUE; if ((PTHREADINFO)NtCurrentTeb()->Win32ThreadInfo) return TRUE;
else else
SetLastError(ERROR_NOT_ENOUGH_MEMORY); SetLastError(ERROR_NOT_ENOUGH_MEMORY);
} }
@ -270,7 +270,7 @@ BOOL
FASTCALL FASTCALL
TestWindowProcess(PWND Wnd) TestWindowProcess(PWND Wnd)
{ {
if (Wnd->head.pti == (PW32THREADINFO)NtCurrentTeb()->Win32ThreadInfo) if (Wnd->head.pti == (PTHREADINFO)NtCurrentTeb()->Win32ThreadInfo)
return TRUE; return TRUE;
else else
return (NtUserQueryWindow(Wnd->head.h, QUERY_WINDOW_UNIQUE_PROCESS_ID) == return (NtUserQueryWindow(Wnd->head.h, QUERY_WINDOW_UNIQUE_PROCESS_ID) ==

View file

@ -369,7 +369,7 @@ WINAPI
IsWinEventHookInstalled( IsWinEventHookInstalled(
DWORD event) DWORD event)
{ {
if ((PW32THREADINFO)NtCurrentTeb()->Win32ThreadInfo) if ((PTHREADINFO)NtCurrentTeb()->Win32ThreadInfo)
{ {
return (gpsi->dwInstalledEventHooks & GetMaskFromEvent(event)) != 0; return (gpsi->dwInstalledEventHooks & GetMaskFromEvent(event)) != 0;
} }

View file

@ -1333,7 +1333,7 @@ DispatchMessageA(CONST MSG *lpmsg)
if (lpmsg->hwnd != NULL) if (lpmsg->hwnd != NULL)
{ {
Wnd = ValidateHwnd(lpmsg->hwnd); Wnd = ValidateHwnd(lpmsg->hwnd);
if (!Wnd || SharedPtrToUser(Wnd->head.pti) != GetW32ThreadInfo()) if (!Wnd || Wnd->head.pti != GetW32ThreadInfo())
return 0; return 0;
} }
else else
@ -1394,7 +1394,7 @@ DispatchMessageW(CONST MSG *lpmsg)
if (lpmsg->hwnd != NULL) if (lpmsg->hwnd != NULL)
{ {
Wnd = ValidateHwnd(lpmsg->hwnd); Wnd = ValidateHwnd(lpmsg->hwnd);
if (!Wnd || SharedPtrToUser(Wnd->head.pti) != GetW32ThreadInfo()) if (!Wnd || Wnd->head.pti != GetW32ThreadInfo())
return 0; return 0;
} }
else else
@ -1791,10 +1791,10 @@ SendMessageW(HWND Wnd,
if (Wnd != HWND_BROADCAST && (Msg < WM_DDE_FIRST || Msg > WM_DDE_LAST)) if (Wnd != HWND_BROADCAST && (Msg < WM_DDE_FIRST || Msg > WM_DDE_LAST))
{ {
PWND Window; PWND Window;
PW32THREADINFO ti = GetW32ThreadInfo(); PTHREADINFO ti = GetW32ThreadInfo();
Window = ValidateHwnd(Wnd); Window = ValidateHwnd(Wnd);
if (Window != NULL && SharedPtrToUser(Window->head.pti) == ti && !IsThreadHooked(GetWin32ClientInfo())) if (Window != NULL && Window->head.pti == ti && !IsThreadHooked(GetWin32ClientInfo()))
{ {
/* NOTE: We can directly send messages to the window procedure /* NOTE: We can directly send messages to the window procedure
if *all* the following conditions are met: if *all* the following conditions are met:
@ -1855,10 +1855,10 @@ SendMessageA(HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam)
if (Wnd != HWND_BROADCAST && (Msg < WM_DDE_FIRST || Msg > WM_DDE_LAST)) if (Wnd != HWND_BROADCAST && (Msg < WM_DDE_FIRST || Msg > WM_DDE_LAST))
{ {
PWND Window; PWND Window;
PW32THREADINFO ti = GetW32ThreadInfo(); PTHREADINFO ti = GetW32ThreadInfo();
Window = ValidateHwnd(Wnd); Window = ValidateHwnd(Wnd);
if (Window != NULL && SharedPtrToUser(Window->head.pti) == ti && !IsThreadHooked(GetWin32ClientInfo())) if (Window != NULL && Window->head.pti == ti && !IsThreadHooked(GetWin32ClientInfo()))
{ {
/* NOTE: We can directly send messages to the window procedure /* NOTE: We can directly send messages to the window procedure
if *all* the following conditions are met: if *all* the following conditions are met:

View file

@ -1316,12 +1316,12 @@ GetWindowThreadProcessId(HWND hWnd,
LPDWORD lpdwProcessId) LPDWORD lpdwProcessId)
{ {
DWORD Ret = 0; DWORD Ret = 0;
PW32THREADINFO ti; PTHREADINFO ti;
PWND pWnd = ValidateHwnd(hWnd); PWND pWnd = ValidateHwnd(hWnd);
if (!pWnd) return Ret; if (!pWnd) return Ret;
ti = SharedPtrToUser(pWnd->head.pti); ti = pWnd->head.pti;
if (ti) if (ti)
{ {

View file

@ -2,6 +2,7 @@
#define __WIN32K_NTUSER_H #define __WIN32K_NTUSER_H
typedef struct _PROCESSINFO *PPROCESSINFO; typedef struct _PROCESSINFO *PPROCESSINFO;
typedef struct _THREADINFO *PTHREADINFO;
struct _DESKTOP; struct _DESKTOP;
struct _WND; struct _WND;
@ -72,13 +73,6 @@ typedef struct _CLIENTTHREADINFO
DWORD dwcPumpHook; DWORD dwcPumpHook;
} CLIENTTHREADINFO, *PCLIENTTHREADINFO; } CLIENTTHREADINFO, *PCLIENTTHREADINFO;
typedef struct _W32THREADINFO
{
PPROCESSINFO ppi; /* [KERNEL] */
PDESKTOPINFO pDeskInfo;
ULONG fsHooks;
} W32THREADINFO, *PW32THREADINFO;
typedef struct _HEAD typedef struct _HEAD
{ {
HANDLE h; HANDLE h;
@ -88,7 +82,7 @@ typedef struct _HEAD
typedef struct _THROBJHEAD typedef struct _THROBJHEAD
{ {
HEAD; HEAD;
PW32THREADINFO pti; PTHREADINFO pti;
} THROBJHEAD, *PTHROBJHEAD; } THROBJHEAD, *PTHROBJHEAD;
typedef struct _THRDESKHEAD typedef struct _THRDESKHEAD
@ -701,7 +695,7 @@ typedef struct _BROADCASTPARM
LUID luid; LUID luid;
} BROADCASTPARM, *PBROADCASTPARM; } BROADCASTPARM, *PBROADCASTPARM;
PW32THREADINFO GetW32ThreadInfo(VOID); PTHREADINFO GetW32ThreadInfo(VOID);
PPROCESSINFO GetW32ProcessInfo(VOID); PPROCESSINFO GetW32ProcessInfo(VOID);
typedef struct _WNDMSG typedef struct _WNDMSG

View file

@ -22,7 +22,7 @@ typedef struct _USER_HANDLE_ENTRY
union union
{ {
PVOID pi; PVOID pi;
PW32THREADINFO pti; // pointer to Win32ThreadInfo PTHREADINFO pti; // pointer to Win32ThreadInfo
PPROCESSINFO ppi; // pointer to W32ProcessInfo PPROCESSINFO ppi; // pointer to W32ProcessInfo
}; };
unsigned short type; /* object type (0 if free) */ unsigned short type; /* object type (0 if free) */

View file

@ -88,8 +88,7 @@ typedef struct _THREADINFO
LIST_ENTRY W32CallbackListHead; LIST_ENTRY W32CallbackListHead;
BOOLEAN IsExiting; BOOLEAN IsExiting;
SINGLE_LIST_ENTRY ReferencesList; SINGLE_LIST_ENTRY ReferencesList;
PW32THREADINFO ThreadInfo; } THREADINFO;
} THREADINFO, *PTHREADINFO;
#include <poppack.h> #include <poppack.h>

View file

@ -26,7 +26,7 @@ typedef struct _WINDOW_OBJECT
PWND Wnd; PWND Wnd;
/* Pointer to the thread information */ /* Pointer to the thread information */
PW32THREADINFO ti; PTHREADINFO ti;
/* Pointer to the desktop */ /* Pointer to the desktop */
PDESKTOPINFO Desktop; PDESKTOPINFO Desktop;
/* system menu handle. */ /* system menu handle. */

View file

@ -306,12 +306,6 @@ Win32kThreadCallback(struct _ETHREAD *Thread,
IntSetThreadDesktop(NULL, IntSetThreadDesktop(NULL,
TRUE); TRUE);
if (Win32Thread->ThreadInfo != NULL)
{
UserHeapFree(Win32Thread->ThreadInfo);
Win32Thread->ThreadInfo = NULL;
}
PsSetThreadWin32Thread(Thread, NULL); PsSetThreadWin32Thread(Thread, NULL);
} }

View file

@ -1171,7 +1171,6 @@ UserRegisterClass(IN CONST WNDCLASSEXW* lpwcx,
IN DWORD dwFlags) IN DWORD dwFlags)
{ {
PTHREADINFO pti; PTHREADINFO pti;
PW32THREADINFO ti;
PPROCESSINFO pi; PPROCESSINFO pi;
PCLS Class; PCLS Class;
RTL_ATOM ClassAtom; RTL_ATOM ClassAtom;
@ -1179,15 +1178,14 @@ UserRegisterClass(IN CONST WNDCLASSEXW* lpwcx,
/* NOTE: Accessing the buffers in ClassName and MenuName may raise exceptions! */ /* NOTE: Accessing the buffers in ClassName and MenuName may raise exceptions! */
pti = PsGetCurrentThreadWin32Thread(); pti = GetW32ThreadInfo();
ti = GetW32ThreadInfo(); if (pti == NULL || !RegisteredSysClasses)
if (ti == NULL || !RegisteredSysClasses)
{ {
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY); SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
return (RTL_ATOM)0; return (RTL_ATOM)0;
} }
pi = ti->ppi; pi = pti->ppi;
/* try to find a previously registered class */ /* try to find a previously registered class */
ClassAtom = IntGetClassAtom(ClassName, ClassAtom = IntGetClassAtom(ClassName,

View file

@ -1846,7 +1846,7 @@ CLEANUP:
static NTSTATUS static NTSTATUS
IntUnmapDesktopView(IN PDESKTOP DesktopObject) IntUnmapDesktopView(IN PDESKTOP DesktopObject)
{ {
PW32THREADINFO ti; PTHREADINFO ti;
PPROCESSINFO CurrentWin32Process; PPROCESSINFO CurrentWin32Process;
PW32HEAP_USER_MAPPING HeapMapping, *PrevLink; PW32HEAP_USER_MAPPING HeapMapping, *PrevLink;
NTSTATUS Status = STATUS_SUCCESS; NTSTATUS Status = STATUS_SUCCESS;
@ -1883,10 +1883,6 @@ IntUnmapDesktopView(IN PDESKTOP DesktopObject)
ti = GetW32ThreadInfo(); ti = GetW32ThreadInfo();
if (ti != NULL) if (ti != NULL)
{ {
if (ti->pDeskInfo == DesktopObject->DesktopInfo)
{
ti->pDeskInfo = NULL;
}
GetWin32ClientInfo()->pDeskInfo = NULL; GetWin32ClientInfo()->pDeskInfo = NULL;
} }
GetWin32ClientInfo()->ulClientDelta = 0; GetWin32ClientInfo()->ulClientDelta = 0;
@ -1897,7 +1893,7 @@ IntUnmapDesktopView(IN PDESKTOP DesktopObject)
static NTSTATUS static NTSTATUS
IntMapDesktopView(IN PDESKTOP DesktopObject) IntMapDesktopView(IN PDESKTOP DesktopObject)
{ {
PW32THREADINFO ti; PTHREADINFO ti;
PPROCESSINFO CurrentWin32Process; PPROCESSINFO CurrentWin32Process;
PW32HEAP_USER_MAPPING HeapMapping, *PrevLink; PW32HEAP_USER_MAPPING HeapMapping, *PrevLink;
PVOID UserBase = NULL; PVOID UserBase = NULL;
@ -1965,11 +1961,11 @@ IntMapDesktopView(IN PDESKTOP DesktopObject)
GetWin32ClientInfo()->ulClientDelta = DesktopHeapGetUserDelta(); GetWin32ClientInfo()->ulClientDelta = DesktopHeapGetUserDelta();
if (ti != NULL) if (ti != NULL)
{ {
if (ti->pDeskInfo == NULL) if (GetWin32ClientInfo()->pDeskInfo == NULL)
{ {
ti->pDeskInfo = DesktopObject->DesktopInfo;
GetWin32ClientInfo()->pDeskInfo = GetWin32ClientInfo()->pDeskInfo =
(PVOID)((ULONG_PTR)ti->pDeskInfo - GetWin32ClientInfo()->ulClientDelta); (PVOID)((ULONG_PTR)DesktopObject->DesktopInfo -
GetWin32ClientInfo()->ulClientDelta);
} }
} }
@ -2012,15 +2008,6 @@ IntSetThreadDesktop(IN PDESKTOP DesktopObject,
} }
} }
if (W32Thread->Desktop == NULL)
{
PW32THREADINFO ti = GetW32ThreadInfo();
if (ti != NULL)
{
ti->pDeskInfo = NULL;
}
}
/* Hack for system threads */ /* Hack for system threads */
if (NtCurrentTeb()) if (NtCurrentTeb())
{ {

View file

@ -117,9 +117,6 @@ IntAddHook(PETHREAD Thread, int HookId, BOOLEAN Global, PWINSTATION_OBJECT WinSt
W32Thread->fsHooks |= HOOKID_TO_FLAG(HookId); W32Thread->fsHooks |= HOOKID_TO_FLAG(HookId);
GetWin32ClientInfo()->fsHooks = W32Thread->fsHooks; GetWin32ClientInfo()->fsHooks = W32Thread->fsHooks;
if (W32Thread->ThreadInfo != NULL)
W32Thread->ThreadInfo->fsHooks = W32Thread->fsHooks;
} }
RtlInitUnicodeString(&Hook->ModuleName, NULL); RtlInitUnicodeString(&Hook->ModuleName, NULL);
@ -243,9 +240,6 @@ IntRemoveHook(PHOOK Hook, PWINSTATION_OBJECT WinStaObj, BOOL TableAlreadyLocked)
GetWin32ClientInfo()->fsHooks = W32Thread->fsHooks; GetWin32ClientInfo()->fsHooks = W32Thread->fsHooks;
if (W32Thread->ThreadInfo != NULL)
W32Thread->ThreadInfo->fsHooks = W32Thread->fsHooks;
if (0 != Table->Counts[HOOKID_TO_INDEX(Hook->HookId)]) if (0 != Table->Counts[HOOKID_TO_INDEX(Hook->HookId)])
{ {
Hook->Proc = NULL; /* chain is in use, just mark it and return */ Hook->Proc = NULL; /* chain is in use, just mark it and return */

View file

@ -1,21 +1,3 @@
/*
* ReactOS W32 Subsystem
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 ReactOS Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* /*
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -307,7 +289,7 @@ IntCallWndProc
{ {
BOOL SameThread = FALSE; BOOL SameThread = FALSE;
if (Window->ti == ((PTHREADINFO)PsGetCurrentThreadWin32Thread())->ThreadInfo) if (Window->ti == ((PTHREADINFO)PsGetCurrentThreadWin32Thread()))
SameThread = TRUE; SameThread = TRUE;
if ((!SameThread && (Window->ti->fsHooks & HOOKID_TO_FLAG(WH_CALLWNDPROC))) || if ((!SameThread && (Window->ti->fsHooks & HOOKID_TO_FLAG(WH_CALLWNDPROC))) ||
@ -329,7 +311,7 @@ IntCallWndProcRet
{ {
BOOL SameThread = FALSE; BOOL SameThread = FALSE;
if (Window->ti == ((PTHREADINFO)PsGetCurrentThreadWin32Thread())->ThreadInfo) if (Window->ti == ((PTHREADINFO)PsGetCurrentThreadWin32Thread()))
SameThread = TRUE; SameThread = TRUE;
if ((!SameThread && (Window->ti->fsHooks & HOOKID_TO_FLAG(WH_CALLWNDPROCRET))) || if ((!SameThread && (Window->ti->fsHooks & HOOKID_TO_FLAG(WH_CALLWNDPROCRET))) ||

View file

@ -451,11 +451,10 @@ GetW32ProcessInfo(VOID)
return (PPROCESSINFO)PsGetCurrentProcessWin32Process(); return (PPROCESSINFO)PsGetCurrentProcessWin32Process();
} }
PW32THREADINFO PTHREADINFO
GetW32ThreadInfo(VOID) GetW32ThreadInfo(VOID)
{ {
PTEB Teb; PTEB Teb;
PW32THREADINFO ti;
PPROCESSINFO ppi; PPROCESSINFO ppi;
PCLIENTINFO pci; PCLIENTINFO pci;
PTHREADINFO pti = PsGetCurrentThreadWin32Thread(); PTHREADINFO pti = PsGetCurrentThreadWin32Thread();
@ -465,41 +464,30 @@ GetW32ThreadInfo(VOID)
/* FIXME - temporary hack for system threads... */ /* FIXME - temporary hack for system threads... */
return NULL; return NULL;
} }
/* allocate a THREADINFO structure if neccessary */
if (pti->ThreadInfo == NULL)
{
ti = UserHeapAlloc(sizeof(W32THREADINFO));
if (ti != NULL)
{
RtlZeroMemory(ti,
sizeof(W32THREADINFO));
/* initialize it */ /* initialize it */
ti->ppi = ppi = GetW32ProcessInfo(); pti->ppi = ppi = GetW32ProcessInfo();
ti->fsHooks = pti->fsHooks;
pti->pcti = &pti->cti; // FIXME Need to set it in desktop.c! pti->pcti = &pti->cti; // FIXME Need to set it in desktop.c!
if (pti->Desktop != NULL) if (pti->Desktop != NULL)
{ {
pti->pDeskInfo = ti->pDeskInfo = pti->Desktop->DesktopInfo; pti->pDeskInfo = pti->Desktop->DesktopInfo;
} }
else else
{ {
pti->pDeskInfo = ti->pDeskInfo = NULL; pti->pDeskInfo = NULL;
} }
pti->ThreadInfo = ti;
/* update the TEB */ /* update the TEB */
Teb = NtCurrentTeb(); Teb = NtCurrentTeb();
pci = GetWin32ClientInfo(); pci = GetWin32ClientInfo();
pti->pClientInfo = pci; pti->pClientInfo = pci;
_SEH2_TRY _SEH2_TRY
{ {
ProbeForWrite(Teb, ProbeForWrite( Teb,
sizeof(TEB), sizeof(TEB),
sizeof(ULONG)); sizeof(ULONG));
Teb->Win32ThreadInfo = UserHeapAddressToUser(pti->ThreadInfo); Teb->Win32ThreadInfo = (PW32THREAD) pti;
pci->pClientThreadInfo = NULL; // FIXME Need to set it in desktop.c! pci->pClientThreadInfo = NULL; // FIXME Need to set it in desktop.c!
pci->ppi = ppi; pci->ppi = ppi;
@ -509,8 +497,7 @@ GetW32ThreadInfo(VOID)
{ {
if (!pci->ulClientDelta) pci->ulClientDelta = DesktopHeapGetUserDelta(); if (!pci->ulClientDelta) pci->ulClientDelta = DesktopHeapGetUserDelta();
pci->pDeskInfo = pci->pDeskInfo = (PVOID)((ULONG_PTR)pti->pDeskInfo - pci->ulClientDelta);
(PVOID)((ULONG_PTR)pti->pDeskInfo - pci->ulClientDelta);
} }
} }
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
@ -518,14 +505,8 @@ GetW32ThreadInfo(VOID)
SetLastNtError(_SEH2_GetExceptionCode()); SetLastNtError(_SEH2_GetExceptionCode());
} }
_SEH2_END; _SEH2_END;
}
else
{
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
}
}
return pti->ThreadInfo; return pti;
} }

View file

@ -164,7 +164,7 @@ NtUserCallOneParam(
case ONEPARAM_ROUTINE_GETDESKTOPMAPPING: case ONEPARAM_ROUTINE_GETDESKTOPMAPPING:
{ {
PW32THREADINFO ti; PTHREADINFO ti;
ti = GetW32ThreadInfo(); ti = GetW32ThreadInfo();
if (ti != NULL) if (ti != NULL)
{ {

View file

@ -1,21 +1,3 @@
/*
* ReactOS W32 Subsystem
* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003 ReactOS Team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/* /*
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -162,7 +144,8 @@ ValidateTimerCallback(PTHREADINFO pti,
{ {
if ( (lParam == (LPARAM)pTmr->pfn) && if ( (lParam == (LPARAM)pTmr->pfn) &&
(pTmr->flags & (TMRF_SYSTEM|TMRF_RIT)) && (pTmr->flags & (TMRF_SYSTEM|TMRF_RIT)) &&
(pTmr->pti->ThreadInfo->ppi == pti->ThreadInfo->ppi) ) // (pTmr->head.pti->ppi == pti->ppi) )
(pTmr->pti->ppi == pti->ppi) )
break; break;
pTmr = (PTIMER)pTmr->ptmrList.Flink; pTmr = (PTIMER)pTmr->ptmrList.Flink;

View file

@ -103,7 +103,7 @@ PWINDOW_OBJECT FASTCALL IntGetWindowObject(HWND hWnd)
/* temp hack */ /* temp hack */
PWINDOW_OBJECT FASTCALL UserGetWindowObject(HWND hWnd) PWINDOW_OBJECT FASTCALL UserGetWindowObject(HWND hWnd)
{ {
PW32THREADINFO ti; PTHREADINFO ti;
PWINDOW_OBJECT Window; PWINDOW_OBJECT Window;
if (PsGetCurrentProcess() != PsInitialSystemProcess) if (PsGetCurrentProcess() != PsInitialSystemProcess)
@ -314,7 +314,7 @@ static void IntSendDestroyMsg(HWND hWnd)
} }
static VOID static VOID
UserFreeWindowInfo(PW32THREADINFO ti, PWINDOW_OBJECT WindowObject) UserFreeWindowInfo(PTHREADINFO ti, PWINDOW_OBJECT WindowObject)
{ {
PCLIENTINFO ClientInfo = GetWin32ClientInfo(); PCLIENTINFO ClientInfo = GetWin32ClientInfo();
PWND Wnd = WindowObject->Wnd; PWND Wnd = WindowObject->Wnd;
@ -1551,7 +1551,7 @@ co_IntCreateWindowEx(DWORD dwExStyle,
HWND hWnd; HWND hWnd;
POINT Pos; POINT Pos;
SIZE Size; SIZE Size;
PW32THREADINFO ti = NULL; PTHREADINFO ti = NULL;
#if 0 #if 0
POINT MaxSize, MaxPos, MinTrack, MaxTrack; POINT MaxSize, MaxPos, MinTrack, MaxTrack;
@ -3311,7 +3311,7 @@ NtUserSetShellWindowEx(HWND hwndShell, HWND hwndListView)
DECLARE_RETURN(BOOL); DECLARE_RETURN(BOOL);
USER_REFERENCE_ENTRY Ref; USER_REFERENCE_ENTRY Ref;
NTSTATUS Status; NTSTATUS Status;
PW32THREADINFO ti; PTHREADINFO ti;
DPRINT("Enter NtUserSetShellWindowEx\n"); DPRINT("Enter NtUserSetShellWindowEx\n");
UserEnterExclusive(); UserEnterExclusive();