mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 09:25:10 +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)
|
||||
{
|
||||
PWINDOW Wnd;
|
||||
PW32CLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||
PCLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||
ASSERT(ClientInfo != NULL);
|
||||
|
||||
/* See if the window is cached */
|
||||
if (hwnd == ClientInfo->hWND)
|
||||
return ClientInfo->pvWND;
|
||||
if (hwnd == ClientInfo->CallbackWnd.hWnd)
|
||||
return ClientInfo->CallbackWnd.pvWnd;
|
||||
|
||||
Wnd = ValidateHandle((HANDLE)hwnd, VALIDATE_TYPE_WIN);
|
||||
if (Wnd != NULL)
|
||||
|
@ -501,12 +501,12 @@ FASTCALL
|
|||
ValidateHwndNoErr(HWND hwnd)
|
||||
{
|
||||
PWINDOW Wnd;
|
||||
PW32CLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||
PCLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||
ASSERT(ClientInfo != NULL);
|
||||
|
||||
/* See if the window is cached */
|
||||
if (hwnd == ClientInfo->hWND)
|
||||
return ClientInfo->pvWND;
|
||||
if (hwnd == ClientInfo->CallbackWnd.hWnd)
|
||||
return ClientInfo->CallbackWnd.pvWnd;
|
||||
|
||||
Wnd = ValidateHandleNoErr((HANDLE)hwnd, VALIDATE_TYPE_WIN);
|
||||
if (Wnd != NULL)
|
||||
|
|
|
@ -193,7 +193,7 @@ CallNextHookEx(
|
|||
WPARAM wParam,
|
||||
LPARAM lParam)
|
||||
{
|
||||
PW32CLIENTINFO ClientInfo;
|
||||
PCLIENTINFO ClientInfo;
|
||||
DWORD Flags, Save;
|
||||
PHOOK pHook;
|
||||
LRESULT lResult = 0;
|
||||
|
|
|
@ -1081,7 +1081,7 @@ BOOL
|
|||
STDCALL
|
||||
InSendMessage(VOID)
|
||||
{
|
||||
PCLIENTTHREADINFO pcti = ((PW32CLIENTINFO)GetWin32ClientInfo())->pClientThreadInfo;
|
||||
PCLIENTTHREADINFO pcti = GetWin32ClientInfo()->pClientThreadInfo;
|
||||
// FIXME("ISM %x\n",pcti);
|
||||
if ( pcti )
|
||||
{
|
||||
|
@ -1103,7 +1103,7 @@ STDCALL
|
|||
InSendMessageEx(
|
||||
LPVOID lpReserved)
|
||||
{
|
||||
PCLIENTTHREADINFO pcti = ((PW32CLIENTINFO)GetWin32ClientInfo())->pClientThreadInfo;
|
||||
PCLIENTTHREADINFO pcti = GetWin32ClientInfo()->pClientThreadInfo;
|
||||
// FIXME("ISMEX %x\n",pcti);
|
||||
if (pcti && !(pcti->CTI_flags & CTI_INSENDMESSAGE)) return ISMEX_NOSEND;
|
||||
else
|
||||
|
@ -2336,7 +2336,7 @@ DWORD gfMessagePumpHook = 0;
|
|||
|
||||
BOOL WINAPI IsInsideMessagePumpHook()
|
||||
{ // 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);
|
||||
return (gfMessagePumpHook && pcti && (pcti->dwcPumpHook > 0));
|
||||
}
|
||||
|
|
|
@ -297,6 +297,11 @@ typedef struct _W32PROCESSINFO
|
|||
typedef struct _CLIENTTHREADINFO
|
||||
{
|
||||
DWORD CTI_flags;
|
||||
WORD fsChangeBits;
|
||||
WORD fsWakeBits;
|
||||
WORD fsWakeBitsJournal;
|
||||
WORD fsWakeMask;
|
||||
LONG timeLastRead;
|
||||
DWORD dwcPumpHook;
|
||||
} CLIENTTHREADINFO, *PCLIENTTHREADINFO;
|
||||
|
||||
|
@ -340,34 +345,39 @@ typedef struct _CALLBACKWND
|
|||
|
||||
#define CI_CURTHPRHOOK 0x00000010
|
||||
|
||||
typedef struct _W32CLIENTINFO
|
||||
typedef struct _CLIENTINFO
|
||||
{
|
||||
ULONG CI_flags;
|
||||
ULONG cSpins;
|
||||
ULONG ulWindowsVersion;
|
||||
ULONG ulAppCompatFlags;
|
||||
ULONG ulAppCompatFlags2;
|
||||
DWORD dwExpWinVer;
|
||||
DWORD dwCompatFlags;
|
||||
DWORD dwCompatFlags2;
|
||||
DWORD dwTIFlags;
|
||||
PVOID pDeskInfo;
|
||||
ULONG_PTR ulClientDelta;
|
||||
PHOOK phkCurrent;
|
||||
ULONG fsHooks;
|
||||
HWND hWND; // Will be replaced with CALLBACKWND.
|
||||
PVOID pvWND; // " "
|
||||
CALLBACKWND CallbackWnd;
|
||||
ULONG Win32ClientInfo;
|
||||
DWORD dwHookCurrent;
|
||||
ULONG Win32ClientInfo1;
|
||||
INT cInDDEMLCallback;
|
||||
PCLIENTTHREADINFO pClientThreadInfo;
|
||||
DWORD dwHookData;
|
||||
DWORD dwKeyCache;
|
||||
ULONG Win32ClientInfo2[7];
|
||||
DWORD afKeyState[2];
|
||||
DWORD dwAsyncKeyCache;
|
||||
DWORD afAsyncKeyState[2];
|
||||
DWORD afAsyncKeyStateRecentDow[2];
|
||||
HKL hKL;
|
||||
USHORT CodePage;
|
||||
USHORT csCF;
|
||||
HANDLE hKL;
|
||||
USHORT achDbcsCF;
|
||||
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.
|
||||
#define SRV_EVENT_MENU 0x0001
|
||||
|
|
|
@ -116,22 +116,22 @@ IntSetTebWndCallback (HWND * hWnd, PVOID * pWnd)
|
|||
{
|
||||
HWND hWndS = *hWnd;
|
||||
PWINDOW_OBJECT Window = UserGetWindowObject(*hWnd);
|
||||
PW32CLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||
PCLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||
|
||||
*hWnd = ClientInfo->hWND;
|
||||
*pWnd = ClientInfo->pvWND;
|
||||
*hWnd = ClientInfo->CallbackWnd.hWnd;
|
||||
*pWnd = ClientInfo->CallbackWnd.pvWnd;
|
||||
|
||||
ClientInfo->hWND = hWndS;
|
||||
ClientInfo->pvWND = DesktopHeapAddressToUser(Window->Wnd);
|
||||
ClientInfo->CallbackWnd.hWnd = hWndS;
|
||||
ClientInfo->CallbackWnd.pvWnd = DesktopHeapAddressToUser(Window->Wnd);
|
||||
}
|
||||
|
||||
static VOID
|
||||
IntRestoreTebWndCallback (HWND hWnd, PVOID pWnd)
|
||||
{
|
||||
PW32CLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||
PCLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||
|
||||
ClientInfo->hWND = hWnd;
|
||||
ClientInfo->pvWND = pWnd;
|
||||
ClientInfo->CallbackWnd.hWnd = hWnd;
|
||||
ClientInfo->CallbackWnd.pvWnd = pWnd;
|
||||
}
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
|
|
@ -296,7 +296,7 @@ co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam)
|
|||
{
|
||||
PHOOK Hook, SaveHook;
|
||||
PW32THREAD Win32Thread;
|
||||
PW32CLIENTINFO ClientInfo;
|
||||
PCLIENTINFO ClientInfo;
|
||||
PHOOKTABLE Table;
|
||||
LRESULT Result;
|
||||
PWINSTATION_OBJECT WinStaObj;
|
||||
|
@ -886,7 +886,7 @@ NtUserCallNextHookEx(
|
|||
BOOL Ansi)
|
||||
{
|
||||
PHOOK HookObj, NextObj;
|
||||
PW32CLIENTINFO ClientInfo;
|
||||
PCLIENTINFO ClientInfo;
|
||||
PWINSTATION_OBJECT WinStaObj;
|
||||
NTSTATUS Status;
|
||||
DECLARE_RETURN(LRESULT);
|
||||
|
@ -962,7 +962,7 @@ NtUserSetWindowsHookEx(
|
|||
BOOL Ansi)
|
||||
{
|
||||
PWINSTATION_OBJECT WinStaObj;
|
||||
PW32CLIENTINFO ClientInfo;
|
||||
PCLIENTINFO ClientInfo;
|
||||
BOOLEAN Global;
|
||||
PETHREAD Thread;
|
||||
PHOOK Hook;
|
||||
|
|
|
@ -2110,7 +2110,7 @@ NtUserMessageCall(
|
|||
case FNID_CALLWNDPROC:
|
||||
case FNID_CALLWNDPROCRET:
|
||||
{
|
||||
PW32CLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||
PCLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||
PHOOK NextObj, Hook = ClientInfo->phkCurrent;
|
||||
|
||||
if (!ClientInfo || !Hook) break;
|
||||
|
|
|
@ -437,7 +437,7 @@ GetW32ThreadInfo(VOID)
|
|||
{
|
||||
PTEB Teb;
|
||||
PW32THREADINFO ti;
|
||||
PW32CLIENTINFO ci;
|
||||
PCLIENTINFO ci;
|
||||
PW32THREAD W32Thread = PsGetCurrentThreadWin32Thread();
|
||||
|
||||
if (W32Thread == NULL)
|
||||
|
@ -477,7 +477,7 @@ GetW32ThreadInfo(VOID)
|
|||
W32Thread->ThreadInfo = ti;
|
||||
/* update the TEB */
|
||||
Teb = NtCurrentTeb();
|
||||
ci = ((PW32CLIENTINFO)Teb->Win32ClientInfo);
|
||||
ci = GetWin32ClientInfo();
|
||||
_SEH_TRY
|
||||
{
|
||||
ProbeForWrite(Teb,
|
||||
|
|
|
@ -330,13 +330,13 @@ static void IntSendDestroyMsg(HWND hWnd)
|
|||
static VOID
|
||||
UserFreeWindowInfo(PW32THREADINFO ti, PWINDOW_OBJECT WindowObject)
|
||||
{
|
||||
PW32CLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||
PCLIENTINFO ClientInfo = GetWin32ClientInfo();
|
||||
PWINDOW Wnd = WindowObject->Wnd;
|
||||
|
||||
if (ClientInfo->pvWND == DesktopHeapAddressToUser(WindowObject->Wnd))
|
||||
if (ClientInfo->CallbackWnd.pvWnd == DesktopHeapAddressToUser(WindowObject->Wnd))
|
||||
{
|
||||
ClientInfo->hWND = NULL;
|
||||
ClientInfo->pvWND = NULL;
|
||||
ClientInfo->CallbackWnd.hWnd = NULL;
|
||||
ClientInfo->CallbackWnd.pvWnd = NULL;
|
||||
}
|
||||
|
||||
if (Wnd->WindowName.Buffer != NULL)
|
||||
|
|
Loading…
Reference in a new issue