Removed the MESSAGEQUEUE structure, and store the corresponding
information directly in the TEB, in the Win32ClientInfo field.

diff --git a/dlls/user/user_private.h b/dlls/user/user_private.h
index 4b85db8..711f88b 100644
--- a/dlls/user/user_private.h
+++ b/dlls/user/user_private.h
@@ -26,6 +26,8 @@
 #include "winbase.h"
 #include "wingdi.h"
 #include "winuser.h"
+#include "winreg.h"
+#include "winternl.h"
 #include "local.h"
 
 extern WORD USER_HeapSel;
@@ -119,6 +121,31 @@
 
 extern USER_DRIVER USER_Driver;
 
+struct received_message_info;
+struct hook16_queue_info;
+
+/* this is the structure stored in TEB->Win32ClientInfo */
+/* no attempt is made to keep the layout compatible with the Windows one */
+struct user_thread_info
+{
+    HANDLE                        server_queue;           /* 00 Handle to server-side queue */
+    DWORD                         recursion_count;        /* 04 SendMessage recursion counter */
+    HHOOK                         hook;                   /* 08 Current hook */
+    struct received_message_info *receive_info;           /* 0c Message being currently received */
+    struct hook16_queue_info     *hook16_info;            /* 10 Opaque pointer for 16-bit hook support */
+    DWORD                         GetMessageTimeVal;      /* 14 Value for GetMessageTime */
+    DWORD                         GetMessagePosVal;       /* 18 Value for GetMessagePos */
+    DWORD                         GetMessageExtraInfoVal; /* 1c Value for GetMessageExtraInfo */
+    HCURSOR                       cursor;                 /* 20 Current cursor */
+    INT                           cursor_count;           /* 24 Cursor show count */
+                                                          /* 28-7c Available for more data */
+};
+
+static inline struct user_thread_info *get_user_thread_info(void)
+{
+    return (struct user_thread_info *)NtCurrentTeb()->Win32ClientInfo;
+}
+
 extern HMODULE user32_module;
 extern DWORD USER16_AlertableWait;
 extern HBRUSH SYSCOLOR_55AABrush;