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.

svn path=/trunk/; revision=32893
This commit is contained in:
James Tabor 2008-04-08 05:08:25 +00:00
parent 9da1cd7532
commit 4f409ee040
2 changed files with 12 additions and 7 deletions

View file

@ -1081,12 +1081,11 @@ BOOL
STDCALL STDCALL
InSendMessage(VOID) InSendMessage(VOID)
{ {
static DWORD ShowNotImplemented = TRUE; PCLIENTTHREADINFO pcti = ((PW32CLIENTINFO)GetWin32ClientInfo())->pClientThreadInfo;
if (ShowNotImplemented)
{ if ( pcti )
DbgPrint("InSendMessage is unimplemented\n"); return (pcti->CTI_flags & CTI_INSENDMESSAGE);
ShowNotImplemented = FALSE; else
}
/* return(NtUserGetThreadState(THREADSTATE_INSENDMESSAGE) != ISMEX_NOSEND); */ /* return(NtUserGetThreadState(THREADSTATE_INSENDMESSAGE) != ISMEX_NOSEND); */
return FALSE; return FALSE;
} }
@ -1100,8 +1099,11 @@ STDCALL
InSendMessageEx( InSendMessageEx(
LPVOID lpReserved) LPVOID lpReserved)
{ {
PCLIENTTHREADINFO pcti = ((PW32CLIENTINFO)GetWin32ClientInfo())->pClientThreadInfo;
if (pcti && !(pcti->CTI_flags & CTI_INSENDMESSAGE)) return ISMEX_NOSEND;
else
/* return NtUserGetThreadState(THREADSTATE_INSENDMESSAGE); */ /* return NtUserGetThreadState(THREADSTATE_INSENDMESSAGE); */
UNIMPLEMENTED;
return 0; return 0;
} }

View file

@ -181,8 +181,11 @@ typedef struct _W32PROCESSINFO
} W32PROCESSINFO, *PW32PROCESSINFO; } W32PROCESSINFO, *PW32PROCESSINFO;
#define CTI_INSENDMESSAGE 0x0002
typedef struct _CLIENTTHREADINFO typedef struct _CLIENTTHREADINFO
{ {
DWORD CTI_flags;
DWORD dwcPumpHook; DWORD dwcPumpHook;
} CLIENTTHREADINFO, *PCLIENTTHREADINFO; } CLIENTTHREADINFO, *PCLIENTTHREADINFO;