mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 17:34:57 +00:00
- Update CLIENTTHREADINFO structure
- Rename W32CLIENTINFO to CLIENTINFO and update members - C_ASERT that CLIENTINFO fits into the TEB svn path=/trunk/; revision=36753
This commit is contained in:
parent
c064c14ced
commit
a075ba41c2
9 changed files with 50 additions and 40 deletions
|
@ -462,12 +462,12 @@ FASTCALL
|
||||||
ValidateHwnd(HWND hwnd)
|
ValidateHwnd(HWND hwnd)
|
||||||
{
|
{
|
||||||
PWINDOW Wnd;
|
PWINDOW Wnd;
|
||||||
PW32CLIENTINFO ClientInfo = GetWin32ClientInfo();
|
PCLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||||
ASSERT(ClientInfo != NULL);
|
ASSERT(ClientInfo != NULL);
|
||||||
|
|
||||||
/* See if the window is cached */
|
/* See if the window is cached */
|
||||||
if (hwnd == ClientInfo->hWND)
|
if (hwnd == ClientInfo->CallbackWnd.hWnd)
|
||||||
return ClientInfo->pvWND;
|
return ClientInfo->CallbackWnd.pvWnd;
|
||||||
|
|
||||||
Wnd = ValidateHandle((HANDLE)hwnd, VALIDATE_TYPE_WIN);
|
Wnd = ValidateHandle((HANDLE)hwnd, VALIDATE_TYPE_WIN);
|
||||||
if (Wnd != NULL)
|
if (Wnd != NULL)
|
||||||
|
@ -501,12 +501,12 @@ FASTCALL
|
||||||
ValidateHwndNoErr(HWND hwnd)
|
ValidateHwndNoErr(HWND hwnd)
|
||||||
{
|
{
|
||||||
PWINDOW Wnd;
|
PWINDOW Wnd;
|
||||||
PW32CLIENTINFO ClientInfo = GetWin32ClientInfo();
|
PCLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||||
ASSERT(ClientInfo != NULL);
|
ASSERT(ClientInfo != NULL);
|
||||||
|
|
||||||
/* See if the window is cached */
|
/* See if the window is cached */
|
||||||
if (hwnd == ClientInfo->hWND)
|
if (hwnd == ClientInfo->CallbackWnd.hWnd)
|
||||||
return ClientInfo->pvWND;
|
return ClientInfo->CallbackWnd.pvWnd;
|
||||||
|
|
||||||
Wnd = ValidateHandleNoErr((HANDLE)hwnd, VALIDATE_TYPE_WIN);
|
Wnd = ValidateHandleNoErr((HANDLE)hwnd, VALIDATE_TYPE_WIN);
|
||||||
if (Wnd != NULL)
|
if (Wnd != NULL)
|
||||||
|
|
|
@ -193,7 +193,7 @@ CallNextHookEx(
|
||||||
WPARAM wParam,
|
WPARAM wParam,
|
||||||
LPARAM lParam)
|
LPARAM lParam)
|
||||||
{
|
{
|
||||||
PW32CLIENTINFO ClientInfo;
|
PCLIENTINFO ClientInfo;
|
||||||
DWORD Flags, Save;
|
DWORD Flags, Save;
|
||||||
PHOOK pHook;
|
PHOOK pHook;
|
||||||
LRESULT lResult = 0;
|
LRESULT lResult = 0;
|
||||||
|
|
|
@ -1081,7 +1081,7 @@ BOOL
|
||||||
STDCALL
|
STDCALL
|
||||||
InSendMessage(VOID)
|
InSendMessage(VOID)
|
||||||
{
|
{
|
||||||
PCLIENTTHREADINFO pcti = ((PW32CLIENTINFO)GetWin32ClientInfo())->pClientThreadInfo;
|
PCLIENTTHREADINFO pcti = GetWin32ClientInfo()->pClientThreadInfo;
|
||||||
// FIXME("ISM %x\n",pcti);
|
// FIXME("ISM %x\n",pcti);
|
||||||
if ( pcti )
|
if ( pcti )
|
||||||
{
|
{
|
||||||
|
@ -1103,7 +1103,7 @@ STDCALL
|
||||||
InSendMessageEx(
|
InSendMessageEx(
|
||||||
LPVOID lpReserved)
|
LPVOID lpReserved)
|
||||||
{
|
{
|
||||||
PCLIENTTHREADINFO pcti = ((PW32CLIENTINFO)GetWin32ClientInfo())->pClientThreadInfo;
|
PCLIENTTHREADINFO pcti = GetWin32ClientInfo()->pClientThreadInfo;
|
||||||
// FIXME("ISMEX %x\n",pcti);
|
// FIXME("ISMEX %x\n",pcti);
|
||||||
if (pcti && !(pcti->CTI_flags & CTI_INSENDMESSAGE)) return ISMEX_NOSEND;
|
if (pcti && !(pcti->CTI_flags & CTI_INSENDMESSAGE)) return ISMEX_NOSEND;
|
||||||
else
|
else
|
||||||
|
@ -2336,7 +2336,7 @@ DWORD gfMessagePumpHook = 0;
|
||||||
|
|
||||||
BOOL WINAPI IsInsideMessagePumpHook()
|
BOOL WINAPI IsInsideMessagePumpHook()
|
||||||
{ // Fixme: Need to fully implement this! FF uses this and polls it when Min/Max
|
{ // Fixme: Need to fully implement this! FF uses this and polls it when Min/Max
|
||||||
PCLIENTTHREADINFO pcti = ((PW32CLIENTINFO)GetWin32ClientInfo())->pClientThreadInfo;
|
PCLIENTTHREADINFO pcti = GetWin32ClientInfo()->pClientThreadInfo;
|
||||||
// FIXME("IIMPH %x\n",pcti);
|
// FIXME("IIMPH %x\n",pcti);
|
||||||
return (gfMessagePumpHook && pcti && (pcti->dwcPumpHook > 0));
|
return (gfMessagePumpHook && pcti && (pcti->dwcPumpHook > 0));
|
||||||
}
|
}
|
||||||
|
|
|
@ -297,6 +297,11 @@ typedef struct _W32PROCESSINFO
|
||||||
typedef struct _CLIENTTHREADINFO
|
typedef struct _CLIENTTHREADINFO
|
||||||
{
|
{
|
||||||
DWORD CTI_flags;
|
DWORD CTI_flags;
|
||||||
|
WORD fsChangeBits;
|
||||||
|
WORD fsWakeBits;
|
||||||
|
WORD fsWakeBitsJournal;
|
||||||
|
WORD fsWakeMask;
|
||||||
|
LONG timeLastRead;
|
||||||
DWORD dwcPumpHook;
|
DWORD dwcPumpHook;
|
||||||
} CLIENTTHREADINFO, *PCLIENTTHREADINFO;
|
} CLIENTTHREADINFO, *PCLIENTTHREADINFO;
|
||||||
|
|
||||||
|
@ -340,34 +345,39 @@ typedef struct _CALLBACKWND
|
||||||
|
|
||||||
#define CI_CURTHPRHOOK 0x00000010
|
#define CI_CURTHPRHOOK 0x00000010
|
||||||
|
|
||||||
typedef struct _W32CLIENTINFO
|
typedef struct _CLIENTINFO
|
||||||
{
|
{
|
||||||
ULONG CI_flags;
|
ULONG CI_flags;
|
||||||
ULONG cSpins;
|
ULONG cSpins;
|
||||||
ULONG ulWindowsVersion;
|
DWORD dwExpWinVer;
|
||||||
ULONG ulAppCompatFlags;
|
DWORD dwCompatFlags;
|
||||||
ULONG ulAppCompatFlags2;
|
DWORD dwCompatFlags2;
|
||||||
DWORD dwTIFlags;
|
DWORD dwTIFlags;
|
||||||
PVOID pDeskInfo;
|
PVOID pDeskInfo;
|
||||||
ULONG_PTR ulClientDelta;
|
ULONG_PTR ulClientDelta;
|
||||||
PHOOK phkCurrent;
|
PHOOK phkCurrent;
|
||||||
ULONG fsHooks;
|
ULONG fsHooks;
|
||||||
HWND hWND; // Will be replaced with CALLBACKWND.
|
CALLBACKWND CallbackWnd;
|
||||||
PVOID pvWND; // " "
|
|
||||||
ULONG Win32ClientInfo;
|
ULONG Win32ClientInfo;
|
||||||
DWORD dwHookCurrent;
|
DWORD dwHookCurrent;
|
||||||
ULONG Win32ClientInfo1;
|
INT cInDDEMLCallback;
|
||||||
PCLIENTTHREADINFO pClientThreadInfo;
|
PCLIENTTHREADINFO pClientThreadInfo;
|
||||||
DWORD dwHookData;
|
DWORD dwHookData;
|
||||||
DWORD dwKeyCache;
|
DWORD dwKeyCache;
|
||||||
ULONG Win32ClientInfo2[7];
|
DWORD afKeyState[2];
|
||||||
|
DWORD dwAsyncKeyCache;
|
||||||
|
DWORD afAsyncKeyState[2];
|
||||||
|
DWORD afAsyncKeyStateRecentDow[2];
|
||||||
|
HKL hKL;
|
||||||
USHORT CodePage;
|
USHORT CodePage;
|
||||||
USHORT csCF;
|
USHORT achDbcsCF;
|
||||||
HANDLE hKL;
|
|
||||||
ULONG Win32ClientInfo3[35];
|
ULONG Win32ClientInfo3[35];
|
||||||
} W32CLIENTINFO, *PW32CLIENTINFO;
|
} CLIENTINFO, *PCLIENTINFO;
|
||||||
|
|
||||||
#define GetWin32ClientInfo() (PW32CLIENTINFO)(NtCurrentTeb()->Win32ClientInfo)
|
/* Make sure it fits exactly into the TEB */
|
||||||
|
C_ASSERT(sizeof(CLIENTINFO) == FIELD_OFFSET(TEB, glDispatchTable) - FIELD_OFFSET(TEB, Win32ClientInfo));
|
||||||
|
|
||||||
|
#define GetWin32ClientInfo() ((PCLIENTINFO)(NtCurrentTeb()->Win32ClientInfo))
|
||||||
|
|
||||||
// Server event activity bits.
|
// Server event activity bits.
|
||||||
#define SRV_EVENT_MENU 0x0001
|
#define SRV_EVENT_MENU 0x0001
|
||||||
|
|
|
@ -116,22 +116,22 @@ IntSetTebWndCallback (HWND * hWnd, PVOID * pWnd)
|
||||||
{
|
{
|
||||||
HWND hWndS = *hWnd;
|
HWND hWndS = *hWnd;
|
||||||
PWINDOW_OBJECT Window = UserGetWindowObject(*hWnd);
|
PWINDOW_OBJECT Window = UserGetWindowObject(*hWnd);
|
||||||
PW32CLIENTINFO ClientInfo = GetWin32ClientInfo();
|
PCLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||||
|
|
||||||
*hWnd = ClientInfo->hWND;
|
*hWnd = ClientInfo->CallbackWnd.hWnd;
|
||||||
*pWnd = ClientInfo->pvWND;
|
*pWnd = ClientInfo->CallbackWnd.pvWnd;
|
||||||
|
|
||||||
ClientInfo->hWND = hWndS;
|
ClientInfo->CallbackWnd.hWnd = hWndS;
|
||||||
ClientInfo->pvWND = DesktopHeapAddressToUser(Window->Wnd);
|
ClientInfo->CallbackWnd.pvWnd = DesktopHeapAddressToUser(Window->Wnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VOID
|
static VOID
|
||||||
IntRestoreTebWndCallback (HWND hWnd, PVOID pWnd)
|
IntRestoreTebWndCallback (HWND hWnd, PVOID pWnd)
|
||||||
{
|
{
|
||||||
PW32CLIENTINFO ClientInfo = GetWin32ClientInfo();
|
PCLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||||
|
|
||||||
ClientInfo->hWND = hWnd;
|
ClientInfo->CallbackWnd.hWnd = hWnd;
|
||||||
ClientInfo->pvWND = pWnd;
|
ClientInfo->CallbackWnd.pvWnd = pWnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* FUNCTIONS *****************************************************************/
|
||||||
|
|
|
@ -296,7 +296,7 @@ co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
PHOOK Hook, SaveHook;
|
PHOOK Hook, SaveHook;
|
||||||
PW32THREAD Win32Thread;
|
PW32THREAD Win32Thread;
|
||||||
PW32CLIENTINFO ClientInfo;
|
PCLIENTINFO ClientInfo;
|
||||||
PHOOKTABLE Table;
|
PHOOKTABLE Table;
|
||||||
LRESULT Result;
|
LRESULT Result;
|
||||||
PWINSTATION_OBJECT WinStaObj;
|
PWINSTATION_OBJECT WinStaObj;
|
||||||
|
@ -886,7 +886,7 @@ NtUserCallNextHookEx(
|
||||||
BOOL Ansi)
|
BOOL Ansi)
|
||||||
{
|
{
|
||||||
PHOOK HookObj, NextObj;
|
PHOOK HookObj, NextObj;
|
||||||
PW32CLIENTINFO ClientInfo;
|
PCLIENTINFO ClientInfo;
|
||||||
PWINSTATION_OBJECT WinStaObj;
|
PWINSTATION_OBJECT WinStaObj;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
DECLARE_RETURN(LRESULT);
|
DECLARE_RETURN(LRESULT);
|
||||||
|
@ -962,7 +962,7 @@ NtUserSetWindowsHookEx(
|
||||||
BOOL Ansi)
|
BOOL Ansi)
|
||||||
{
|
{
|
||||||
PWINSTATION_OBJECT WinStaObj;
|
PWINSTATION_OBJECT WinStaObj;
|
||||||
PW32CLIENTINFO ClientInfo;
|
PCLIENTINFO ClientInfo;
|
||||||
BOOLEAN Global;
|
BOOLEAN Global;
|
||||||
PETHREAD Thread;
|
PETHREAD Thread;
|
||||||
PHOOK Hook;
|
PHOOK Hook;
|
||||||
|
|
|
@ -2110,7 +2110,7 @@ NtUserMessageCall(
|
||||||
case FNID_CALLWNDPROC:
|
case FNID_CALLWNDPROC:
|
||||||
case FNID_CALLWNDPROCRET:
|
case FNID_CALLWNDPROCRET:
|
||||||
{
|
{
|
||||||
PW32CLIENTINFO ClientInfo = GetWin32ClientInfo();
|
PCLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||||
PHOOK NextObj, Hook = ClientInfo->phkCurrent;
|
PHOOK NextObj, Hook = ClientInfo->phkCurrent;
|
||||||
|
|
||||||
if (!ClientInfo || !Hook) break;
|
if (!ClientInfo || !Hook) break;
|
||||||
|
|
|
@ -437,7 +437,7 @@ GetW32ThreadInfo(VOID)
|
||||||
{
|
{
|
||||||
PTEB Teb;
|
PTEB Teb;
|
||||||
PW32THREADINFO ti;
|
PW32THREADINFO ti;
|
||||||
PW32CLIENTINFO ci;
|
PCLIENTINFO ci;
|
||||||
PW32THREAD W32Thread = PsGetCurrentThreadWin32Thread();
|
PW32THREAD W32Thread = PsGetCurrentThreadWin32Thread();
|
||||||
|
|
||||||
if (W32Thread == NULL)
|
if (W32Thread == NULL)
|
||||||
|
@ -477,7 +477,7 @@ GetW32ThreadInfo(VOID)
|
||||||
W32Thread->ThreadInfo = ti;
|
W32Thread->ThreadInfo = ti;
|
||||||
/* update the TEB */
|
/* update the TEB */
|
||||||
Teb = NtCurrentTeb();
|
Teb = NtCurrentTeb();
|
||||||
ci = ((PW32CLIENTINFO)Teb->Win32ClientInfo);
|
ci = GetWin32ClientInfo();
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForWrite(Teb,
|
ProbeForWrite(Teb,
|
||||||
|
|
|
@ -330,13 +330,13 @@ static void IntSendDestroyMsg(HWND hWnd)
|
||||||
static VOID
|
static VOID
|
||||||
UserFreeWindowInfo(PW32THREADINFO ti, PWINDOW_OBJECT WindowObject)
|
UserFreeWindowInfo(PW32THREADINFO ti, PWINDOW_OBJECT WindowObject)
|
||||||
{
|
{
|
||||||
PW32CLIENTINFO ClientInfo = GetWin32ClientInfo();
|
PCLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||||
PWINDOW Wnd = WindowObject->Wnd;
|
PWINDOW Wnd = WindowObject->Wnd;
|
||||||
|
|
||||||
if (ClientInfo->pvWND == DesktopHeapAddressToUser(WindowObject->Wnd))
|
if (ClientInfo->CallbackWnd.pvWnd == DesktopHeapAddressToUser(WindowObject->Wnd))
|
||||||
{
|
{
|
||||||
ClientInfo->hWND = NULL;
|
ClientInfo->CallbackWnd.hWnd = NULL;
|
||||||
ClientInfo->pvWND = NULL;
|
ClientInfo->CallbackWnd.pvWnd = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Wnd->WindowName.Buffer != NULL)
|
if (Wnd->WindowName.Buffer != NULL)
|
||||||
|
|
Loading…
Reference in a new issue