Author: jimtabor Date: Tue Apr 8 00:08:25 2008 New Revision: 32893
URL: http://svn.reactos.org/svn/reactos?rev=32893&view=rev Log: Good example how client thread info structure works. Only one flag was seen being set and cleared when multi-thread messages are sent. Researched back in 2001.
Modified: trunk/reactos/dll/win32/user32/windows/message.c trunk/reactos/include/reactos/win32k/ntuser.h
Modified: trunk/reactos/dll/win32/user32/windows/message.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/user32/windows/me... ============================================================================== --- trunk/reactos/dll/win32/user32/windows/message.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/user32/windows/message.c [iso-8859-1] Tue Apr 8 00:08:25 2008 @@ -1081,12 +1081,11 @@ STDCALL InSendMessage(VOID) { - static DWORD ShowNotImplemented = TRUE; - if (ShowNotImplemented) - { - DbgPrint("InSendMessage is unimplemented\n"); - ShowNotImplemented = FALSE; - } + PCLIENTTHREADINFO pcti = ((PW32CLIENTINFO)GetWin32ClientInfo())->pClientThreadInfo; + + if ( pcti ) + return (pcti->CTI_flags & CTI_INSENDMESSAGE); + else /* return(NtUserGetThreadState(THREADSTATE_INSENDMESSAGE) != ISMEX_NOSEND); */ return FALSE; } @@ -1100,8 +1099,11 @@ InSendMessageEx( LPVOID lpReserved) { + PCLIENTTHREADINFO pcti = ((PW32CLIENTINFO)GetWin32ClientInfo())->pClientThreadInfo; + + if (pcti && !(pcti->CTI_flags & CTI_INSENDMESSAGE)) return ISMEX_NOSEND; + else /* return NtUserGetThreadState(THREADSTATE_INSENDMESSAGE); */ - UNIMPLEMENTED; return 0; }
Modified: trunk/reactos/include/reactos/win32k/ntuser.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/win32k/ntus... ============================================================================== --- trunk/reactos/include/reactos/win32k/ntuser.h [iso-8859-1] (original) +++ trunk/reactos/include/reactos/win32k/ntuser.h [iso-8859-1] Tue Apr 8 00:08:25 2008 @@ -181,8 +181,11 @@
} W32PROCESSINFO, *PW32PROCESSINFO;
+#define CTI_INSENDMESSAGE 0x0002 + typedef struct _CLIENTTHREADINFO { + DWORD CTI_flags; DWORD dwcPumpHook; } CLIENTTHREADINFO, *PCLIENTTHREADINFO;