[BROWSEUI] SHExplorerParseCmdLine: Fix parsing of /root (#6752)
[reactos.git] / win32ss / include / ntuser.h
index c89f852..6c5691b 100644 (file)
@@ -1,38 +1,39 @@
 #ifndef __WIN32K_NTUSER_H
 #define __WIN32K_NTUSER_H
 
-typedef struct _PROCESSINFO *PPROCESSINFO;
-typedef struct _THREADINFO *PTHREADINFO;
+struct _PROCESSINFO;
+struct _THREADINFO;
 struct _DESKTOP;
 struct _WND;
 struct tagPOPUPMENU;
 
-#define FIRST_USER_HANDLE 0x0020  /* first possible value for low word of user handle */
-#define LAST_USER_HANDLE  0xffef  /* last possible value for low word of user handle */
+#define FIRST_USER_HANDLE 0x0020 /* first possible value for low word of user handle */
+#define LAST_USER_HANDLE 0xffef /* last possible value for low word of user handle */
 
-#define HANDLEENTRY_INDESTROY 1
+#define HANDLEENTRY_DESTROY 1
+#define HANDLEENTRY_INDESTROY 2
 
 typedef struct _USER_HANDLE_ENTRY
 {
-    void          *ptr;          /* pointer to object */
+    void *ptr; /* pointer to object */
     union
     {
         PVOID pi;
-        PTHREADINFO pti;          // pointer to Win32ThreadInfo
-        PPROCESSINFO ppi;         // pointer to W32ProcessInfo
+        struct _THREADINFO *pti; /* pointer to Win32ThreadInfo */
+        struct _PROCESSINFO *ppi; /* pointer to W32ProcessInfo */
     };
-    unsigned char  type;         /* object type (0 if free) */
-    unsigned char  flags;
-    unsigned short generation;   /* generation counter */
-} USER_HANDLE_ENTRY, * PUSER_HANDLE_ENTRY;
+    unsigned char type; /* object type (0 if free) */
+    unsigned char flags;
+    unsigned short generation; /* generation counter */
+} USER_HANDLE_ENTRY, *PUSER_HANDLE_ENTRY;
 
 typedef struct _USER_HANDLE_TABLE
 {
-   PUSER_HANDLE_ENTRY handles;
-   PUSER_HANDLE_ENTRY freelist;
-   int nb_handles;
-   int allocated_handles;
-} USER_HANDLE_TABLE, * PUSER_HANDLE_TABLE;
+    PUSER_HANDLE_ENTRY handles;
+    PUSER_HANDLE_ENTRY freelist;
+    int nb_handles;
+    int allocated_handles;
+} USER_HANDLE_TABLE, *PUSER_HANDLE_TABLE;
 
 typedef enum _HANDLE_TYPE
 {
@@ -79,36 +80,56 @@ typedef enum _USERTHREADINFOCLASS
 
 typedef struct _LARGE_UNICODE_STRING
 {
-  ULONG Length;
-  ULONG MaximumLength:31;
-  ULONG bAnsi:1;
-  PWSTR Buffer;
+    ULONG Length;
+    ULONG MaximumLength:31;
+    ULONG bAnsi:1;
+    PWSTR Buffer;
 } LARGE_UNICODE_STRING, *PLARGE_UNICODE_STRING;
 
 typedef struct _LARGE_STRING
 {
-  ULONG Length;
-  ULONG MaximumLength:31;
-  ULONG bAnsi:1;
-  PVOID Buffer;
+    ULONG Length;
+    ULONG MaximumLength:31;
+    ULONG bAnsi:1;
+    PVOID Buffer;
 } LARGE_STRING, *PLARGE_STRING;
-//
-// Based on ANSI_STRING
-//
+
+
+/* Based on ANSI_STRING */
 typedef struct _LARGE_ANSI_STRING
 {
-  ULONG Length;
-  ULONG MaximumLength:31;
-  ULONG bAnsi:1;
-  PCHAR Buffer;
+    ULONG Length;
+    ULONG MaximumLength:31;
+    ULONG bAnsi:1;
+    PCHAR Buffer;
 } LARGE_ANSI_STRING, *PLARGE_ANSI_STRING;
 
-VOID NTAPI RtlInitLargeAnsiString(IN OUT PLARGE_ANSI_STRING,IN PCSZ,IN INT);
-VOID NTAPI RtlInitLargeUnicodeString(IN OUT PLARGE_UNICODE_STRING,IN PCWSTR,IN INT);
-BOOL NTAPI RtlLargeStringToUnicodeString( PUNICODE_STRING, PLARGE_STRING);
+VOID
+NTAPI
+RtlInitLargeAnsiString(
+    IN OUT PLARGE_ANSI_STRING,
+    IN PCSZ,
+    IN INT);
 
-#define NB_HOOKS (WH_MAXHOOK-WH_MINHOOK+1)
+VOID
+NTAPI
+RtlInitLargeUnicodeString(
+    IN OUT PLARGE_UNICODE_STRING,
+    IN PCWSTR,
+    IN INT);
 
+BOOL
+NTAPI
+RtlLargeStringToUnicodeString(
+    PUNICODE_STRING,
+    PLARGE_STRING);
+
+#define NB_HOOKS (WH_MAXHOOK - WH_MINHOOK + 1)
+
+/*
+ * DESKTOPINFO structure.
+ * See also: https://reactos.org/wiki/Techwiki:Win32k/DESKTOP
+ */
 typedef struct _DESKTOPINFO
 {
     PVOID pvDesktopBase;
@@ -120,16 +141,17 @@ typedef struct _DESKTOPINFO
     HWND hTaskManWindow;
     HWND hProgmanWindow;
     HWND hShellWindow;
-    struct _WND * spwndShell;
+    struct _WND *spwndShell;
+    struct _WND *spwndBkGnd;
 
-    PPROCESSINFO ppiShellProcess;
+    struct _PROCESSINFO *ppiShellProcess;
 
     union
     {
         UINT Dummy;
         struct
         {
-            UINT LastInputWasKbd : 1;
+            UINT LastInputWasKbd:1;
         };
     };
 
@@ -139,80 +161,102 @@ typedef struct _DESKTOPINFO
 #define CTI_THREADSYSLOCK 0x0001
 #define CTI_INSENDMESSAGE 0x0002
 
+/*
+ * CLIENTTHREADINFO structure.
+ * See also: https://reactos.org/wiki/Techwiki:Win32k/CLIENTTHREADINFO
+ */
 typedef struct _CLIENTTHREADINFO
 {
     DWORD CTI_flags;
-    WORD  fsChangeBits;
-    WORD  fsWakeBits;
-    WORD  fsWakeBitsJournal;
-    WORD  fsWakeMask;
-    ULONG tickLastMsgChecked;
+    WORD fsChangeBits;
+    WORD fsWakeBits;
+    WORD fsWakeBitsJournal;
+    WORD fsWakeMask;
+    ULONG timeLastRead; // Last time the message queue was read.
     DWORD dwcPumpHook;
 } CLIENTTHREADINFO, *PCLIENTTHREADINFO;
 
 typedef struct _HEAD
 {
-  HANDLE h;
-  DWORD  cLockObj;
+    HANDLE h;
+    DWORD cLockObj;
 } HEAD, *PHEAD;
 
 typedef struct _THROBJHEAD
 {
-  HEAD;
-  PTHREADINFO pti;
+    HEAD;
+    struct _THREADINFO *pti;
 } THROBJHEAD, *PTHROBJHEAD;
 
 typedef struct _THRDESKHEAD
 {
-  THROBJHEAD;
-  struct _DESKTOP *rpdesk;
-  PVOID       pSelf;
+    THROBJHEAD;
+    struct _DESKTOP *rpdesk;
+    PVOID pSelf;
 } THRDESKHEAD, *PTHRDESKHEAD;
 
+typedef struct tagIMC
+{
+    THRDESKHEAD    head;
+    struct tagIMC *pImcNext;
+    ULONG_PTR      dwClientImcData;
+    HWND           hImeWnd;
+} IMC, *PIMC;
+
+#ifndef _WIN64
+C_ASSERT(offsetof(IMC, head.h) == 0x0);
+C_ASSERT(offsetof(IMC, head.cLockObj) == 0x4);
+C_ASSERT(offsetof(IMC, head.pti) == 0x8);
+C_ASSERT(offsetof(IMC, pImcNext) == 0x14);
+C_ASSERT(offsetof(IMC, dwClientImcData) == 0x18);
+C_ASSERT(offsetof(IMC, hImeWnd) == 0x1c);
+#endif
+
 typedef struct _PROCDESKHEAD
 {
-  HEAD;
-  DWORD_PTR hTaskWow;
-  struct _DESKTOP *rpdesk;
-  PVOID       pSelf;
+    HEAD;
+    DWORD_PTR hTaskWow;
+    struct _DESKTOP *rpdesk;
+    PVOID pSelf;
 } PROCDESKHEAD, *PPROCDESKHEAD;
 
 typedef struct _PROCMARKHEAD
 {
-  HEAD;
-  ULONG hTaskWow;
-  PPROCESSINFO ppi;
+    HEAD;
+    ULONG hTaskWow;
+    struct _PROCESSINFO *ppi;
 } PROCMARKHEAD, *PPROCMARKHEAD;
 
 #define UserHMGetHandle(obj) ((obj)->head.h)
+#define UserHMSetHandle(obj, handle) ((obj)->head.h = (handle))
 
 /* Window Client Information structure */
-struct  _ETHREAD;
+struct _ETHREAD;
 
-#define WEF_SETBYWNDPTI      0x0001
+#define WEF_SETBYWNDPTI 0x0001
 
 typedef struct tagHOOK
 {
-  THRDESKHEAD    head;
-  struct tagHOOK *phkNext;   /* This is for user space. */
-  int            HookId;     /* Hook table index */
-  ULONG_PTR      offPfn;
-  ULONG          flags;      /* Some internal flags */
-  INT            ihmod;
-  PTHREADINFO    ptiHooked;
-  struct _DESKTOP *rpdesk;
-  /* ReactOS */
-  LIST_ENTRY     Chain;      /* Hook chain entry */
-  HOOKPROC       Proc;       /* Hook function */
-  BOOLEAN        Ansi;       /* Is it an Ansi hook? */
-  UNICODE_STRING ModuleName; /* Module name for global hooks */
+    THRDESKHEAD head;
+    struct tagHOOK *phkNext; /* This is for user space. */
+    int HookId; /* Hook table index */
+    ULONG_PTR offPfn;
+    ULONG flags; /* Some internal flags */
+    INT_PTR ihmod;
+    struct _THREADINFO *ptiHooked;
+    struct _DESKTOP *rpdesk;
+    /* ReactOS */
+    LIST_ENTRY Chain; /* Hook chain entry */
+    HOOKPROC Proc; /* Hook function */
+    BOOLEAN Ansi; /* Is it an Ansi hook? */
+    UNICODE_STRING ModuleName; /* Module name for global hooks */
 } HOOK, *PHOOK;
 
 typedef struct tagCLIPBOARDDATA
 {
-  HEAD  head;
-  DWORD cbData;
-  BYTE  Data[0];
+    HEAD head;
+    DWORD cbData;
+    BYTE Data[0];
 } CLIPBOARDDATA, *PCLIPBOARDDATA;
 
 /* THREADINFO Flags */
@@ -248,9 +292,9 @@ typedef struct tagCLIPBOARDDATA
 
 typedef struct _CALLBACKWND
 {
-     HWND hWnd;
-     struct _WND *pWnd;
-     PVOID pActCtx;
+    HWND hWnd;
+    struct _WND *pWnd;
+    PVOID pActCtx;
 } CALLBACKWND, *PCALLBACKWND;
 
 #define CI_TRANSACTION       0x00000001
@@ -259,8 +303,17 @@ typedef struct _CALLBACKWND
 #define CI_INITTHREAD        0x00000008
 #define CI_CURTHPRHOOK       0x00000010
 #define CI_CLASSESREGISTERED 0x00000020
-#define CI_IMMACTIVATE       0x00000040
+#define CI_IMMACTIVATE       0x00000040 /* IMM/IME (Asian input) */
+#define CI_CTFCOINIT         0x00000080 /* Did CTF CoInitialize? */
+#define CI_CTFTIM            0x00000100 /* CTF Thread Input Manager (TIM) */
+#define CI_CICERO_STARTED    0x00000200 /* Is Cicero started in the thread? */
+#define CI_TSFDISABLED       0x00000400 /* TSF (Text Services Framework a.k.a. Cicero) */
+#define CI_AIMMACTIVATED     0x00000800 /* Active IMM (AIMM) */
 
+/*
+ * CLIENTINFO structure.
+ * See also: https://reactos.org/wiki/Techwiki:Win32k/CLIENTINFO
+ */
 typedef struct _CLIENTINFO
 {
     ULONG_PTR CI_flags;
@@ -268,7 +321,7 @@ typedef struct _CLIENTINFO
     DWORD dwExpWinVer;
     DWORD dwCompatFlags;
     DWORD dwCompatFlags2;
-    DWORD dwTIFlags; // ThreadInfo TIF_Xxx flags for User space.
+    DWORD dwTIFlags; /* ThreadInfo TIF_Xxx flags for User space. */
     PDESKTOPINFO pDeskInfo;
     ULONG_PTR ulClientDelta;
     PHOOK phkCurrent;
@@ -290,7 +343,7 @@ typedef struct _CLIENTINFO
     LPDWORD lpdwRegisteredClasses;
     ULONG Win32ClientInfo3[26];
 /* It's just a pointer reference not to be used w the structure in user space. */
-    PPROCESSINFO ppi;
+    struct _PROCESSINFO *ppi;
 } CLIENTINFO, *PCLIENTINFO;
 
 /* Make sure it fits into the TEB */
@@ -298,9 +351,15 @@ C_ASSERT(sizeof(CLIENTINFO) <= sizeof(((PTEB)0)->Win32ClientInfo));
 
 #define GetWin32ClientInfo() ((PCLIENTINFO)(NtCurrentTeb()->Win32ClientInfo))
 
-#define HRGN_NULL    ( (HRGN) 0) // NULL empty region
-#define HRGN_WINDOW  ( (HRGN) 1) // region from window rcWindow
-#define HRGN_MONITOR ( (HRGN) 2) // region from monitor region.
+typedef struct tagDDEPACK
+{
+    UINT_PTR uiLo;
+    UINT_PTR uiHi;
+} DDEPACK, *PDDEPACK;
+
+#define HRGN_NULL    ((HRGN)0) /* NULL empty region */
+#define HRGN_WINDOW  ((HRGN)1) /* region from window rcWindow */
+#define HRGN_MONITOR ((HRGN)2) /* region from monitor region. */
 
 /* Menu Item fType. */
 #define MFT_RTOL 0x6000
@@ -313,111 +372,113 @@ typedef struct tagITEM
     UINT fType;
     UINT fState;
     UINT wID;
-    struct tagMENUspSubMenu; /* Pop-up menu. */
+    struct tagMENU *spSubMenu; /* Pop-up menu. */
     HANDLE hbmpChecked;
     HANDLE hbmpUnchecked;
-    USHORTXlpstr; /* Item text pointer. */
+    USHORT *Xlpstr; /* Item text pointer. */
     ULONG cch;
     DWORD_PTR dwItemData;
-    ULONG xItem;   /* Item position. left */
-    ULONG yItem;   /*     "          top */
-    ULONG cxItem;  /* Item Size Width */
-    ULONG cyItem;  /*     "     Height */
-    ULONG dxTab;   /* X position of text after Tab */
-    ULONG ulX;     /* underline.. start position */
+    ULONG xItem; /* Item position. left */
+    ULONG yItem; /*     "          top */
+    ULONG cxItem; /* Item Size Width */
+    ULONG cyItem; /*     "     Height */
+    ULONG dxTab; /* X position of text after Tab */
+    ULONG ulX; /* underline.. start position */
     ULONG ulWidth; /* underline.. width */
-    HBITMAP hbmp;  /* bitmap */
-    INT cxBmp;     /* Width Maximum size of the bitmap items in MIIM_BITMAP state */
-    INT cyBmp;     /* Height " */
-    //// ReactOS
+    HBITMAP hbmp; /* bitmap */
+    INT cxBmp; /* Width Maximum size of the bitmap items in MIIM_BITMAP state */
+    INT cyBmp; /* Height " */
+    /* ReactOS */
     UNICODE_STRING lpstr;
 } ITEM, *PITEM;
 
 typedef struct tagMENULIST
 {
-   struct tagMENULIST* pNext;
-   struct tagMENU*     pMenu;
+    struct tagMENULIST *pNext;
+    struct tagMENU *pMenu;
 } MENULIST, *PMENULIST;
 
 /* Menu fFlags, upper byte is MNS_X style flags. */
-#define MNF_POPUP       0x0001
-#define MNF_UNDERLINE   0x0004
-#define MNF_INACTIVE    0x0010
-#define MNF_RTOL        0x0020
-#define MNF_DESKTOPMN   0x0040
-#define MNF_SYSDESKMN   0x0080
-#define MNF_SYSSUBMENU  0x0100
-// Hack
-#define MNF_SYSMENU     0x0200
+#define MNF_POPUP      0x0001
+#define MNF_UNDERLINE  0x0004
+#define MNF_INACTIVE   0x0010
+#define MNF_RTOL       0x0020
+#define MNF_DESKTOPMN  0x0040
+#define MNF_SYSDESKMN  0x0080
+#define MNF_SYSSUBMENU 0x0100
+/* Hack */
+#define MNF_SYSMENU    0x0200
+
+/* (other FocusedItem values give the position of the focused item) */
+#define NO_SELECTED_ITEM 0xffff
 
 typedef struct tagMENU
 {
     PROCDESKHEAD head;
-    ULONG fFlags;             /* [Style flags | Menu flags] */
-    INT iItem;                /* nPos of selected item, if -1 not selected. AKA focused item */
-    UINT cAlloced;            /* Number of allocated items. Inc's of 8 */
-    UINT cItems;              /* Number of items in the menu */
-    ULONG cxMenu;             /* Width of the whole menu */
-    ULONG cyMenu;             /* Height of the whole menu */
-    ULONG cxTextAlign;        /* Offset of text when items have both bitmaps and text */
+    ULONG fFlags; /* [Style flags | Menu flags] */
+    INT iItem; /* nPos of selected item, if -1 not selected. AKA focused item */
+    UINT cAlloced; /* Number of allocated items. Inc's of 8 */
+    UINT cItems; /* Number of items in the menu */
+    ULONG cxMenu; /* Width of the whole menu */
+    ULONG cyMenu; /* Height of the whole menu */
+    ULONG cxTextAlign; /* Offset of text when items have both bitmaps and text */
     struct _WND *spwndNotify; /* window receiving the messages for ownerdraw */
-    PITEM rgItems;            /* Array of menu items */
-    struct tagMENULISTpParentMenus; /* If this is SubMenu, list of parents. */
+    PITEM rgItems; /* Array of menu items */
+    struct tagMENULIST *pParentMenus; /* If this is SubMenu, list of parents. */
     DWORD dwContextHelpId;
-    ULONG cyMax;              /* max height of the whole menu, 0 is screen height */
-    DWORD_PTR dwMenuData;     /* application defined value */
-    HBRUSH hbrBack;           /* brush for menu background */
-    INT iTop;                 /* Current scroll position Top */
-    INT iMaxTop;              /* Current scroll position Max Top */
-    DWORD dwArrowsOn:2;       /* Arrows: 0 off, 1 on, 2 to the top, 3 to the bottom. */
-    //// ReactOS
+    ULONG cyMax; /* max height of the whole menu, 0 is screen height */
+    DWORD_PTR dwMenuData; /* application defined value */
+    HBRUSH hbrBack; /* brush for menu background */
+    INT iTop; /* Current scroll position Top */
+    INT iMaxTop; /* Current scroll position Max Top */
+    DWORD dwArrowsOn:2; /* Arrows: 0 off, 1 on, 2 to the top, 3 to the bottom. */
+    /* ReactOS */
     LIST_ENTRY ListEntry;
-    HWND hWnd;           /* Window containing the menu, use POPUPMENU */
+    HWND hWnd; /* Window containing the menu, use POPUPMENU */
     BOOL TimeToHide;
 } MENU, *PMENU;
 
 typedef struct tagPOPUPMENU
 {
ULONG  fIsMenuBar:1;
ULONG  fHasMenuBar:1;
ULONG  fIsSysMenu:1;
ULONG  fIsTrackPopup:1;
ULONG  fDroppedLeft:1;
ULONG  fHierarchyDropped:1;
ULONG  fRightButton:1;
ULONG  fToggle:1;
ULONG  fSynchronous:1;
ULONG  fFirstClick:1;
ULONG  fDropNextPopup:1;
ULONG  fNoNotify:1;
ULONG  fAboutToHide:1;
ULONG  fShowTimer:1;
ULONG  fHideTimer:1;
ULONG  fDestroyed:1;
ULONG  fDelayedFree:1;
ULONG  fFlushDelayedFree:1;
ULONG  fFreed:1;
ULONG  fInCancel:1;
ULONG  fTrackMouseEvent:1;
ULONG  fSendUninit:1;
ULONG  fRtoL:1;
-//  ULONG  fDesktopMenu:1;
ULONG  iDropDir:5;
ULONG  fUseMonitorRect:1;
- struct _WND *spwndNotify;
- struct _WND *spwndPopupMenu;
- struct _WND *spwndNextPopup;
- struct _WND *spwndPrevPopup;
PMENU  spmenu;
PMENU  spmenuAlternate;
- struct _WND *spwndActivePopup; 
- struct tagPOPUPMENU *ppopupmenuRoot;
- struct tagPOPUPMENU *ppmDelayedFree;
UINT   posSelectedItem;
UINT   posDropped;
   ULONG fIsMenuBar:1;
   ULONG fHasMenuBar:1;
   ULONG fIsSysMenu:1;
   ULONG fIsTrackPopup:1;
   ULONG fDroppedLeft:1;
   ULONG fHierarchyDropped:1;
   ULONG fRightButton:1;
   ULONG fToggle:1;
   ULONG fSynchronous:1;
   ULONG fFirstClick:1;
   ULONG fDropNextPopup:1;
   ULONG fNoNotify:1;
   ULONG fAboutToHide:1;
   ULONG fShowTimer:1;
   ULONG fHideTimer:1;
   ULONG fDestroyed:1;
   ULONG fDelayedFree:1;
   ULONG fFlushDelayedFree:1;
   ULONG fFreed:1;
   ULONG fInCancel:1;
   ULONG fTrackMouseEvent:1;
   ULONG fSendUninit:1;
   ULONG fRtoL:1;
+    // ULONG fDesktopMenu:1;
   ULONG iDropDir:5;
   ULONG fUseMonitorRect:1;
   struct _WND *spwndNotify;
   struct _WND *spwndPopupMenu;
   struct _WND *spwndNextPopup;
   struct _WND *spwndPrevPopup;
   PMENU spmenu;
   PMENU spmenuAlternate;
+    struct _WND *spwndActivePopup;
   struct tagPOPUPMENU *ppopupmenuRoot;
   struct tagPOPUPMENU *ppmDelayedFree;
   UINT posSelectedItem;
   UINT posDropped;
 } POPUPMENU, *PPOPUPMENU;
 
-
 typedef struct _REGISTER_SYSCLASS
 {
     /* This is a reactos specific class used to initialize the
@@ -434,53 +495,53 @@ typedef struct _REGISTER_SYSCLASS
 
 typedef struct _CLSMENUNAME
 {
-  LPSTR     pszClientAnsiMenuName;
-  LPWSTR    pwszClientUnicodeMenuName;
-  PUNICODE_STRING pusMenuName;
+    LPSTR pszClientAnsiMenuName;
+    LPWSTR pwszClientUnicodeMenuName;
+    PUNICODE_STRING pusMenuName;
 } CLSMENUNAME, *PCLSMENUNAME;
 
 typedef struct tagSBDATA
 {
-  INT posMin;
-  INT posMax;
-  INT page;
-  INT pos;
+    INT posMin;
+    INT posMax;
+    INT page;
+    INT pos;
 } SBDATA, *PSBDATA;
 
 typedef struct tagSBINFO
 {
-  INT WSBflags;
-  SBDATA Horz;
-  SBDATA Vert;
+    INT WSBflags;
+    SBDATA Horz;
+    SBDATA Vert;
 } SBINFO, *PSBINFO;
 
 typedef struct tagSBCALC
 {
-  INT posMin;
-  INT posMax;
-  INT page;
-  INT pos;
-  INT pxTop;
-  INT pxBottom;
-  INT pxLeft;
-  INT pxRight;
-  INT cpxThumb;
-  INT pxUpArrow;
-  INT pxDownArrow;
-  INT pxStart;
-  INT pxThumbBottom;
-  INT pxThumbTop;
-  INT cpx;
-  INT pxMin;
+    INT posMin;
+    INT posMax;
+    INT page;
+    INT pos;
+    INT pxTop;
+    INT pxBottom;
+    INT pxLeft;
+    INT pxRight;
+    INT cpxThumb;
+    INT pxUpArrow;
+    INT pxDownArrow;
+    INT pxStart;
+    INT pxThumbBottom;
+    INT pxThumbTop;
+    INT cpx;
+    INT pxMin;
 } SBCALC, *PSBCALC;
 
 typedef enum _GETCPD
 {
-    UserGetCPDA2U      = 0x01, // " Unicode "
-    UserGetCPDU2A      = 0X02, // " Ansi "
-    UserGetCPDClass    = 0X10,
-    UserGetCPDWindow   = 0X20,
-    UserGetCPDDialog   = 0X40,
+    UserGetCPDA2U = 0x01, /* " Unicode " */
+    UserGetCPDU2A = 0X02, /* " Ansi " */
+    UserGetCPDClass = 0X10,
+    UserGetCPDWindow = 0X20,
+    UserGetCPDDialog = 0X40,
     UserGetCPDWndtoCls = 0X80
 } GETCPD, *PGETCPD;
 
@@ -492,14 +553,14 @@ typedef struct _CALLPROCDATA
     GETCPD wType;
 } CALLPROCDATA, *PCALLPROCDATA;
 
-#define CSF_SERVERSIDEPROC      0x0001
-#define CSF_ANSIPROC            0x0002
-#define CSF_WOWDEFERDESTROY     0x0004
-#define CSF_SYSTEMCLASS         0x0008
-#define CSF_WOWCLASS            0x0010
-#define CSF_WOWEXTRA            0x0020
-#define CSF_CACHEDSMICON        0x0040
-#define CSF_WIN40COMPAT         0x0080
+#define CSF_SERVERSIDEPROC  0x0001
+#define CSF_ANSIPROC        0x0002
+#define CSF_WOWDEFERDESTROY 0x0004
+#define CSF_SYSTEMCLASS     0x0008
+#define CSF_WOWCLASS        0x0010
+#define CSF_WOWEXTRA        0x0020
+#define CSF_CACHEDSMICON    0x0040
+#define CSF_WIN40COMPAT     0x0080
 
 typedef struct _CLS
 {
@@ -510,8 +571,8 @@ typedef struct _CLS
     struct _DESKTOP *rpdeskParent;
     PVOID pdce;
     DWORD CSF_flags;
-    PSTR  lpszClientAnsiMenuName;    // For client use
-    PWSTR lpszClientUnicodeMenuName; // "   "      "
+    PSTR  lpszClientAnsiMenuName; /* For client use */
+    PWSTR lpszClientUnicodeMenuName; /* "   "      " */
     PCALLPROCDATA spcpdFirst;
     struct _CLS *pclsBase;
     struct _CLS *pclsClone;
@@ -521,39 +582,26 @@ typedef struct _CLS
     INT cbclsExtra;
     INT cbwndExtra;
     HINSTANCE hModule;
-#ifdef NEW_CURSORICON
-    struct _CURICON_OBJECT* spicn;
-    struct _CURICON_OBJECT* spcur;
-#else
-    HANDLE hIcon; /* FIXME - Use pointer! */
-    HANDLE hCursor; /* FIXME - Use pointer! */
-#endif
+    struct _CURICON_OBJECT *spicn;
+    struct _CURICON_OBJECT *spcur;
     HBRUSH hbrBackground;
-    PWSTR lpszMenuName;     // kernel use
-    PSTR lpszAnsiClassName; // "
-#ifdef NEW_CURSORICON
-    struct _CURICON_OBJECT* spicnSm;
-#else
-    HANDLE hIconSm; /* FIXME - Use pointer! */
-
-    //// ReactOS dosn't suppot cache icons.
-    HICON hIconSmIntern; /* Internal small icon, derived from hIcon */
-#endif
+    PWSTR lpszMenuName; /* kernel use */
+    PSTR lpszAnsiClassName; /* " */
+    struct _CURICON_OBJECT *spicnSm;
     ////
-    UINT Unicode : 1; // !CSF_ANSIPROC
-    UINT Global : 1;  // CS_GLOBALCLASS or CSF_SERVERSIDEPROC
-    UINT MenuNameIsString : 1;
-    UINT NotUsed : 29;
+    UINT Unicode:1; // !CSF_ANSIPROC
+    UINT Global:1; // CS_GLOBALCLASS or CSF_SERVERSIDEPROC
+    UINT MenuNameIsString:1;
+    UINT NotUsed:29;
 } CLS, *PCLS;
 
-
 typedef struct _SBINFOEX
 {
-  SCROLLBARINFO ScrollBarInfo;
-  SCROLLINFO ScrollInfo;
+    SCROLLBARINFO ScrollBarInfo;
+    SCROLLINFO ScrollInfo;
 } SBINFOEX, *PSBINFOEX;
 
-// State Flags !Not Implemented!
+/* State Flags !Not ALL Implemented! */
 #define WNDS_HASMENU                 0X00000001
 #define WNDS_HASVERTICALSCROOLLBAR   0X00000002
 #define WNDS_HASHORIZONTALSCROLLBAR  0X00000004
@@ -572,7 +620,7 @@ typedef struct _SBINFOEX
 #define WNDS_FORCEMENUDRAW           0X00008000
 #define WNDS_DIALOGWINDOW            0X00010000
 #define WNDS_HASCREATESTRUCTNAME     0X00020000
-#define WNDS_SERVERSIDEWINDOWPROC    0x00040000 // Call proc inside win32k.
+#define WNDS_SERVERSIDEWINDOWPROC    0x00040000 /* Call proc inside win32k. */
 #define WNDS_ANSIWINDOWPROC          0x00080000
 #define WNDS_BEINGACTIVATED          0x00100000
 #define WNDS_HASPALETTE              0x00200000
@@ -589,7 +637,7 @@ typedef struct _SBINFOEX
 
 #define WNDSACTIVEFRAME              0x00000006
 
-// State2 Flags !Not Implemented!
+/* State2 Flags !Not ALL Implemented! */
 #define WNDS2_WMPAINTSENT               0X00000001
 #define WNDS2_ENDPAINTINVALIDATE        0X00000002
 #define WNDS2_STARTPAINT                0X00000004
@@ -635,12 +683,21 @@ typedef struct _SBINFOEX
 #define WS_EX2_CONSOLEWINDOW            0X00000400
 #define WS_EX2_CHILDNOACTIVATE          0X00000800
 
-#define WPF_MININIT    0x0008
-#define WPF_MAXINIT    0x0010
+#define WPF_MININIT 0x0008
+#define WPF_MAXINIT 0x0010
 
+/*
+ * WND structure.
+ * See also: https://reactos.org/wiki/Techwiki:Win32k/WND
+ */
 typedef struct _WND
 {
     THRDESKHEAD head;
+#if 0
+    WW ww;
+#else
+    /* These fields should be moved in the WW at some point. */
+    /* Plese do not change them to keep the same layout with WW. */
     DWORD state;
     DWORD state2;
     /* Extended style. */
@@ -650,6 +707,7 @@ typedef struct _WND
     /* Handle of the module that created the window. */
     HINSTANCE hModule;
     DWORD fnid;
+#endif
     struct _WND *spwndNext;
     struct _WND *spwndPrev;
     struct _WND *spwndParent;
@@ -670,7 +728,7 @@ typedef struct _WND
     HMENU SystemMenu;
     //PMENU spmenuSys;
     /* Window menu handle or window id */
-    UINT IDMenu; // Use spmenu
+    UINT_PTR IDMenu; // Use spmenu
     //PMENU spmenu;
     HRGN hrgnClip;
     HRGN hrgnNewFrame;
@@ -679,8 +737,8 @@ typedef struct _WND
     /* Size of the extra data associated with the window. */
     ULONG cbwndExtra;
     struct _WND *spwndLastActive;
-    //HIMC hImc; // Input context associated with this window.
-    LONG dwUserData;
+    HIMC hImc; // Input context associated with this window.
+    LONG_PTR dwUserData;
     PVOID pActCtx;
     //PD3DMATRIX pTransForm;
     struct _WND *spwndClipboardListener;
@@ -692,34 +750,45 @@ typedef struct _WND
         RECT NormalRect;
         POINT IconPos;
         POINT MaxPos;
-        UINT flags; // WPF_ flags.
+        UINT flags; /* WPF_ flags. */
     } InternalPos;
 
-    UINT Unicode : 1; // !(WNDS_ANSICREATOR|WNDS_ANSIWINDOWPROC) ?
-    UINT InternalPosInitialized : 1;
-    UINT HideFocus : 1; // WS_EX_UISTATEFOCUSRECTHIDDEN ?
-    UINT HideAccel : 1; // WS_EX_UISTATEKBACCELHIDDEN ?
+    UINT Unicode:1; /* !(WNDS_ANSICREATOR|WNDS_ANSIWINDOWPROC) ? */
+    UINT InternalPosInitialized:1;
+    UINT HideFocus:1; /* WS_EX_UISTATEFOCUSRECTHIDDEN ? */
+    UINT HideAccel:1; /* WS_EX_UISTATEKBACCELHIDDEN ? */
 
-  /* Scrollbar info */
-  PSBINFOEX pSBInfoex; // convert to PSBINFO
-  /* Entry in the list of thread windows. */
-  LIST_ENTRY ThreadListEntry;
+    /* Scrollbar info */
+    PSBINFOEX pSBInfoex; // convert to PSBINFO
+    /* Entry in the list of thread windows. */
+    LIST_ENTRY ThreadListEntry;
+
+    PVOID DialogPointer;
 } WND, *PWND;
 
 #define PWND_BOTTOM ((PWND)1)
 
 typedef struct _SBWND
 {
-  WND    wnd;
-  BOOL   fVert;
-  UINT   wDisableFlags;
-  SBCALC SBCalc;
+    WND wnd;
+    BOOL fVert;
+    UINT wDisableFlags;
+    SBCALC SBCalc;
 } SBWND, *PSBWND;
 
+typedef struct _MDIWND
+{
+  WND wnd;
+  DWORD dwReserved;
+  PVOID pmdi;
+} MDIWND, *PMDIWND;
+
+#define GWLP_MDIWND 4
+
 typedef struct _MENUWND
 {
-   WND wnd;
-   PPOPUPMENU ppopupmenu;
+    WND wnd;
+    PPOPUPMENU ppopupmenu;
 } MENUWND, *PMENUWND;
 
 typedef struct _PFNCLIENT
@@ -754,7 +823,13 @@ typedef struct _PFNCLIENT
   Windows uses Ansi == TRUE, Wine uses Unicode == TRUE.
  */
 
-typedef LRESULT(CALLBACK *WNDPROC_EX)(HWND,UINT,WPARAM,LPARAM,BOOL);
+typedef LRESULT
+(CALLBACK *WNDPROC_EX)(
+    HWND,
+    UINT,
+    WPARAM,
+    LPARAM,
+    BOOL);
 
 typedef struct _PFNCLIENTWORKER
 {
@@ -771,9 +846,15 @@ typedef struct _PFNCLIENTWORKER
     WNDPROC_EX pfnCtfHookProc;
 } PFNCLIENTWORKER, *PPFNCLIENTWORKER;
 
-typedef LONG_PTR (NTAPI *PFN_FNID)(PWND, UINT, WPARAM, LPARAM, ULONG_PTR);
+typedef LONG_PTR
+(NTAPI *PFN_FNID)(
+    PWND,
+    UINT,
+    WPARAM,
+    LPARAM,
+    ULONG_PTR);
 
-// FNID's for NtUserSetWindowFNID, NtUserMessageCall
+/* FNID's for NtUserSetWindowFNID, NtUserMessageCall */
 #define FNID_FIRST                  0x029A
 #define FNID_SCROLLBAR              0x029A
 #define FNID_ICONTITLE              0x029B
@@ -800,33 +881,34 @@ typedef LONG_PTR (NTAPI *PFN_FNID)(PWND, UINT, WPARAM, LPARAM, ULONG_PTR);
 #define FNID_MDIACTIVATEDLGPROC     0x02B0
 #define FNID_SENDMESSAGE            0x02B1
 #define FNID_SENDMESSAGEFF          0x02B2
-// Kernel has option to use TimeOut or normal msg send, based on type of msg.
+/* Kernel has option to use TimeOut or normal msg send, based on type of msg. */
 #define FNID_SENDMESSAGEWTOOPTION   0x02B3
 #define FNID_SENDMESSAGECALLPROC    0x02B4
 #define FNID_BROADCASTSYSTEMMESSAGE 0x02B5
 #define FNID_TOOLTIPS               0x02B6
 #define FNID_SENDNOTIFYMESSAGE      0x02B7
 #define FNID_SENDMESSAGECALLBACK    0x02B8
-#define FNID_LAST                   0x02B9
 
-#define FNID_NUM FNID_LAST - FNID_FIRST + 1
-#define FNID_NUMSERVERPROC FNID_SWITCH - FNID_FIRST + 1
+#define FNID_LAST                   FNID_SENDMESSAGECALLBACK
 
-#define FNID_DDEML       0x2000 // Registers DDEML
-#define FNID_DESTROY     0x4000 // This is sent when WM_NCDESTROY or in the support routine.
-                                // Seen during WM_CREATE on error exit too.
-#define FNID_FREED       0x8000 // Window being Freed...
+#define FNID_NUM                    (FNID_LAST - FNID_FIRST + 1)
+#define FNID_NUMSERVERPROC          (FNID_SWITCH - FNID_FIRST + 1)
+
+#define FNID_DDEML   0x2000 /* Registers DDEML */
+#define FNID_DESTROY 0x4000 /* This is sent when WM_NCDESTROY or in the support routine. */
+                            /* Seen during WM_CREATE on error exit too. */
+#define FNID_FREED   0x8000 /* Window being Freed... */
 
 #define ICLASS_TO_MASK(iCls) (1 << ((iCls)))
 
-#define GETPFNCLIENTA(fnid)\
+#define GETPFNCLIENTA(fnid) \
  (WNDPROC)(*(((ULONG_PTR *)&gpsi->apfnClientA) + (fnid - FNID_FIRST)))
-#define GETPFNCLIENTW(fnid)\
+#define GETPFNCLIENTW(fnid) \
  (WNDPROC)(*(((ULONG_PTR *)&gpsi->apfnClientW) + (fnid - FNID_FIRST)))
 
 #define GETPFNSERVER(fnid) gpsi->aStoCidPfn[fnid - FNID_FIRST]
 
-// ICLS's for NtUserGetClassName FNID to ICLS, NtUserInitializeClientPfnArrays
+/* ICLS's for NtUserGetClassName FNID to ICLS, NtUserInitializeClientPfnArrays */
 #define ICLS_BUTTON       0
 #define ICLS_EDIT         1
 #define ICLS_STATIC       2
@@ -863,9 +945,11 @@ typedef LONG_PTR (NTAPI *PFN_FNID)(PWND, UINT, WPARAM, LPARAM, ULONG_PTR);
 #define COLOR_LAST COLOR_MENUBAR
 #define MAX_MB_STRINGS 11
 
-#define SRVINFO_APIHOOK 0x0010
-#define SRVINFO_METRICS 0x0020
-#define SRVINFO_KBDPREF 0x0080
+#define SRVINFO_DBCSENABLED 0x0002
+#define SRVINFO_IMM32       0x0004
+#define SRVINFO_APIHOOK     0x0010
+#define SRVINFO_CICERO_ENABLED 0x0020
+#define SRVINFO_KBDPREF     0x0080
 
 #define NUM_SYSCOLORS 31
 
@@ -877,6 +961,17 @@ typedef struct tagOEMBITMAPINFO
     INT cy;
 } OEMBITMAPINFO, *POEMBITMAPINFO;
 
+typedef enum _OBI_TYPES
+{
+    OBI_CLOSE = 0,
+    OBI_UPARROW = 46,
+    OBI_UPARROWI = 49,
+    OBI_DNARROW = 50,
+    OBI_DNARROWI = 53,
+    OBI_MNARROW = 62,
+    OBI_CTYPES = 93
+} OBI_TYPES;
+
 typedef struct tagMBSTRING
 {
     WCHAR szName[16];
@@ -886,91 +981,103 @@ typedef struct tagMBSTRING
 
 typedef struct tagDPISERVERINFO
 {
-    INT gclBorder;                       /* 000 */
-    HFONT hCaptionFont;                  /* 004 */
-    HFONT hMsgFont;                      /* 008 */
-    INT cxMsgFontChar;                   /* 00C */
-    INT cyMsgFontChar;                   /* 010 */
-    UINT wMaxBtnSize;                    /* 014 */
+    INT gclBorder;      /* 000 */
+    HFONT hCaptionFont; /* 004 */
+    HFONT hMsgFont;     /* 008 */
+    INT cxMsgFontChar;  /* 00C */
+    INT cyMsgFontChar;  /* 010 */
+    UINT wMaxBtnSize;   /* 014 */
 } DPISERVERINFO, *PDPISERVERINFO;
 
-// PUSIFlags:
+/* PUSIFlags: */
 #define PUSIF_PALETTEDISPLAY         0x01
 #define PUSIF_SNAPTO                 0x02
 #define PUSIF_COMBOBOXANIMATION      0x04
 #define PUSIF_LISTBOXSMOOTHSCROLLING 0x08
 #define PUSIF_KEYBOARDCUES           0x20
 
+/*
+ * PERUSERSERVERINFO structure.
+ * See also: https://reactos.org/wiki/Techwiki:Win32k/SERVERINFO
+ */
 typedef struct _PERUSERSERVERINFO
 {
-    INT           aiSysMet[SM_CMETRICS];
-    ULONG         argbSystemUnmatched[NUM_SYSCOLORS];
-    COLORREF      argbSystem[NUM_SYSCOLORS];
-    HBRUSH        ahbrSystem[NUM_SYSCOLORS];
-    HBRUSH        hbrGray;
-    POINT         ptCursor;
-    POINT         ptCursorReal;
-    DWORD         dwLastRITEventTickCount;
-    INT           nEvents;
-    UINT          dtScroll;
-    UINT          dtLBSearch;
-    UINT          dtCaretBlink;
-    UINT          ucWheelScrollLines;
-    UINT          ucWheelScrollChars;
-    INT           wMaxLeftOverlapChars;
-    INT           wMaxRightOverlapChars;
-    INT           cxSysFontChar;
-    INT           cySysFontChar;
-    TEXTMETRICW   tmSysFont;
+    INT aiSysMet[SM_CMETRICS];
+    ULONG argbSystemUnmatched[NUM_SYSCOLORS];
+    COLORREF argbSystem[NUM_SYSCOLORS];
+    HBRUSH ahbrSystem[NUM_SYSCOLORS];
+    HBRUSH hbrGray;
+    POINT ptCursor;
+    POINT ptCursorReal;
+    DWORD dwLastRITEventTickCount;
+    INT nEvents;
+    UINT dtScroll;
+    UINT dtLBSearch;
+    UINT dtCaretBlink;
+    UINT ucWheelScrollLines;
+    UINT ucWheelScrollChars;
+    INT wMaxLeftOverlapChars;
+    INT wMaxRightOverlapChars;
+    INT cxSysFontChar;
+    INT cySysFontChar;
+    TEXTMETRICW tmSysFont;
     DPISERVERINFO dpiSystem;
-    HICON         hIconSmWindows;
-    HICON         hIconWindows;
-    DWORD         dwKeyCache;
-    DWORD         dwAsyncKeyCache;
-    ULONG         cCaptures;
-    OEMBITMAPINFO oembmi[93];
-    RECT          rcScreenReal;
-    USHORT        BitCount;
-    USHORT        dmLogPixels;
-    BYTE          Planes;
-    BYTE          BitsPixel;
-    ULONG         PUSIFlags;
-    UINT          uCaretWidth;
-    USHORT        UILangID;
-    DWORD         dwLastSystemRITEventTickCountUpdate;
-    ULONG         adwDBGTAGFlags[35];
-    DWORD         dwTagCount;
-    DWORD         dwRIPFlags;
+    HICON hIconSmWindows;
+    HICON hIconWindows;
+    DWORD dwKeyCache;
+    DWORD dwAsyncKeyCache;
+    ULONG cCaptures;
+    OEMBITMAPINFO oembmi[OBI_CTYPES];
+    RECT rcScreenReal;
+    USHORT BitCount;
+    USHORT dmLogPixels;
+    BYTE Planes;
+    BYTE BitsPixel;
+    ULONG PUSIFlags;
+    UINT uCaretWidth;
+    USHORT UILangID;
+    DWORD dwLastSystemRITEventTickCountUpdate;
+    ULONG adwDBGTAGFlags[35];
+    DWORD dwTagCount;
+    DWORD dwRIPFlags;
 } PERUSERSERVERINFO, *PPERUSERSERVERINFO;
 
+/*
+ * SERVERINFO structure.
+ * See also: https://reactos.org/wiki/Techwiki:Win32k/SERVERINFO
+ */
 typedef struct tagSERVERINFO
 {
-    DWORD           dwSRVIFlags;
-    ULONG_PTR       cHandleEntries;
-    PFN_FNID        mpFnidPfn[FNID_NUM];
-    WNDPROC         aStoCidPfn[FNID_NUMSERVERPROC];
-    USHORT          mpFnid_serverCBWndProc[FNID_NUM];
-    PFNCLIENT       apfnClientA;
-    PFNCLIENT       apfnClientW;
+    DWORD dwSRVIFlags;
+    ULONG_PTR cHandleEntries;
+    PFN_FNID mpFnidPfn[FNID_NUM];
+    WNDPROC aStoCidPfn[FNID_NUMSERVERPROC];
+    USHORT mpFnid_serverCBWndProc[FNID_NUM];
+    PFNCLIENT apfnClientA;
+    PFNCLIENT apfnClientW;
     PFNCLIENTWORKER apfnClientWorker;
-    ULONG           cbHandleTable;
-    ATOM            atomSysClass[ICLS_NOTUSED+1];
-    DWORD           dwDefaultHeapBase;
-    DWORD           dwDefaultHeapSize;
-    UINT            uiShellMsg;
-    MBSTRING        MBStrings[MAX_MB_STRINGS];
-    ATOM            atomIconSmProp;
-    ATOM            atomIconProp;
-    ATOM            atomContextHelpIdProp;
-    ATOM            atomFrostedWindowProp;
-    CHAR            acOemToAnsi[256];
-    CHAR            acAnsiToOem[256];
-    DWORD           dwInstalledEventHooks;
+    ULONG cbHandleTable;
+    ATOM atomSysClass[ICLS_NOTUSED+1];
+    DWORD dwDefaultHeapBase;
+    DWORD dwDefaultHeapSize;
+    UINT uiShellMsg;
+    MBSTRING MBStrings[MAX_MB_STRINGS];
+    ATOM atomIconSmProp;
+    ATOM atomIconProp;
+    ATOM atomContextHelpIdProp;
+    ATOM atomFrostedWindowProp;
+    CHAR acOemToAnsi[256];
+    CHAR acAnsiToOem[256];
+    DWORD dwInstalledEventHooks;
     PERUSERSERVERINFO;
 } SERVERINFO, *PSERVERINFO;
 
+#ifdef _M_IX86
+C_ASSERT(sizeof(SERVERINFO) <= PAGE_SIZE);
+#endif
+
 
-// Server event activity bits.
+/* Server event activity bits. */
 #define SRV_EVENT_MENU            0x0001
 #define SRV_EVENT_END_APPLICATION 0x0002
 #define SRV_EVENT_RUNNING         0x0004
@@ -982,63 +1089,78 @@ typedef struct tagSERVERINFO
 
 typedef struct _PROPLISTITEM
 {
-  ATOM Atom;
-  HANDLE Data;
+    ATOM Atom;
+    HANDLE Data;
 } PROPLISTITEM, *PPROPLISTITEM;
 
+#define PROPERTY_FLAG_SYSTEM 1
+
 typedef struct _PROPERTY
 {
-  LIST_ENTRY PropListEntry;
-  HANDLE Data;
-  ATOM Atom;
+    LIST_ENTRY PropListEntry;
+    HANDLE Data;
+    ATOM Atom;
+    WORD fs;
 } PROPERTY, *PPROPERTY;
 
 typedef struct _BROADCASTPARM
 {
-  DWORD flags;
-  DWORD recipients;
-  HDESK hDesk;
-  HWND  hWnd;
-  LUID  luid;
+    DWORD flags;
+    DWORD recipients;
+    HDESK hDesk;
+    HWND hWnd;
+    LUID luid;
 } BROADCASTPARM, *PBROADCASTPARM;
 
-PTHREADINFO GetW32ThreadInfo(VOID);
-PPROCESSINFO GetW32ProcessInfo(VOID);
+struct _THREADINFO *GetW32ThreadInfo(VOID);
+struct _PROCESSINFO *GetW32ProcessInfo(VOID);
 
 typedef struct _WNDMSG
 {
-  DWORD maxMsgs;
-  PINT abMsgs;
+    DWORD maxMsgs;
+    PINT abMsgs;
 } WNDMSG, *PWNDMSG;
 
+/*
+ * SHAREDINFO structure.
+ * See also: https://reactos.org/wiki/Techwiki:Win32k/SHAREDINFO
+ */
 typedef struct _SHAREDINFO
 {
-  PSERVERINFO psi;           // global Server Info
-  PVOID       aheList;       // Handle Entry List
-  PVOID       pDispInfo;     // global PDISPLAYINFO pointer
-  ULONG_PTR   ulSharedDelta; // Heap delta
-  WNDMSG      awmControl[FNID_LAST - FNID_FIRST];
-  WNDMSG      DefWindowMsgs;
-  WNDMSG      DefWindowSpecMsgs;
+    PSERVERINFO psi;         /* Global Server Info */
+    PVOID aheList;           /* Handle Entry List */
+    PVOID pDispInfo;         /* Global PDISPLAYINFO pointer */
+    ULONG_PTR ulSharedDelta; /* Shared USER mapped section delta */
+    WNDMSG awmControl[FNID_NUM];
+    WNDMSG DefWindowMsgs;
+    WNDMSG DefWindowSpecMsgs;
 } SHAREDINFO, *PSHAREDINFO;
 
+/* See also the USERSRV_API_CONNECTINFO #define in include/reactos/subsys/win/winmsg.h */
 typedef struct _USERCONNECT
 {
-  ULONG ulVersion;
-  ULONG ulCurrentVersion;
-  DWORD dwDispatchCount;
-  SHAREDINFO siClient;
+    ULONG ulVersion;
+    ULONG ulCurrentVersion;
+    DWORD dwDispatchCount;
+    SHAREDINFO siClient;
 } USERCONNECT, *PUSERCONNECT;
 
+/* WinNT 5.0 compatible user32 / win32k */
+#define USER_VERSION MAKELONG(0x0000, 0x0005)
+
+#if defined(_M_IX86)
+C_ASSERT(sizeof(USERCONNECT) == 0x124);
+#endif
+
 typedef struct tagGETCLIPBDATA
 {
-  UINT uFmtRet;
-  BOOL fGlobalHandle;
-  union
-  {
-    HANDLE hLocale;
-    HANDLE hPalette;
-  };
+    UINT uFmtRet;
+    BOOL fGlobalHandle;
+    union
+    {
+        HANDLE hLocale;
+        HANDLE hPalette;
+    };
 } GETCLIPBDATA, *PGETCLIPBDATA;
 
 typedef struct tagSETCLIPBDATA
@@ -1047,33 +1169,33 @@ typedef struct tagSETCLIPBDATA
     BOOL fIncSerialNumber;
 } SETCLIPBDATA, *PSETCLIPBDATA;
 
-// Used with NtUserSetCursorIconData, last parameter.
+/* Used with NtUserSetCursorIconData, last parameter. */
 typedef struct tagCURSORDATA
 {
-   LPWSTR lpName;
-   LPWSTR lpModName;
-   USHORT rt;
-   USHORT dummy;
-   ULONG CURSORF_flags;
-   SHORT xHotspot;
-   SHORT yHotspot;
-   HBITMAP hbmMask;
-   HBITMAP hbmColor;
-   HBITMAP hbmAlpha;
-   RECT rcBounds;
-   HBITMAP hbmUserAlpha; // Could be in W7U, not in W2k
-   ULONG bpp;
-   ULONG cx;
-   ULONG cy;
-   INT cpcur;
-   INT cicur;
-   struct tagCURSORDATA * aspcur;
-   DWORD * aicur;
-   INT * ajifRate;
-   INT iicur;
+    LPWSTR lpName;
+    LPWSTR lpModName;
+    USHORT rt;
+    USHORT dummy;
+    ULONG CURSORF_flags;
+    SHORT xHotspot;
+    SHORT yHotspot;
+    HBITMAP hbmMask;
+    HBITMAP hbmColor;
+    HBITMAP hbmAlpha;
+    RECT rcBounds;
+    HBITMAP hbmUserAlpha; /* Could be in W7U, not in W2k */
+    ULONG bpp;
+    ULONG cx;
+    ULONG cy;
+    UINT cpcur;
+    UINT cicur;
+    struct tagCURSORDATA *aspcur;
+    DWORD *aicur;
+    INT *ajifRate;
+    UINT iicur;
 } CURSORDATA, *PCURSORDATA; /* !dso CURSORDATA */
 
-// CURSORF_flags:
+/* CURSORF_flags: */
 #define CURSORF_FROMRESOURCE 0x0001
 #define CURSORF_GLOBAL       0x0002
 #define CURSORF_LRSHARED     0x0004
@@ -1084,36 +1206,60 @@ typedef struct tagCURSORDATA
 #define CURSORF_LINKED       0x0100
 #define CURSORF_CURRENT      0x0200
 
+#define IS_IMM_MODE() (gpsi && (gpsi->dwSRVIFlags & SRVINFO_IMM32))
+#define IS_CICERO_MODE() (gpsi && (gpsi->dwSRVIFlags & SRVINFO_CICERO_ENABLED))
+#define IS_16BIT_MODE() (GetWin32ClientInfo()->dwTIFlags & TIF_16BIT)
+
+typedef struct tagIMEUI
+{
+    PWND spwnd;
+    HIMC hIMC;
+    HWND hwndIMC;
+    HKL hKL;
+    HWND hwndUI;
+    LONG nCntInIMEProc;
+    struct {
+        UINT fShowStatus:1;
+        UINT fActivate:1;
+        UINT fDestroy:1;
+        UINT fDefault:1;
+        UINT fChildThreadDef:1;
+        UINT fCtrlShowStatus:1;
+        UINT fFreeActiveEvent:1;
+    };
+    DWORD dwLastStatus;
+} IMEUI, *PIMEUI;
+
+/* Window Extra data container. */
+typedef struct _IMEWND
+{
+    WND wnd;
+    PIMEUI pimeui;
+} IMEWND, *PIMEWND;
+
 DWORD
 NTAPI
-NtUserAssociateInputContext(
-    DWORD dwUnknown1,
-    DWORD dwUnknown2,
-    DWORD dwUnknown3);
+NtUserAssociateInputContext(HWND hWnd, HIMC hIMC, DWORD dwFlags);
 
-DWORD
+NTSTATUS
 NTAPI
-NtUserBuildHimcList(
-    DWORD dwUnknown1,
-    DWORD dwUnknown2,
-    DWORD dwUnknown3,
-    DWORD dwUnknown4);
+NtUserBuildHimcList(DWORD dwThreadId, DWORD dwCount, HIMC *phList, LPDWORD pdwCount);
 
 DWORD
 NTAPI
 NtUserCalcMenuBar(
-    DWORD dwUnknown1,
-    DWORD dwUnknown2,
-    DWORD dwUnknown3,
-    DWORD dwUnknown4,
-    DWORD dwUnknown5);
+    HWND   hwnd,
+    DWORD  x,
+    DWORD  width,
+    DWORD  y,
+    LPRECT prc);
 
 DWORD
 NTAPI
 NtUserCheckMenuItem(
-  HMENU hmenu,
-  UINT uIDCheckItem,
-  UINT uCheck);
+    HMENU hmenu,
+    UINT uIDCheckItem,
+    UINT uCheck);
 
 DWORD
 NTAPI
@@ -1122,33 +1268,45 @@ NtUserCtxDisplayIOCtl(
     DWORD dwUnknown2,
     DWORD dwUnknown3);
 
+DWORD
+APIENTRY
+NtUserDbgWin32HeapFail(
+    DWORD Unknown0,
+    DWORD Unknown1);
+
+DWORD
+APIENTRY
+NtUserDbgWin32HeapStat(
+    DWORD Unknown0,
+    DWORD Unknown1);
+
 BOOL
 NTAPI
 NtUserDeleteMenu(
-  HMENU hMenu,
-  UINT uPosition,
-  UINT uFlags);
+    HMENU hMenu,
+    UINT uPosition,
+    UINT uFlags);
 
 BOOL
 NTAPI
 NtUserDestroyMenu(
-  HMENU hMenu);
+    HMENU hMenu);
 
 DWORD
 NTAPI
 NtUserDrawMenuBarTemp(
-  HWND hWnd,
-  HDC hDC,
-  PRECT hRect,
-  HMENU hMenu,
-  HFONT hFont);
+    HWND hWnd,
+    HDC hDC,
+    PRECT hRect,
+    HMENU hMenu,
+    HFONT hFont);
 
 UINT
 NTAPI
 NtUserEnableMenuItem(
-  HMENU hMenu,
-  UINT uIDEnableItem,
-  UINT uEnable);
+    HMENU hMenu,
+    UINT uIDEnableItem,
+    UINT uEnable);
 
 BOOL
 NTAPI
@@ -1157,461 +1315,463 @@ NtUserEndMenu(VOID);
 BOOL
 NTAPI
 NtUserGetMenuBarInfo(
-  HWND hwnd,
-  LONG idObject,
-  LONG idItem,
-  PMENUBARINFO pmbi);
+    HWND hwnd,
+    LONG idObject,
+    LONG idItem,
+    PMENUBARINFO pmbi);
 
 UINT
 NTAPI
 NtUserGetMenuIndex(
-  HMENU hMenu,
-  HMENU hSubMenu);
+    HMENU hMenu,
+    HMENU hSubMenu);
 
 BOOL
 NTAPI
 NtUserGetMenuItemRect(
-  HWND hWnd,
-  HMENU hMenu,
-  UINT uItem,
-  LPRECT lprcItem);
+    HWND hWnd,
+    HMENU hMenu,
+    UINT uItem,
+    LPRECT lprcItem);
 
 HMENU
 NTAPI
 NtUserGetSystemMenu(
-  HWND hWnd,
-  BOOL bRevert);
+    HWND hWnd,
+    BOOL bRevert);
 
 BOOL
 NTAPI
 NtUserHiliteMenuItem(
-  HWND hWnd,
-  HMENU hMenu,
-  UINT uItemHilite,
-  UINT uHilite);
+    HWND hWnd,
+    HMENU hMenu,
+    UINT uItemHilite,
+    UINT uHilite);
 
 int
 NTAPI
 NtUserMenuItemFromPoint(
-  HWND hWnd,
-  HMENU hMenu,
-  DWORD X,
-  DWORD Y);
+    HWND hWnd,
+    HMENU hMenu,
+    DWORD X,
+    DWORD Y);
 
 BOOL
 NTAPI
 NtUserRemoveMenu(
-  HMENU hMenu,
-  UINT uPosition,
-  UINT uFlags);
+    HMENU hMenu,
+    UINT uPosition,
+    UINT uFlags);
 
 BOOL
 NTAPI
 NtUserSetMenu(
-  HWND hWnd,
-  HMENU hMenu,
-  BOOL bRepaint);
+    HWND hWnd,
+    HMENU hMenu,
+    BOOL bRepaint);
 
 BOOL
 NTAPI
 NtUserSetMenuContextHelpId(
-  HMENU hmenu,
-  DWORD dwContextHelpId);
+    HMENU hmenu,
+    DWORD dwContextHelpId);
 
 BOOL
 NTAPI
 NtUserSetMenuDefaultItem(
-  HMENU hMenu,
-  UINT uItem,
-  UINT fByPos);
+    HMENU hMenu,
+    UINT uItem,
+    UINT fByPos);
 
 BOOL
 NTAPI
 NtUserSetMenuFlagRtoL(
-  HMENU hMenu);
+    HMENU hMenu);
 
 BOOL
 NTAPI
 NtUserSetSystemMenu(
-  HWND hWnd,
-  HMENU hMenu);
+    HWND hWnd,
+    HMENU hMenu);
 
 BOOL
 NTAPI
 NtUserThunkedMenuInfo(
-  HMENU hMenu,
-  LPCMENUINFO lpcmi);
+    HMENU hMenu,
+    LPCMENUINFO lpcmi);
 
 BOOL
 NTAPI
 NtUserThunkedMenuItemInfo(
-  HMENU hMenu,
-  UINT uItem,
-  BOOL fByPosition,
-  BOOL bInsert,
-  LPMENUITEMINFOW lpmii,
-  PUNICODE_STRING lpszCaption);
+    HMENU hMenu,
+    UINT uItem,
+    BOOL fByPosition,
+    BOOL bInsert,
+    LPMENUITEMINFOW lpmii,
+    PUNICODE_STRING lpszCaption);
 
 BOOL
 NTAPI
 NtUserTrackPopupMenuEx(
-  HMENU hmenu,
-  UINT fuFlags,
-  int x,
-  int y,
-  HWND hwnd,
-  LPTPMPARAMS lptpm);
+    HMENU hmenu,
+    UINT fuFlags,
+    int x,
+    int y,
+    HWND hwnd,
+    LPTPMPARAMS lptpm);
 
 HKL
 NTAPI
 NtUserActivateKeyboardLayout(
-  HKL hKl,
-  ULONG Flags);
+    HKL hKL,
+    ULONG Flags);
 
 DWORD
 NTAPI
 NtUserAlterWindowStyle(
-  DWORD Unknown0,
-  DWORD Unknown1,
-  DWORD Unknown2);
+    HWND hWnd,
+    DWORD Index,
+    LONG NewValue);
 
 BOOL
 NTAPI
 NtUserAttachThreadInput(
-  IN DWORD idAttach,
-  IN DWORD idAttachTo,
-  IN BOOL fAttach);
+    IN DWORD idAttach,
+    IN DWORD idAttachTo,
+    IN BOOL fAttach);
 
 HDC NTAPI
-NtUserBeginPaint(HWND hWnd, PAINTSTRUCT* lPs);
+NtUserBeginPaint(
+    HWND hWnd,
+    PAINTSTRUCT *lPs);
 
 BOOL
 NTAPI
 NtUserBitBltSysBmp(
-  HDC hdc,
-  INT nXDest,
-  INT nYDest,
-  INT nWidth,
-  INT nHeight,
-  INT nXSrc,
-  INT nYSrc,
-  DWORD dwRop );
+    HDC hdc,
+    INT nXDest,
+    INT nYDest,
+    INT nWidth,
+    INT nHeight,
+    INT nXSrc,
+    INT nYSrc,
+    DWORD dwRop);
 
 BOOL
 NTAPI
 NtUserBlockInput(
-  BOOL BlockIt);
+    BOOL BlockIt);
 
 NTSTATUS
 NTAPI
 NtUserBuildHwndList(
-  HDESK hDesktop,
-  HWND hwndParent,
-  BOOLEAN bChildren,
-  ULONG dwThreadId,
-  ULONG lParam,
-  HWND* pWnd,
-  ULONG* pBufSize);
-
-NTSTATUS NTAPI
+    HDESK hDesktop,
+    HWND hwndParent,
+    BOOLEAN bChildren,
+    ULONG dwThreadId,
+    ULONG cHwnd,
+    HWND *phwndList,
+    ULONG *pcHwndNeeded);
+
+NTSTATUS
+NTAPI
 NtUserBuildNameList(
-   HWINSTA hWinSta,
-   ULONG dwSize,
-   PVOID lpBuffer,
-   PULONG pRequiredSize);
+    HWINSTA hWinSta,
+    ULONG dwSize,
+    PVOID lpBuffer,
+    PULONG pRequiredSize);
 
 NTSTATUS
 NTAPI
 NtUserBuildPropList(
-  HWND hWnd,
-  LPVOID Buffer,
-  DWORD BufferSize,
-  DWORD *Count);
+    HWND hWnd,
+    LPVOID Buffer,
+    DWORD BufferSize,
+    DWORD *Count);
 
 /* apfnSimpleCall indices from Windows XP SP 2 */
 /* TODO: Check for differences in Windows 2000, 2003 and 2008 */
-#define WIN32K_VERSION NTDDI_WINXPSP2 // FIXME: this should go somewhere else
+#define WIN32K_VERSION NTDDI_WINXPSP2 /* FIXME: this should go somewhere else */
 
 enum SimpleCallRoutines
 {
-       NOPARAM_ROUTINE_CREATEMENU,
-       NOPARAM_ROUTINE_CREATEMENUPOPUP,
+    NOPARAM_ROUTINE_CREATEMENU,
+    NOPARAM_ROUTINE_CREATEMENUPOPUP,
 #if (WIN32K_VERSION >= NTDDI_VISTA)
-       NOPARAM_ROUTINE_ALLOWFOREGNDACTIVATION,
-       NOPARAM_ROUTINE_MSQCLEARWAKEMASK,
-       NOPARAM_ROUTINE_CREATESYSTEMTHREADS,
-       NOPARAM_ROUTINE_DESTROY_CARET,
+    NOPARAM_ROUTINE_ALLOWFOREGNDACTIVATION,
+    NOPARAM_ROUTINE_MSQCLEARWAKEMASK,
+    NOPARAM_ROUTINE_CREATESYSTEMTHREADS,
+    NOPARAM_ROUTINE_DESTROY_CARET,
 #endif
-       NOPARAM_ROUTINE_ENABLEPROCWNDGHSTING,
+    NOPARAM_ROUTINE_ENABLEPROCWNDGHSTING,
 #if (WIN32K_VERSION < NTDDI_VISTA)
-       NOPARAM_ROUTINE_MSQCLEARWAKEMASK,
-       NOPARAM_ROUTINE_ALLOWFOREGNDACTIVATION,
-       NOPARAM_ROUTINE_DESTROY_CARET,
+    NOPARAM_ROUTINE_MSQCLEARWAKEMASK,
+    NOPARAM_ROUTINE_ALLOWFOREGNDACTIVATION,
+    NOPARAM_ROUTINE_DESTROY_CARET,
 #endif
-       NOPARAM_ROUTINE_GETDEVICECHANGEINFO,
-       NOPARAM_ROUTINE_GETIMESHOWSTATUS,
-       NOPARAM_ROUTINE_GETINPUTDESKTOP,
-       NOPARAM_ROUTINE_GETMSESSAGEPOS,
+    NOPARAM_ROUTINE_GETDEVICECHANGEINFO,
+    NOPARAM_ROUTINE_GETIMESHOWSTATUS,
+    NOPARAM_ROUTINE_GETINPUTDESKTOP,
+    NOPARAM_ROUTINE_GETMSESSAGEPOS,
 #if (WIN32K_VERSION >= NTDDI_VISTA)
-       NOPARAM_ROUTINE_HANDLESYSTHRDCREATFAIL,
+    NOPARAM_ROUTINE_HANDLESYSTHRDCREATFAIL,
 #else
-       NOPARAM_ROUTINE_GETREMOTEPROCID,
+    NOPARAM_ROUTINE_GETREMOTEPROCESSID,
 #endif
-       NOPARAM_ROUTINE_HIDECURSORNOCAPTURE,
-       NOPARAM_ROUTINE_LOADCURSANDICOS,
+    NOPARAM_ROUTINE_HIDECURSORNOCAPTURE,
+    NOPARAM_ROUTINE_LOADCURSANDICOS,
 #if (WIN32K_VERSION >= NTDDI_VISTA)
-       NOPARAM_ROUTINE_LOADUSERAPIHOOK,
-       NOPARAM_ROUTINE_PREPAREFORLOGOFF, /* 0x0f */
+    NOPARAM_ROUTINE_LOADUSERAPIHOOK,
+    NOPARAM_ROUTINE_PREPAREFORLOGOFF, /* 0x0f */
 #endif
-       NOPARAM_ROUTINE_RELEASECAPTURE,
-       NOPARAM_ROUTINE_RESETDBLCLICK,
-       NOPARAM_ROUTINE_ZAPACTIVEANDFOUS,
-       NOPARAM_ROUTINE_REMOTECONSHDWSTOP,
-       NOPARAM_ROUTINE_REMOTEDISCONNECT,
-       NOPARAM_ROUTINE_REMOTELOGOFF,
-       NOPARAM_ROUTINE_REMOTENTSECURITY,
-       NOPARAM_ROUTINE_REMOTESHDWSETUP,
-       NOPARAM_ROUTINE_REMOTESHDWSTOP,
-       NOPARAM_ROUTINE_REMOTEPASSTHRUENABLE,
-       NOPARAM_ROUTINE_REMOTEPASSTHRUDISABLE,
-       NOPARAM_ROUTINE_REMOTECONNECTSTATE,
-       NOPARAM_ROUTINE_UPDATEPERUSERIMMENABLING,
-       NOPARAM_ROUTINE_USERPWRCALLOUTWORKER,
+    NOPARAM_ROUTINE_RELEASECAPTURE,
+    NOPARAM_ROUTINE_RESETDBLCLICK,
+    NOPARAM_ROUTINE_ZAPACTIVEANDFOUS,
+    NOPARAM_ROUTINE_REMOTECONSHDWSTOP,
+    NOPARAM_ROUTINE_REMOTEDISCONNECT,
+    NOPARAM_ROUTINE_REMOTELOGOFF,
+    NOPARAM_ROUTINE_REMOTENTSECURITY,
+    NOPARAM_ROUTINE_REMOTESHDWSETUP,
+    NOPARAM_ROUTINE_REMOTESHDWSTOP,
+    NOPARAM_ROUTINE_REMOTEPASSTHRUENABLE,
+    NOPARAM_ROUTINE_REMOTEPASSTHRUDISABLE,
+    NOPARAM_ROUTINE_REMOTECONNECTSTATE,
+    NOPARAM_ROUTINE_UPDATEPERUSERIMMENABLING,
+    NOPARAM_ROUTINE_USERPWRCALLOUTWORKER,
 #if (WIN32K_VERSION >= NTDDI_VISTA)
-       NOPARAM_ROUTINE_WAKERITFORSHTDWN,
+    NOPARAM_ROUTINE_WAKERITFORSHTDWN,
 #endif
-       NOPARAM_ROUTINE_INIT_MESSAGE_PUMP,
-       NOPARAM_ROUTINE_UNINIT_MESSAGE_PUMP,
+    NOPARAM_ROUTINE_INIT_MESSAGE_PUMP,
+    NOPARAM_ROUTINE_UNINIT_MESSAGE_PUMP,
 #if (WIN32K_VERSION < NTDDI_VISTA)
-       NOPARAM_ROUTINE_LOADUSERAPIHOOK,
+    NOPARAM_ROUTINE_LOADUSERAPIHOOK,
 #endif
-       ONEPARAM_ROUTINE_BEGINDEFERWNDPOS,
+    ONEPARAM_ROUTINE_BEGINDEFERWNDPOS,
 #if (WIN32K_VERSION >= NTDDI_VISTA)
-       ONEPARAM_ROUTINE_GETSENDMSGRECVR,
+    ONEPARAM_ROUTINE_GETSENDMSGRECVR,
 #endif
-       ONEPARAM_ROUTINE_WINDOWFROMDC,
-       ONEPARAM_ROUTINE_ALLOWSETFOREGND,
-       ONEPARAM_ROUTINE_CREATEEMPTYCUROBJECT,
+    ONEPARAM_ROUTINE_WINDOWFROMDC,
+    ONEPARAM_ROUTINE_ALLOWSETFOREGND,
+    ONEPARAM_ROUTINE_CREATEEMPTYCUROBJECT,
 #if (WIN32K_VERSION < NTDDI_VISTA)
-       ONEPARAM_ROUTINE_CREATESYSTEMTHREADS,
+    ONEPARAM_ROUTINE_CREATESYSTEMTHREADS,
 #endif
-       ONEPARAM_ROUTINE_CSDDEUNINITIALIZE,
-       ONEPARAM_ROUTINE_DIRECTEDYIELD,
-       ONEPARAM_ROUTINE_ENUMCLIPBOARDFORMATS,
+    ONEPARAM_ROUTINE_CSDDEUNINITIALIZE,
+    ONEPARAM_ROUTINE_DIRECTEDYIELD,
+    ONEPARAM_ROUTINE_ENUMCLIPBOARDFORMATS,
 #if (WIN32K_VERSION < NTDDI_VISTA)
-       ONEPARAM_ROUTINE_GETCURSORPOS,
+    ONEPARAM_ROUTINE_GETCURSORPOS,
 #endif
-       ONEPARAM_ROUTINE_GETINPUTEVENT,
-       ONEPARAM_ROUTINE_GETKEYBOARDLAYOUT,
-       ONEPARAM_ROUTINE_GETKEYBOARDTYPE,
-       ONEPARAM_ROUTINE_GETPROCDEFLAYOUT,
-       ONEPARAM_ROUTINE_GETQUEUESTATUS,
-       ONEPARAM_ROUTINE_GETWINSTAINFO,
+    ONEPARAM_ROUTINE_GETINPUTEVENT,
+    ONEPARAM_ROUTINE_GETKEYBOARDLAYOUT,
+    ONEPARAM_ROUTINE_GETKEYBOARDTYPE,
+    ONEPARAM_ROUTINE_GETPROCDEFLAYOUT,
+    ONEPARAM_ROUTINE_GETQUEUESTATUS,
+    ONEPARAM_ROUTINE_GETWINSTAINFO,
 #if (WIN32K_VERSION < NTDDI_VISTA)
-       ONEPARAM_ROUTINE_HANDLESYSTHRDCREATFAIL,
+    ONEPARAM_ROUTINE_HANDLESYSTHRDCREATFAIL,
 #endif
-       ONEPARAM_ROUTINE_LOCKFOREGNDWINDOW,
-       ONEPARAM_ROUTINE_LOADFONTS,
-       ONEPARAM_ROUTINE_MAPDEKTOPOBJECT,
-       ONEPARAM_ROUTINE_MESSAGEBEEP,
-       ONEPARAM_ROUTINE_PLAYEVENTSOUND,
-       ONEPARAM_ROUTINE_POSTQUITMESSAGE,
+    ONEPARAM_ROUTINE_LOCKFOREGNDWINDOW,
+    ONEPARAM_ROUTINE_LOADFONTS,
+    ONEPARAM_ROUTINE_MAPDEKTOPOBJECT,
+    ONEPARAM_ROUTINE_MESSAGEBEEP,
+    ONEPARAM_ROUTINE_PLAYEVENTSOUND,
+    ONEPARAM_ROUTINE_POSTQUITMESSAGE,
 #if (WIN32K_VERSION < NTDDI_VISTA)
-       ONEPARAM_ROUTINE_PREPAREFORLOGOFF,
+    ONEPARAM_ROUTINE_PREPAREFORLOGOFF,
 #endif
-       ONEPARAM_ROUTINE_REALIZEPALETTE,
-       ONEPARAM_ROUTINE_REGISTERLPK,
+    ONEPARAM_ROUTINE_REALIZEPALETTE,
+    ONEPARAM_ROUTINE_REGISTERLPK,
 #if (WIN32K_VERSION >= NTDDI_VISTA)
-       ONEPARAM_ROUTINE_REGISTERSYSTEMTHREAD,
+    ONEPARAM_ROUTINE_REGISTERSYSTEMTHREAD,
 #endif
-       ONEPARAM_ROUTINE_REMOTERECONNECT,
-       ONEPARAM_ROUTINE_REMOTETHINWIRESTATUS,
-       ONEPARAM_ROUTINE_RELEASEDC,
+    ONEPARAM_ROUTINE_REMOTERECONNECT,
+    ONEPARAM_ROUTINE_REMOTETHINWIRESTATUS,
+    ONEPARAM_ROUTINE_RELEASEDC,
 #if (WIN32K_VERSION >= NTDDI_VISTA)
-       ONEPARAM_ROUTINE_REMOTENOTIFY,
+    ONEPARAM_ROUTINE_REMOTENOTIFY,
 #endif
-       ONEPARAM_ROUTINE_REPLYMESSAGE,
-       ONEPARAM_ROUTINE_SETCARETBLINKTIME,
-       ONEPARAM_ROUTINE_SETDBLCLICKTIME,
+    ONEPARAM_ROUTINE_REPLYMESSAGE,
+    ONEPARAM_ROUTINE_SETCARETBLINKTIME,
+    ONEPARAM_ROUTINE_SETDBLCLICKTIME,
 #if (WIN32K_VERSION < NTDDI_VISTA)
-       ONEPARAM_ROUTINE_SETIMESHOWSTATUS,
+    ONEPARAM_ROUTINE_SETIMESHOWSTATUS,
 #endif
-       ONEPARAM_ROUTINE_SETMESSAGEEXTRAINFO,
-       ONEPARAM_ROUTINE_SETPROCDEFLAYOUT,
+    ONEPARAM_ROUTINE_SETMESSAGEEXTRAINFO,
+    ONEPARAM_ROUTINE_SETPROCDEFLAYOUT,
 #if (WIN32K_VERSION >= NTDDI_VISTA)
-       ONEPARAM_ROUTINE_SETWATERMARKSTRINGS,
+    ONEPARAM_ROUTINE_SETWATERMARKSTRINGS,
 #endif
-       ONEPARAM_ROUTINE_SHOWCURSOR,
-       ONEPARAM_ROUTINE_SHOWSTARTGLASS,
-       ONEPARAM_ROUTINE_SWAPMOUSEBUTTON,
-       X_ROUTINE_WOWMODULEUNLOAD,
+    ONEPARAM_ROUTINE_SHOWCURSOR,
+    ONEPARAM_ROUTINE_SHOWSTARTGLASS,
+    ONEPARAM_ROUTINE_SWAPMOUSEBUTTON,
+    X_ROUTINE_WOWMODULEUNLOAD,
 #if (WIN32K_VERSION < NTDDI_VISTA)
-       X_ROUTINE_REMOTENOTIFY,
+    X_ROUTINE_REMOTENOTIFY,
 #endif
-       HWND_ROUTINE_DEREGISTERSHELLHOOKWINDOW,
-       HWND_ROUTINE_DWP_GETENABLEDPOPUP,
-       HWND_ROUTINE_GETWNDCONTEXTHLPID,
-       HWND_ROUTINE_REGISTERSHELLHOOKWINDOW,
-       HWND_ROUTINE_SETMSGBOX,
-       HWNDOPT_ROUTINE_SETPROGMANWINDOW,
-       HWNDOPT_ROUTINE_SETTASKMANWINDOW,
-       HWNDPARAM_ROUTINE_GETCLASSICOCUR,
-       HWNDPARAM_ROUTINE_CLEARWINDOWSTATE,
-       HWNDPARAM_ROUTINE_KILLSYSTEMTIMER,
-       HWNDPARAM_ROUTINE_SETDIALOGPOINTER,
-       HWNDPARAM_ROUTINE_SETVISIBLE,
-       HWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID,
-       HWNDPARAM_ROUTINE_SETWINDOWSTATE,
-       HWNDLOCK_ROUTINE_WINDOWHASSHADOW, /* correct prefix ? */
-       HWNDLOCK_ROUTINE_ARRANGEICONICWINDOWS,
-       HWNDLOCK_ROUTINE_DRAWMENUBAR,
-       HWNDLOCK_ROUTINE_CHECKIMESHOWSTATUSINTHRD,
-       HWNDLOCK_ROUTINE_GETSYSMENUHANDLE,
-       HWNDLOCK_ROUTINE_REDRAWFRAME,
-       HWNDLOCK_ROUTINE_REDRAWFRAMEANDHOOK,
-       HWNDLOCK_ROUTINE_SETDLGSYSMENU,
-       HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOW,
-       HWNDLOCK_ROUTINE_SETSYSMENU,
-       HWNDLOCK_ROUTINE_UPDATECKIENTRECT,
-       HWNDLOCK_ROUTINE_UPDATEWINDOW,
-       X_ROUTINE_IMESHOWSTATUSCHANGE,
-       TWOPARAM_ROUTINE_ENABLEWINDOW,
-       TWOPARAM_ROUTINE_REDRAWTITLE,
-       TWOPARAM_ROUTINE_SHOWOWNEDPOPUPS,
-       TWOPARAM_ROUTINE_SWITCHTOTHISWINDOW,
-       TWOPARAM_ROUTINE_UPDATEWINDOWS,
-       TWOPARAM_ROUTINE_VALIDATERGN,
+    HWND_ROUTINE_DEREGISTERSHELLHOOKWINDOW,
+    HWND_ROUTINE_DWP_GETENABLEDPOPUP,
+    HWND_ROUTINE_GETWNDCONTEXTHLPID,
+    HWND_ROUTINE_REGISTERSHELLHOOKWINDOW,
+    HWND_ROUTINE_SETMSGBOX,
+    HWNDOPT_ROUTINE_SETPROGMANWINDOW,
+    HWNDOPT_ROUTINE_SETTASKMANWINDOW,
+    HWNDPARAM_ROUTINE_GETCLASSICOCUR,
+    HWNDPARAM_ROUTINE_CLEARWINDOWSTATE,
+    HWNDPARAM_ROUTINE_KILLSYSTEMTIMER,
+    HWNDPARAM_ROUTINE_SETDIALOGPOINTER,
+    HWNDPARAM_ROUTINE_SETVISIBLE,
+    HWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID,
+    HWNDPARAM_ROUTINE_SETWINDOWSTATE,
+    HWNDLOCK_ROUTINE_WINDOWHASSHADOW, /* correct prefix ? */
+    HWNDLOCK_ROUTINE_ARRANGEICONICWINDOWS,
+    HWNDLOCK_ROUTINE_DRAWMENUBAR,
+    HWNDLOCK_ROUTINE_CHECKIMESHOWSTATUSINTHRD,
+    HWNDLOCK_ROUTINE_GETSYSMENUHANDLE,
+    HWNDLOCK_ROUTINE_REDRAWFRAME,
+    HWNDLOCK_ROUTINE_REDRAWFRAMEANDHOOK,
+    HWNDLOCK_ROUTINE_SETDLGSYSMENU,
+    HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOW,
+    HWNDLOCK_ROUTINE_SETSYSMENU,
+    HWNDLOCK_ROUTINE_UPDATECKIENTRECT,
+    HWNDLOCK_ROUTINE_UPDATEWINDOW,
+    TWOPARAM_ROUTINE_IMESHOWSTATUSCHANGE,
+    TWOPARAM_ROUTINE_ENABLEWINDOW,
+    TWOPARAM_ROUTINE_REDRAWTITLE,
+    TWOPARAM_ROUTINE_SHOWOWNEDPOPUPS,
+    TWOPARAM_ROUTINE_SWITCHTOTHISWINDOW,
+    TWOPARAM_ROUTINE_UPDATEWINDOWS,
+    TWOPARAM_ROUTINE_VALIDATERGN,
 #if (WIN32K_VERSION >= NTDDI_VISTA)
-       TWOPARAM_ROUTINE_CHANGEWNDMSGFILTER,
-       TWOPARAM_ROUTINE_GETCURSORPOS,
+    TWOPARAM_ROUTINE_CHANGEWNDMSGFILTER,
+    TWOPARAM_ROUTINE_GETCURSORPOS,
 #endif
-       TWOPARAM_ROUTINE_GETHDEVNAME,
-       TWOPARAM_ROUTINE_INITANSIOEM,
-       TWOPARAM_ROUTINE_NLSSENDIMENOTIFY,
+    TWOPARAM_ROUTINE_GETHDEVNAME,
+    TWOPARAM_ROUTINE_INITANSIOEM,
+    TWOPARAM_ROUTINE_NLSSENDIMENOTIFY,
 #if (WIN32K_VERSION >= NTDDI_VISTA)
-       TWOPARAM_ROUTINE_REGISTERGHSTWND,
+    TWOPARAM_ROUTINE_REGISTERGHSTWND,
 #endif
-       TWOPARAM_ROUTINE_REGISTERLOGONPROCESS,
+    TWOPARAM_ROUTINE_REGISTERLOGONPROCESS,
 #if (WIN32K_VERSION >= NTDDI_VISTA)
-       TWOPARAM_ROUTINE_REGISTERSBLFROSTWND,
+    TWOPARAM_ROUTINE_REGISTERSBLFROSTWND,
 #else
-       TWOPARAM_ROUTINE_REGISTERSYSTEMTHREAD,
+    TWOPARAM_ROUTINE_REGISTERSYSTEMTHREAD,
 #endif
-       TWOPARAM_ROUTINE_REGISTERUSERHUNGAPPHANDLERS,
-       TWOPARAM_ROUTINE_SHADOWCLEANUP,
-       TWOPARAM_ROUTINE_REMOTESHADOWSTART,
-       TWOPARAM_ROUTINE_SETCARETPOS,
-       TWOPARAM_ROUTINE_SETCURSORPOS,
+    TWOPARAM_ROUTINE_REGISTERUSERHUNGAPPHANDLERS,
+    TWOPARAM_ROUTINE_SHADOWCLEANUP,
+    TWOPARAM_ROUTINE_REMOTESHADOWSTART,
+    TWOPARAM_ROUTINE_SETCARETPOS,
+    TWOPARAM_ROUTINE_SETCURSORPOS,
 #if (WIN32K_VERSION >= NTDDI_VISTA)
-       TWOPARAM_ROUTINE_SETPHYSCURSORPOS,
+    TWOPARAM_ROUTINE_SETPHYSCURSORPOS,
 #endif
-       TWOPARAM_ROUTINE_UNHOOKWINDOWSHOOK,
-       TWOPARAM_ROUTINE_WOWCLEANUP
+    TWOPARAM_ROUTINE_UNHOOKWINDOWSHOOK,
+    TWOPARAM_ROUTINE_WOWCLEANUP
 };
 
 DWORD
 NTAPI
 NtUserCallHwnd(
-  HWND hWnd,
-  DWORD Routine);
+    HWND hWnd,
+    DWORD Routine);
 
 BOOL
 NTAPI
 NtUserCallHwndLock(
-  HWND hWnd,
-  DWORD Routine);
+    HWND hWnd,
+    DWORD Routine);
 
 HWND
 NTAPI
 NtUserCallHwndOpt(
-  HWND hWnd,
-  DWORD Routine);
+    HWND hWnd,
+    DWORD Routine);
 
 DWORD
 NTAPI
 NtUserCallHwndParam(
-  HWND hWnd,
-  DWORD Param,
-  DWORD Routine);
+    HWND hWnd,
+    DWORD_PTR Param,
+    DWORD Routine);
 
 DWORD
 NTAPI
 NtUserCallHwndParamLock(
-  HWND hWnd,
-  DWORD Param,
-  DWORD Routine);
+    HWND hWnd,
+    DWORD_PTR Param,
+    DWORD Routine);
 
 BOOL
 NTAPI
 NtUserCallMsgFilter(
-  LPMSG msg,
-  INT code);
+    LPMSG msg,
+    INT code);
 
 LRESULT
 NTAPI
 NtUserCallNextHookEx(
-  int Code,
-  WPARAM wParam,
-  LPARAM lParam,
-  BOOL Ansi);
+    int Code,
+    WPARAM wParam,
+    LPARAM lParam,
+    BOOL Ansi);
 
 DWORD_PTR
 NTAPI
 NtUserCallNoParam(
-  DWORD Routine);
+    DWORD Routine);
 
 DWORD_PTR
 NTAPI
 NtUserCallOneParam(
-  DWORD_PTR Param,
-  DWORD Routine);
+    DWORD_PTR Param,
+    DWORD Routine);
 
 DWORD_PTR
 NTAPI
 NtUserCallTwoParam(
-  DWORD_PTR Param1,
-  DWORD_PTR Param2,
-  DWORD Routine);
+    DWORD_PTR Param1,
+    DWORD_PTR Param2,
+    DWORD Routine);
 
 BOOL
 NTAPI
 NtUserChangeClipboardChain(
-  HWND hWndRemove,
-  HWND hWndNewNext);
+    HWND hWndRemove,
+    HWND hWndNewNext);
 
 LONG
 NTAPI
 NtUserChangeDisplaySettings(
-  PUNICODE_STRING lpszDeviceName,
-  LPDEVMODEW lpDevMode,
-  HWND hwnd,
-  DWORD dwflags,
-  LPVOID lParam);
+    PUNICODE_STRING lpszDeviceName,
+    LPDEVMODEW lpDevMode,
+    DWORD dwflags,
+    LPVOID lParam);
 
 BOOL
 NTAPI
 NtUserCheckDesktopByThreadId(
-  DWORD dwThreadId);
+    DWORD dwThreadId);
 
 BOOL
 NTAPI
 NtUserCheckWindowThreadDesktop(
-  HWND hwnd,
-  DWORD dwThreadId,
-  ULONG ReturnValue);
+    HWND hwnd,
+    DWORD dwThreadId,
+    ULONG ReturnValue);
 
 DWORD
 NTAPI
 NtUserCheckImeHotKey(
-  DWORD dwUnknown1,
-  DWORD dwUnknown2);
+    UINT uVirtualKey,
+    LPARAM lParam);
 
 HWND NTAPI
 NtUserChildWindowFromPointEx(
-  HWND Parent,
-  LONG x,
-  LONG y,
-  UINT Flags);
+    HWND Parent,
+    LONG x,
+    LONG y,
+    UINT Flags);
 
 BOOL
 NTAPI
@@ -1625,21 +1785,28 @@ NtUserCloseClipboard(VOID);
 BOOL
 NTAPI
 NtUserCloseDesktop(
-  HDESK hDesktop);
+    HDESK hDesktop);
 
 BOOL
 NTAPI
 NtUserCloseWindowStation(
-  HWINSTA hWinSta);
+    HWINSTA hWinSta);
 
 /* Console commands for NtUserConsoleControl */
 typedef enum _CONSOLECONTROL
 {
-    GuiConsoleWndClassAtom,
+    ConsoleCtrlDesktopConsoleThread = 0,
+    GuiConsoleWndClassAtom = 1,
     ConsoleMakePalettePublic = 5,
     ConsoleAcquireDisplayOwnership,
 } CONSOLECONTROL, *PCONSOLECONTROL;
 
+typedef struct _DESKTOP_CONSOLE_THREAD
+{
+    HDESK DesktopHandle;
+    ULONG_PTR ThreadId;
+} DESKTOP_CONSOLE_THREAD, *PDESKTOP_CONSOLE_THREAD;
+
 NTSTATUS
 APIENTRY
 NtUserConsoleControl(
@@ -1650,15 +1817,15 @@ NtUserConsoleControl(
 HANDLE
 NTAPI
 NtUserConvertMemHandle(
-  PVOID pData,
-  DWORD cbData);
+    PVOID pData,
+    DWORD cbData);
 
 ULONG
 NTAPI
 NtUserCopyAcceleratorTable(
-  HACCEL Table,
-  LPACCEL Entries,
-  ULONG EntriesCount);
+    HACCEL Table,
+    LPACCEL Entries,
+    ULONG EntriesCount);
 
 DWORD
 NTAPI
@@ -1667,199 +1834,204 @@ NtUserCountClipboardFormats(VOID);
 HACCEL
 NTAPI
 NtUserCreateAcceleratorTable(
-  LPACCEL Entries,
-  ULONG EntriesCount);
+    LPACCEL Entries,
+    ULONG EntriesCount);
 
 BOOL
 NTAPI
 NtUserCreateCaret(
-  HWND hWnd,
-  HBITMAP hBitmap,
-  int nWidth,
-  int nHeight);
+    HWND hWnd,
+    HBITMAP hBitmap,
+    int nWidth,
+    int nHeight);
 
 HDESK
 NTAPI
 NtUserCreateDesktop(
-  POBJECT_ATTRIBUTES poa,
-  PUNICODE_STRING lpszDesktopDevice,
-  LPDEVMODEW lpdmw,
-  DWORD dwFlags,
-  ACCESS_MASK dwDesiredAccess);
+    POBJECT_ATTRIBUTES poa,
+    PUNICODE_STRING lpszDesktopDevice,
+    LPDEVMODEW lpdmw,
+    DWORD dwFlags,
+    ACCESS_MASK dwDesiredAccess);
 
-DWORD
+HIMC
 NTAPI
-NtUserCreateInputContext(
-    DWORD dwUnknown1);
+NtUserCreateInputContext(ULONG_PTR dwClientImcData);
 
 NTSTATUS
 NTAPI
 NtUserCreateLocalMemHandle(
-  HANDLE hMem,
-  PVOID pData,
-  DWORD cbData,
-  DWORD *pcbData);
+    HANDLE hMem,
+    PVOID pData,
+    DWORD cbData,
+    DWORD *pcbData);
 
 HWND
 NTAPI
 NtUserCreateWindowEx(
-  DWORD dwExStyle,
-  PLARGE_STRING plstrClassName,
-  PLARGE_STRING plstrClsVersion,
-  PLARGE_STRING plstrWindowName,
-  DWORD dwStyle,
-  int x,
-  int y,
-  int nWidth,
-  int nHeight,
-  HWND hWndParent,
-  HMENU hMenu,
-  HINSTANCE hInstance,
-  LPVOID lpParam,
-  DWORD dwFlags,
-  PVOID acbiBuffer);
+    DWORD dwExStyle,
+    PLARGE_STRING plstrClassName,
+    PLARGE_STRING plstrClsVersion,
+    PLARGE_STRING plstrWindowName,
+    DWORD dwStyle,
+    int x,
+    int y,
+    int nWidth,
+    int nHeight,
+    HWND hWndParent,
+    HMENU hMenu,
+    HINSTANCE hInstance,
+    LPVOID lpParam,
+    DWORD dwFlags,
+    PVOID acbiBuffer);
 
 HWINSTA
 NTAPI
 NtUserCreateWindowStation(
-  POBJECT_ATTRIBUTES ObjectAttributes,
-  ACCESS_MASK dwDesiredAccess,
-  DWORD Unknown2,
-  DWORD Unknown3,
-  DWORD Unknown4,
-  DWORD Unknown5,
-  DWORD Unknown6);
+    POBJECT_ATTRIBUTES ObjectAttributes,
+    ACCESS_MASK dwDesiredAccess,
+    DWORD Unknown2,
+    DWORD Unknown3,
+    DWORD Unknown4,
+    DWORD Unknown5,
+    DWORD Unknown6);
 
 BOOL
 NTAPI
 NtUserDdeGetQualityOfService(
-  IN HWND hwndClient,
-  IN HWND hWndServer,
-  OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev);
+    IN HWND hwndClient,
+    IN HWND hWndServer,
+    OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev);
 
 DWORD
 NTAPI
 NtUserDdeInitialize(
-  DWORD Unknown0,
-  DWORD Unknown1,
-  DWORD Unknown2,
-  DWORD Unknown3,
-  DWORD Unknown4);
+    DWORD Unknown0,
+    DWORD Unknown1,
+    DWORD Unknown2,
+    DWORD Unknown3,
+    DWORD Unknown4);
 
 BOOL
 NTAPI
 NtUserDdeSetQualityOfService(
-  IN  HWND hwndClient,
-  IN  PSECURITY_QUALITY_OF_SERVICE pqosNew,
-  OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev);
+    IN HWND hwndClient,
+    IN PSECURITY_QUALITY_OF_SERVICE pqosNew,
+    OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev);
 
-HDWP NTAPI
+HDWP
+NTAPI
 NtUserDeferWindowPos(
-  HDWP WinPosInfo,
-  HWND Wnd,
-  HWND WndInsertAfter,
-  int x,
-  int y,
-  int cx,
-  int cy,
-  UINT Flags);
-
-BOOL NTAPI
-NtUserDefSetText(HWND WindowHandle, PLARGE_STRING WindowText);
+    HDWP WinPosInfo,
+    HWND Wnd,
+    HWND WndInsertAfter,
+    int x,
+    int y,
+    int cx,
+    int cy,
+    UINT Flags);
+
+BOOL
+NTAPI
+NtUserDefSetText(
+    HWND WindowHandle,
+    PLARGE_STRING WindowText);
 
 BOOLEAN
 NTAPI
 NtUserDestroyAcceleratorTable(
-  HACCEL Table);
+    HACCEL Table);
 
 BOOL
 NTAPI
 NtUserDestroyCursor(
-  _In_  HANDLE Handle,
-  _In_  BOOL bForce);
+  _In_ HANDLE Handle,
+  _In_ BOOL bForce);
 
-DWORD
+BOOL
 NTAPI
-NtUserDestroyInputContext(
-    DWORD dwUnknown1);
+NtUserDestroyInputContext(HIMC hIMC);
 
-BOOLEAN NTAPI
-NtUserDestroyWindow(HWND Wnd);
+BOOLEAN
+NTAPI
+NtUserDestroyWindow(
+    HWND Wnd);
 
-DWORD
+BOOL
 NTAPI
 NtUserDisableThreadIme(
-    DWORD dwUnknown1);
+    DWORD dwThreadID);
 
 LRESULT
 NTAPI
-NtUserDispatchMessage(PMSG pMsg);
+NtUserDispatchMessage(
+    PMSG pMsg);
 
 BOOL
 NTAPI
 NtUserDragDetect(
-  HWND hWnd,
-  POINT pt);
+    HWND hWnd,
+    POINT pt);
 
 DWORD
 NTAPI
 NtUserDragObject(
-   HWND    hwnd1,
-   HWND    hwnd2,
-   UINT    u1,
-   DWORD   dw1,
-   HCURSOR hc1);
+    HWND hwnd1,
+    HWND hwnd2,
+    UINT u1,
+    DWORD dw1,
+    HCURSOR hc1);
 
 BOOL
 NTAPI
 NtUserDrawAnimatedRects(
-  HWND hwnd,
-  INT idAni,
-  RECT *lprcFrom,
-  RECT *lprcTo);
+    HWND hwnd,
+    INT idAni,
+    RECT *lprcFrom,
+    RECT *lprcTo);
 
 BOOL
 NTAPI
 NtUserDrawCaption(
-   HWND hWnd,
-   HDC hDc,
-   LPCRECT lpRc,
-   UINT uFlags);
+    HWND hWnd,
+    HDC hDc,
+    LPCRECT lpRc,
+    UINT uFlags);
 
 BOOL
 NTAPI
 NtUserDrawCaptionTemp(
-  HWND hWnd,
-  HDC hDC,
-  LPCRECT lpRc,
-  HFONT hFont,
-  HICON hIcon,
-  const PUNICODE_STRING str,
-  UINT uFlags);
-
-// Used with NtUserDrawIconEx, last parameter.
+    HWND hWnd,
+    HDC hDC,
+    LPCRECT lpRc,
+    HFONT hFont,
+    HICON hIcon,
+    const PUNICODE_STRING str,
+    UINT uFlags);
+
+/* Used with NtUserDrawIconEx, last parameter. */
 typedef struct _DRAWICONEXDATA
 {
-  HBITMAP hbmMask;
-  HBITMAP hbmColor;
-  int cx;
-  int cy;
+    HBITMAP hbmMask;
+    HBITMAP hbmColor;
+    int cx;
+    int cy;
 } DRAWICONEXDATA, *PDRAWICONEXDATA;
 
 BOOL
 NTAPI
 NtUserDrawIconEx(
-  HDC hdc,
-  int xLeft,
-  int yTop,
-  HICON hIcon,
-  int cxWidth,
-  int cyWidth,
-  UINT istepIfAniCur,
-  HBRUSH hbrFlickerFreeDraw,
-  UINT diFlags,
-  BOOL bMetaHDC,
-  PVOID pDIXData);
+    HDC hdc,
+    int xLeft,
+    int yTop,
+    HICON hIcon,
+    int cxWidth,
+    int cyWidth,
+    UINT istepIfAniCur,
+    HBRUSH hbrFlickerFreeDraw,
+    UINT diFlags,
+    BOOL bMetaHDC,
+    PVOID pDIXData);
 
 BOOL
 NTAPI
@@ -1868,112 +2040,118 @@ NtUserEmptyClipboard(VOID);
 BOOL
 NTAPI
 NtUserEnableScrollBar(
-  HWND hWnd,
-  UINT wSBflags,
-  UINT wArrows);
+    HWND hWnd,
+    UINT wSBflags,
+    UINT wArrows);
 
 BOOL
 NTAPI
 NtUserEndDeferWindowPosEx(
-  HDWP WinPosInfo,
-  DWORD Unknown1);
+    HDWP WinPosInfo,
+    BOOL bAsync);
 
-BOOL NTAPI
-NtUserEndPaint(HWND hWnd, CONST PAINTSTRUCT* lPs);
+BOOL
+NTAPI
+NtUserEndPaint(
+    HWND hWnd,
+    CONST PAINTSTRUCT *lPs);
 
 BOOL
 NTAPI
-NtUserEnumDisplayDevices (
-  PUNICODE_STRING lpDevice, /* device name */
-  DWORD iDevNum, /* display device */
-  PDISPLAY_DEVICEW lpDisplayDevice, /* device information */
-  DWORD dwFlags ); /* reserved */
+NtUserEnumDisplayDevices(
+    PUNICODE_STRING lpDevice, /* device name */
+    DWORD iDevNum, /* display device */
+    PDISPLAY_DEVICEW lpDisplayDevice, /* device information */
+    DWORD dwFlags); /* reserved */
 
-/*BOOL
+/*
+BOOL
 NTAPI
-NtUserEnumDisplayMonitors (
-  HDC hdc,
-  LPCRECT lprcClip,
-  MONITORENUMPROC lpfnEnum,
-  LPARAM dwData );*/
-/* FIXME:  The call below is ros-specific and should be rewritten to use the same params as the correct call above.  */
+NtUserEnumDisplayMonitors(
+    HDC hdc,
+    LPCRECT lprcClip,
+    MONITORENUMPROC lpfnEnum,
+    LPARAM dwData);
+*/
+/* FIXME:  The call below is ros-specific and should be rewritten to use the same params as the correct call above. */
 INT
 NTAPI
 NtUserEnumDisplayMonitors(
-  OPTIONAL IN HDC hDC,
-  OPTIONAL IN LPCRECT pRect,
-  OPTIONAL OUT HMONITOR *hMonitorList,
-  OPTIONAL OUT LPRECT monitorRectList,
-  OPTIONAL IN DWORD listSize );
+    OPTIONAL IN HDC hDC,
+    OPTIONAL IN LPCRECT pRect,
+    OPTIONAL OUT HMONITOR *hMonitorList,
+    OPTIONAL OUT LPRECT monitorRectList,
+    OPTIONAL IN DWORD listSize);
 
 
 NTSTATUS
 NTAPI
 NtUserEnumDisplaySettings(
-  PUNICODE_STRING lpszDeviceName,
-  DWORD iModeNum,
-  LPDEVMODEW lpDevMode, /* FIXME is this correct? */
-  DWORD dwFlags );
+    PUNICODE_STRING lpszDeviceName,
+    DWORD iModeNum,
+    LPDEVMODEW lpDevMode, /* FIXME is this correct? */
+    DWORD dwFlags);
 
 DWORD
 NTAPI
 NtUserEvent(
-  DWORD Unknown0);
+    DWORD Unknown0);
 
-DWORD
+INT
 NTAPI
 NtUserExcludeUpdateRgn(
-  HDC hDC,
-  HWND hWnd);
+    HDC hDC,
+    HWND hWnd);
 
 BOOL
 NTAPI
 NtUserFillWindow(
-  HWND hWndPaint,
-  HWND hWndPaint1,
-  HDC  hDC,
-  HBRUSH hBrush);
+    HWND hWndPaint,
+    HWND hWndPaint1,
+    HDC hDC,
+    HBRUSH hBrush);
 
 HWND
 NTAPI
 NtUserFindWindowEx(
-  HWND  hwndParent,
-  HWND  hwndChildAfter,
-  PUNICODE_STRING  ucClassName,
-  PUNICODE_STRING  ucWindowName,
-  DWORD dwUnknown
-  );
+    HWND hwndParent,
+    HWND hwndChildAfter,
+    PUNICODE_STRING ucClassName,
+    PUNICODE_STRING ucWindowName,
+    DWORD dwUnknown);
 
 BOOL
 NTAPI
 NtUserFlashWindowEx(
-  IN PFLASHWINFO pfwi);
+    IN PFLASHWINFO pfwi);
 
 BOOL
 NTAPI
 NtUserGetAltTabInfo(
-   HWND hwnd,
-   INT  iItem,
-   PALTTABINFO pati,
-   LPWSTR pszItemText,
-   UINT   cchItemText,
-   BOOL   Ansi);
+    HWND hwnd,
+    INT iItem,
+    PALTTABINFO pati,
+    LPWSTR pszItemText,
+    UINT cchItemText,
+    BOOL Ansi);
 
-HWND NTAPI
-NtUserGetAncestor(HWND hWnd, UINT Flags);
+HWND
+NTAPI
+NtUserGetAncestor(
+    HWND hWnd,
+    UINT Flags);
 
 DWORD
 NTAPI
-NtUserGetAppImeLevel(
-    DWORD dwUnknown1);
+NtUserGetAppImeLevel(HWND hWnd);
 
 SHORT
 NTAPI
 NtUserGetAsyncKeyState(
-  INT Key);
+    INT Key);
 
-_Success_(return!=0)
-_At_(pustrName->Buffer, _Out_z_bytecap_post_bytecount_(pustrName->MaximumLength, return*2+2))
+_Success_(return != 0)
+_At_(pustrName->Buffer, _Out_z_bytecap_post_bytecount_(pustrName->MaximumLength, return * 2 + 2))
 ULONG
 APIENTRY
 NtUserGetAtomName(
@@ -1987,33 +2165,36 @@ NtUserGetCaretBlinkTime(VOID);
 BOOL
 NTAPI
 NtUserGetCaretPos(
-  LPPOINT lpPoint);
+    LPPOINT lpPoint);
 
-BOOL NTAPI
-NtUserGetClassInfo(HINSTANCE hInstance,
-                  PUNICODE_STRING ClassName,
-                  LPWNDCLASSEXW wcex,
-                  LPWSTR *ppszMenuName,
-                  BOOL Ansi);
+BOOL
+NTAPI
+NtUserGetClassInfo(
+    HINSTANCE hInstance,
+    PUNICODE_STRING ClassName,
+    LPWNDCLASSEXW wcex,
+    LPWSTR *ppszMenuName,
+    BOOL Ansi);
 
 INT
 NTAPI
-NtUserGetClassName(HWND hWnd,
-                   BOOL Real, // 0 GetClassNameW, 1 RealGetWindowClassA/W
-                   PUNICODE_STRING ClassName);
+NtUserGetClassName(
+    HWND hWnd,
+    BOOL Real, /* 0 GetClassNameW, 1 RealGetWindowClassA/W */
+    PUNICODE_STRING ClassName);
 
 HANDLE
 NTAPI
 NtUserGetClipboardData(
-  UINT fmt,
-  PGETCLIPBDATA pgcd);
+    UINT fmt,
+    PGETCLIPBDATA pgcd);
 
 INT
 NTAPI
 NtUserGetClipboardFormatName(
-  UINT uFormat,
-  LPWSTR lpszFormatName,
-  INT cchMaxCount);
+    UINT uFormat,
+    LPWSTR lpszFormatName,
+    INT cchMaxCount);
 
 HWND
 NTAPI
@@ -2030,60 +2211,60 @@ NtUserGetClipboardViewer(VOID);
 BOOL
 NTAPI
 NtUserGetClipCursor(
-  RECT *lpRect);
+    RECT *lpRect);
 
 BOOL
 NTAPI
 NtUserGetComboBoxInfo(
-  HWND hWnd,
-  PCOMBOBOXINFO pcbi);
+    HWND hWnd,
+    PCOMBOBOXINFO pcbi);
 
 HBRUSH
 NTAPI
 NtUserGetControlBrush(
-  HWND hwnd,
-  HDC  hdc,
-  UINT ctlType);
+    HWND hwnd,
+    HDC  hdc,
+    UINT ctlType);
 
 HBRUSH
 NTAPI
 NtUserGetControlColor(
-   HWND hwndParent,
-   HWND hwnd,
-   HDC hdc,
-   UINT CtlMsg);
+    HWND hwndParent,
+    HWND hwnd,
+    HDC hdc,
+    UINT CtlMsg);
 
 ULONG_PTR
 NTAPI
 NtUserGetCPD(
-  HWND hWnd,
-  GETCPD Flags,
-  ULONG_PTR Proc);
+    HWND hWnd,
+    GETCPD Flags,
+    ULONG_PTR Proc);
 
 HCURSOR
 NTAPI
 NtUserGetCursorFrameInfo(
-  HCURSOR hCursor,
-  DWORD istep,
-  INT* rate_jiffies,
-  DWORD* num_steps);
+    HCURSOR hCursor,
+    DWORD istep,
+    INT *rate_jiffies,
+    DWORD *num_steps);
 
 BOOL
 NTAPI
 NtUserGetCursorInfo(
-  PCURSORINFO pci);
+    PCURSORINFO pci);
 
 HDC
 NTAPI
 NtUserGetDC(
-  HWND hWnd);
+    HWND hWnd);
 
 HDC
 NTAPI
 NtUserGetDCEx(
-  HWND hWnd,
-  HANDLE hRegion,
-  ULONG Flags);
+    HWND hWnd,
+    HANDLE hRegion,
+    ULONG Flags);
 
 UINT
 NTAPI
@@ -2096,89 +2277,91 @@ NtUserGetForegroundWindow(VOID);
 DWORD
 NTAPI
 NtUserGetGuiResources(
-  HANDLE hProcess,
-  DWORD uiFlags);
+    HANDLE hProcess,
+    DWORD uiFlags);
 
 BOOL
 NTAPI
 NtUserGetGUIThreadInfo(
-  DWORD idThread,
-  LPGUITHREADINFO lpgui);
+    DWORD idThread,
+    LPGUITHREADINFO lpgui);
 
-_Success_(return!=FALSE)
+_Success_(return != FALSE)
 BOOL
 NTAPI
 NtUserGetIconInfo(
-   _In_      HANDLE hCurIcon,
-   _Out_opt_ PICONINFO IconInfo,
-   _Inout_opt_ PUNICODE_STRING lpInstName,
-   _Inout_opt_ PUNICODE_STRING lpResName,
-   _Out_opt_ LPDWORD pbpp,
-   _In_      BOOL bInternal);
+    _In_ HANDLE hCurIcon,
+    _Out_opt_ PICONINFO IconInfo,
+    _Inout_opt_ PUNICODE_STRING lpInstName,
+    _Inout_opt_ PUNICODE_STRING lpResName,
+    _Out_opt_ LPDWORD pbpp,
+    _In_ BOOL bInternal);
 
 BOOL
 NTAPI
 NtUserGetIconSize(
     HANDLE Handle,
     UINT istepIfAniCur,
-    LONG  *plcx,
-    LONG  *plcy);
+    LONG *plcx,
+    LONG *plcy);
 
-DWORD
+BOOL
 NTAPI
-NtUserGetImeHotKey(
-  DWORD Unknown0,
-  DWORD Unknown1,
-  DWORD Unknown2,
-  DWORD Unknown3);
+NtUserGetImeHotKey(DWORD dwHotKeyId,
+                   LPUINT lpuModifiers,
+                   LPUINT lpuVirtualKey,
+                   LPHKL lphKL);
 
-DWORD
+BOOL
 NTAPI
 NtUserGetImeInfoEx(
-    DWORD dwUnknown1,
-    DWORD dwUnknown2);
+    PIMEINFOEX pImeInfoEx,
+    IMEINFOEXCLASS SearchType);
 
 DWORD
 NTAPI
 NtUserGetInternalWindowPos(
-  HWND hwnd,
-  LPRECT rectWnd,
-  LPPOINT ptIcon);
+    HWND hwnd,
+    LPRECT rectWnd,
+    LPPOINT ptIcon);
 
 HKL
 NTAPI
 NtUserGetKeyboardLayout(
-  DWORD dwThreadid);
+    DWORD dwThreadid);
 
 UINT
 NTAPI
 NtUserGetKeyboardLayoutList(
-  ULONG nItems,
-  HKL *pHklBuff);
+    ULONG nItems,
+    HKL *pHklBuff);
 
 BOOL
 NTAPI
 NtUserGetKeyboardLayoutName(
-  LPWSTR lpszName);
+    _Inout_ PUNICODE_STRING pustrName);
 
 DWORD
 NTAPI
 NtUserGetKeyboardState(
-  LPBYTE Unknown0);
+    LPBYTE Unknown0);
 
 DWORD
 NTAPI
 NtUserGetKeyboardType(
-  DWORD TypeFlag);
+    DWORD TypeFlag);
 
 DWORD
 NTAPI
-NtUserGetKeyNameText( LONG lParam, LPWSTR lpString, int nSize );
+NtUserGetKeyNameText(
+    LONG lParam,
+    LPWSTR lpString,
+    int nSize);
 
 SHORT
 NTAPI
 NtUserGetKeyState(
-  INT VirtKey);
+    INT VirtKey);
 
 BOOL
 NTAPI
@@ -2191,31 +2374,33 @@ NtUserGetLayeredWindowAttributes(
 DWORD
 NTAPI
 NtUserGetListBoxInfo(
-  HWND hWnd);
+    HWND hWnd);
 
-BOOL APIENTRY
-NtUserGetMessage(PMSG pMsg,
-                 HWND hWnd,
-                 UINT MsgFilterMin,
-                 UINT MsgFilterMax);
+BOOL
+APIENTRY
+NtUserGetMessage(
+    PMSG pMsg,
+    HWND hWnd,
+    UINT MsgFilterMin,
+    UINT MsgFilterMax);
 
 DWORD
 NTAPI
 NtUserGetMouseMovePointsEx(
-  UINT cbSize,
-  LPMOUSEMOVEPOINT lppt,
-  LPMOUSEMOVEPOINT lpptBuf,
-  int nBufPoints,
-  DWORD resolution);
+    UINT cbSize,
+    LPMOUSEMOVEPOINT lppt,
+    LPMOUSEMOVEPOINT lpptBuf,
+    int nBufPoints,
+    DWORD resolution);
 
 BOOL
 NTAPI
 NtUserGetObjectInformation(
-  HANDLE hObject,
-  DWORD nIndex,
-  PVOID pvInformation,
-  DWORD nLength,
-  PDWORD nLengthNeeded);
+    HANDLE hObject,
+    DWORD nIndex,
+    PVOID pvInformation,
+    DWORD nLength,
+    PDWORD nLengthNeeded);
 
 HWND
 NTAPI
@@ -2224,8 +2409,8 @@ NtUserGetOpenClipboardWindow(VOID);
 INT
 NTAPI
 NtUserGetPriorityClipboardFormat(
-  UINT *paFormatPriorityList,
-  INT cFormats);
+    UINT *paFormatPriorityList,
+    INT cFormats);
 
 HWINSTA
 NTAPI
@@ -2241,11 +2426,11 @@ NtUserGetRawInputBuffer(
 DWORD
 NTAPI
 NtUserGetRawInputData(
-  HRAWINPUT hRawInput,
-  UINT uiCommand,
-  LPVOID pData,
-  PUINT pcbSize,
-  UINT cbSizeHeader);
+    HRAWINPUT hRawInput,
+    UINT uiCommand,
+    LPVOID pData,
+    PUINT pcbSize,
+    UINT cbSizeHeader);
 
 DWORD
 NTAPI
@@ -2272,70 +2457,82 @@ NtUserGetRegisteredRawInputDevices(
 BOOL
 NTAPI
 NtUserGetScrollBarInfo(
-  HWND hWnd,
-  LONG idObject,
-  PSCROLLBARINFO psbi);
+    HWND hWnd,
+    LONG idObject,
+    PSCROLLBARINFO psbi);
 
 HDESK
 NTAPI
 NtUserGetThreadDesktop(
-  DWORD dwThreadId,
-  DWORD Unknown1);
-
+    DWORD dwThreadId,
+    HDESK hConsoleDesktop);
 
 enum ThreadStateRoutines
 {
-    THREADSTATE_GETTHREADINFO,
-    THREADSTATE_INSENDMESSAGE,
-    THREADSTATE_FOCUSWINDOW,
+    THREADSTATE_FOCUSWINDOW = 0,
     THREADSTATE_ACTIVEWINDOW,
     THREADSTATE_CAPTUREWINDOW,
-    THREADSTATE_PROGMANWINDOW,
-    THREADSTATE_TASKMANWINDOW,
-    THREADSTATE_GETMESSAGETIME,
+    THREADSTATE_DEFAULTIMEWINDOW,
+    THREADSTATE_DEFAULTINPUTCONTEXT,
     THREADSTATE_GETINPUTSTATE,
+    THREADSTATE_GETCURSOR,
+    THREADSTATE_CHANGEBITS,
     THREADSTATE_UPTIMELASTREAD,
+    THREADSTATE_GETMESSAGEEXTRAINFO,
+    THREADSTATE_INSENDMESSAGE,
+    THREADSTATE_GETMESSAGETIME,
     THREADSTATE_FOREGROUNDTHREAD,
-    THREADSTATE_GETCURSOR
+    THREADSTATE_IMECOMPATFLAGS,
+    THREADSTATE_OLDKEYBOARDLAYOUT,
+    THREADSTATE_ISWINLOGON,
+    THREADSTATE_ISWINLOGON2,
+    THREADSTATE_CHECKCONIME,
+    THREADSTATE_GETTHREADINFO,
+    THREADSTATE_PROGMANWINDOW, /* FIXME: Delete this HACK */
+    THREADSTATE_TASKMANWINDOW, /* FIXME: Delete this HACK */
 };
 
 DWORD_PTR
 NTAPI
 NtUserGetThreadState(
-  DWORD Routine);
+    DWORD Routine);
 
 BOOLEAN
 NTAPI
 NtUserGetTitleBarInfo(
-  HWND hwnd,
-  PTITLEBARINFO pti);
+    HWND hwnd,
+    PTITLEBARINFO pti);
 
-BOOL NTAPI
-NtUserGetUpdateRect(HWND hWnd, LPRECT lpRect, BOOL fErase);
+BOOL
+NTAPI
+NtUserGetUpdateRect(
+    HWND hWnd,
+    LPRECT lpRect,
+    BOOL fErase);
 
-int
+INT
 NTAPI
 NtUserGetUpdateRgn(
-  HWND hWnd,
-  HRGN hRgn,
-  BOOL bErase);
+    HWND hWnd,
+    HRGN hRgn,
+    BOOL bErase);
 
 HDC
 NTAPI
 NtUserGetWindowDC(
-  HWND hWnd);
+    HWND hWnd);
 
 BOOL
 NTAPI
 NtUserGetWindowPlacement(
-  HWND hWnd,
-  WINDOWPLACEMENT *lpwndpl);
+    HWND hWnd,
+    WINDOWPLACEMENT *lpwndpl);
 
 PCLS
 NTAPI
 NtUserGetWOWClass(
-  HINSTANCE hInstance,
-  PUNICODE_STRING ClassName);
+    HINSTANCE hInstance,
+    PUNICODE_STRING ClassName);
 
 DWORD
 NTAPI
@@ -2347,46 +2544,46 @@ NtUserHardErrorControl(
 BOOL
 NTAPI
 NtUserImpersonateDdeClientWindow(
-  HWND hWndClient,
-  HWND hWndServer);
+    HWND hWndClient,
+    HWND hWndServer);
 
 NTSTATUS
 NTAPI
 NtUserInitialize(
-  DWORD   dwWinVersion,
-  HANDLE  hPowerRequestEvent,
-  HANDLE  hMediaRequestEvent);
+    DWORD dwWinVersion,
+    HANDLE hPowerRequestEvent,
+    HANDLE hMediaRequestEvent);
 
 NTSTATUS
 NTAPI
 NtUserInitializeClientPfnArrays(
-  PPFNCLIENT pfnClientA,
-  PPFNCLIENT pfnClientW,
-  PPFNCLIENTWORKER pfnClientWorker,
-  HINSTANCE hmodUser);
+    PPFNCLIENT pfnClientA,
+    PPFNCLIENT pfnClientW,
+    PPFNCLIENTWORKER pfnClientWorker,
+    HINSTANCE hmodUser);
 
 DWORD
 NTAPI
 NtUserInitTask(
-  DWORD Unknown0,
-  DWORD Unknown1,
-  DWORD Unknown2,
-  DWORD Unknown3,
-  DWORD Unknown4,
-  DWORD Unknown5,
-  DWORD Unknown6,
-  DWORD Unknown7,
-  DWORD Unknown8,
-  DWORD Unknown9,
-  DWORD Unknown10,
-  DWORD Unknown11);
+    DWORD Unknown0,
+    DWORD Unknown1,
+    DWORD Unknown2,
+    DWORD Unknown3,
+    DWORD Unknown4,
+    DWORD Unknown5,
+    DWORD Unknown6,
+    DWORD Unknown7,
+    DWORD Unknown8,
+    DWORD Unknown9,
+    DWORD Unknown10,
+    DWORD Unknown11);
 
 INT
 NTAPI
 NtUserInternalGetWindowText(
-  HWND hWnd,
-  LPWSTR lpString,
-  INT nMaxCount);
+    HWND hWnd,
+    LPWSTR lpString,
+    INT nMaxCount);
 
 BOOL
 NTAPI
@@ -2405,36 +2602,34 @@ NtUserInvalidateRgn(
 BOOL
 NTAPI
 NtUserIsClipboardFormatAvailable(
-  UINT format);
+    UINT format);
 
 BOOL
 NTAPI
-NtUserKillTimer
-(
- HWND hWnd,
- UINT_PTR uIDEvent
-);
+NtUserKillTimer(
+    HWND hWnd,
+    UINT_PTR uIDEvent);
 
 HKL
 NTAPI
 NtUserLoadKeyboardLayoutEx(
-   IN HANDLE Handle,
-   IN DWORD offTable,
-   IN PUNICODE_STRING puszKeyboardName,
-   IN HKL hKL,
-   IN PUNICODE_STRING puszKLID,
-   IN DWORD dwKLID,
-   IN UINT Flags);
+    IN HANDLE hFile,
+    IN DWORD offTable,
+    IN PVOID pTables,
+    IN HKL hOldKL,
+    IN PUNICODE_STRING puszKLID,
+    IN DWORD dwNewKL,
+    IN UINT Flags);
 
 BOOL
 NTAPI
 NtUserLockWindowStation(
-  HWINSTA hWindowStation);
+    HWINSTA hWindowStation);
 
 BOOL
 NTAPI
 NtUserLockWindowUpdate(
-  HWND hWnd);
+    HWND hWnd);
 
 BOOL
 NTAPI
@@ -2442,35 +2637,36 @@ NtUserLockWorkStation(VOID);
 
 UINT
 NTAPI
-NtUserMapVirtualKeyEx( UINT keyCode,
-                      UINT transType,
-                      DWORD keyboardId,
-                      HKL dwhkl );
+NtUserMapVirtualKeyEx(
+    UINT keyCode,
+    UINT transType,
+    DWORD keyboardId,
+    HKL dwhkl);
 
 typedef struct tagDOSENDMESSAGE
 {
-  UINT uFlags;
-  UINT uTimeout;
-  ULONG_PTR Result;
+    UINT uFlags;
+    UINT uTimeout;
+    ULONG_PTR Result;
 }
 DOSENDMESSAGE, *PDOSENDMESSAGE;
 
 BOOL
 NTAPI
 NtUserMessageCall(
-  HWND hWnd,
-  UINT Msg,
-  WPARAM wParam,
-  LPARAM lParam,
-  ULONG_PTR ResultInfo,
-  DWORD dwType, // FNID_XX types
-  BOOL Ansi);
+    HWND hWnd,
+    UINT Msg,
+    WPARAM wParam,
+    LPARAM lParam,
+    ULONG_PTR ResultInfo,
+    DWORD dwType, /* FNID_XX types */
+    BOOL Ansi);
 
 DWORD
 NTAPI
 NtUserMinMaximize(
     HWND hWnd,
-    UINT cmd, // Wine SW_ commands
+    UINT cmd, /* Wine SW_ commands */
     BOOL Hide);
 
 DWORD
@@ -2480,14 +2676,14 @@ NtUserMNDragLeave(VOID);
 DWORD
 NTAPI
 NtUserMNDragOver(
-  DWORD Unknown0,
-  DWORD Unknown1);
+    DWORD Unknown0,
+    DWORD Unknown1);
 
 DWORD
 NTAPI
 NtUserModifyUserStartupInfoFlags(
-  DWORD Unknown0,
-  DWORD Unknown1);
+    DWORD Unknown0,
+    DWORD Unknown1);
 
 BOOL
 NTAPI
@@ -2502,146 +2698,148 @@ NtUserMoveWindow(
 
 DWORD
 NTAPI
-NtUserNotifyIMEStatus(
-  DWORD Unknown0,
-  DWORD Unknown1,
-  DWORD Unknown2);
+NtUserNotifyIMEStatus(HWND hwnd, BOOL fOpen, DWORD dwConversion);
 
 BOOL
 NTAPI
 NtUserNotifyProcessCreate(
     HANDLE NewProcessId,
-    HANDLE SourceThreadId,
-    DWORD dwUnknown,
+    HANDLE ParentThreadId,
+    ULONG dwUnknown,
     ULONG CreateFlags);
 
 VOID
 NTAPI
 NtUserNotifyWinEvent(
-  DWORD Event,
-  HWND  hWnd,
-  LONG  idObject,
-  LONG  idChild);
+    DWORD Event,
+    HWND hWnd,
+    LONG idObject,
+    LONG idChild);
 
 BOOL
 NTAPI
 NtUserOpenClipboard(
-  HWND hWnd,
-  DWORD Unknown1);
+    HWND hWnd,
+    DWORD Unknown1);
 
 HDESK
 NTAPI
 NtUserOpenDesktop(
-   POBJECT_ATTRIBUTES ObjectAttributes,
-   DWORD dwFlags,
-   ACCESS_MASK dwDesiredAccess);
+    POBJECT_ATTRIBUTES ObjectAttributes,
+    DWORD dwFlags,
+    ACCESS_MASK dwDesiredAccess);
 
 HDESK
 NTAPI
 NtUserOpenInputDesktop(
-  DWORD dwFlags,
-  BOOL fInherit,
-  ACCESS_MASK dwDesiredAccess);
+    DWORD dwFlags,
+    BOOL fInherit,
+    ACCESS_MASK dwDesiredAccess);
 
 HWINSTA
 NTAPI
 NtUserOpenWindowStation(
-  POBJECT_ATTRIBUTES ObjectAttributes,
-  ACCESS_MASK dwDesiredAccess);
+    POBJECT_ATTRIBUTES ObjectAttributes,
+    ACCESS_MASK dwDesiredAccess);
 
 BOOL
 NTAPI
 NtUserPaintDesktop(
-  HDC hDC);
+    HDC hDC);
 
 DWORD
 NTAPI
 NtUserPaintMenuBar(
-    DWORD dwUnknown1,
-    DWORD dwUnknown2,
-    DWORD dwUnknown3,
-    DWORD dwUnknown4,
-    DWORD dwUnknown5,
-    DWORD dwUnknown6);
+    HWND hWnd,
+    HDC hDC,
+    ULONG left,    // x,
+    ULONG right,   // width, // Scale the edge thickness, offset?
+    ULONG top,     // y,
+    BOOL bActive); // DWORD Flags); DC_ACTIVE or WS_ACTIVECAPTION, by checking WNDS_ACTIVEFRAME and foreground.
 
-BOOL APIENTRY
-NtUserPeekMessage( PMSG pMsg,
-                   HWND hWnd,
-                   UINT MsgFilterMin,
-                   UINT MsgFilterMax,
-                   UINT RemoveMsg);
+BOOL
+APIENTRY
+NtUserPeekMessage(
+    PMSG pMsg,
+    HWND hWnd,
+    UINT MsgFilterMin,
+    UINT MsgFilterMax,
+    UINT RemoveMsg);
 
 BOOL
 NTAPI
 NtUserPostMessage(
-  HWND hWnd,
-  UINT Msg,
-  WPARAM wParam,
-  LPARAM lParam);
+    HWND hWnd,
+    UINT Msg,
+    WPARAM wParam,
+    LPARAM lParam);
 
 BOOL
 NTAPI
 NtUserPostThreadMessage(
-  DWORD idThread,
-  UINT Msg,
-  WPARAM wParam,
-  LPARAM lParam);
+    DWORD idThread,
+    UINT Msg,
+    WPARAM wParam,
+    LPARAM lParam);
 
 BOOL
 NTAPI
 NtUserPrintWindow(
     HWND hwnd,
-    HDC  hdcBlt,
+    HDC hdcBlt,
     UINT nFlags);
 
 NTSTATUS
 NTAPI
 NtUserProcessConnect(
-    IN  HANDLE Process,
+    IN HANDLE ProcessHandle,
     OUT PUSERCONNECT pUserConnect,
-    IN  DWORD dwSize); // sizeof(USERCONNECT)
+    IN ULONG Size); /* sizeof(USERCONNECT) */
 
-DWORD
+NTSTATUS
 NTAPI
 NtUserQueryInformationThread(
-    DWORD dwUnknown1,
-    DWORD dwUnknown2,
-    DWORD dwUnknown3,
-    DWORD dwUnknown4,
-    DWORD dwUnknown5);
+    IN HANDLE ThreadHandle,
+    IN USERTHREADINFOCLASS ThreadInformationClass,
+    OUT PVOID ThreadInformation,
+    IN ULONG ThreadInformationLength);
 
-DWORD
+DWORD_PTR
 NTAPI
 NtUserQueryInputContext(
-    DWORD dwUnknown1,
-    DWORD dwUnknown2);
+    HIMC hIMC,
+    DWORD dwType);
 
 DWORD
 NTAPI
 NtUserQuerySendMessage(
-  DWORD Unknown0);
+    DWORD Unknown0);
 
 DWORD
 NTAPI
 NtUserQueryUserCounters(
-  DWORD Unknown0,
-  DWORD Unknown1,
-  DWORD Unknown2,
-  DWORD Unknown3,
-  DWORD Unknown4);
+    DWORD Unknown0,
+    DWORD Unknown1,
+    DWORD Unknown2,
+    DWORD Unknown3,
+    DWORD Unknown4);
+
+#define QUERY_WINDOW_UNIQUE_PROCESS_ID 0x00
+#define QUERY_WINDOW_UNIQUE_THREAD_ID  0x01
+#define QUERY_WINDOW_ACTIVE            0x02
+#define QUERY_WINDOW_FOCUS             0x03
+#define QUERY_WINDOW_ISHUNG            0x04
+#define QUERY_WINDOW_REAL_ID           0x05
+#define QUERY_WINDOW_FOREGROUND        0x06
+#define QUERY_WINDOW_DEFAULT_IME       0x07
+#define QUERY_WINDOW_DEFAULT_ICONTEXT  0x08
+#define QUERY_WINDOW_ACTIVE_IME        0x09
 
-#define QUERY_WINDOW_UNIQUE_PROCESS_ID 0x00
-#define QUERY_WINDOW_UNIQUE_THREAD_ID  0x01
-#define QUERY_WINDOW_ACTIVE     0x02
-#define QUERY_WINDOW_FOCUS      0x03
-#define QUERY_WINDOW_ISHUNG    0x04
-#define QUERY_WINDOW_REAL_ID   0x05
-#define QUERY_WINDOW_FOREGROUND 0x06
-DWORD
+DWORD_PTR
 NTAPI
 NtUserQueryWindow(
-  HWND hWnd,
-  DWORD Index);
+    HWND hWnd,
+    DWORD Index);
 
 BOOL
 NTAPI
@@ -2668,20 +2866,18 @@ NtUserRealWaitMessageEx(
 
 BOOL
 NTAPI
-NtUserRedrawWindow
-(
- HWND hWnd,
- CONST RECT *lprcUpdate,
- HRGN hrgnUpdate,
- UINT flags
-);
+NtUserRedrawWindow(
+    HWND hWnd,
+    CONST RECT *lprcUpdate,
+    HRGN hrgnUpdate,
+    UINT flags);
 
 RTL_ATOM
 NTAPI
 NtUserRegisterClassExWOW(
     WNDCLASSEXW* lpwcx,
     PUNICODE_STRING pustrClassName,
-    PUNICODE_STRING pustrCNVersion,
+    PUNICODE_STRING pustrCVersion,
     PCLSMENUNAME pClassMenuName,
     DWORD fnID,
     DWORD Flags,
@@ -2704,18 +2900,21 @@ NtUserRegisterUserApiHook(
 
 BOOL
 NTAPI
-NtUserRegisterHotKey(HWND hWnd,
-                    int id,
-                    UINT fsModifiers,
-                    UINT vk);
+NtUserRegisterHotKey(
+    HWND hWnd,
+    int id,
+    UINT fsModifiers,
+    UINT vk);
 
 DWORD
 NTAPI
 NtUserRegisterTasklist(
-  DWORD Unknown0);
+    DWORD Unknown0);
 
-UINT NTAPI
-NtUserRegisterWindowMessage(PUNICODE_STRING MessageName);
+UINT
+NTAPI
+NtUserRegisterWindowMessage(
+    PUNICODE_STRING MessageName);
 
 DWORD
 NTAPI
@@ -2740,123 +2939,137 @@ DWORD
 NTAPI
 NtUserRemoteStopScreenUpdates(VOID);
 
-HANDLE NTAPI
-NtUserRemoveProp(HWND hWnd, ATOM Atom);
+HANDLE
+NTAPI
+NtUserRemoveProp(
+    HWND hWnd,
+    ATOM Atom);
 
-DWORD
+HDESK
 NTAPI
 NtUserResolveDesktop(
-    DWORD dwUnknown1,
-    DWORD dwUnknown2,
-    DWORD dwUnknown3,
-    DWORD dwUnknown4);
+    IN HANDLE ProcessHandle,
+    IN PUNICODE_STRING DesktopPath,
+    IN BOOL bInherit,
+    OUT HWINSTA* phWinSta);
 
 DWORD
 NTAPI
 NtUserResolveDesktopForWOW(
-  DWORD Unknown0);
+    DWORD Unknown0);
 
 BOOL
 NTAPI
 NtUserSBGetParms(
-  HWND hwnd,
-  int fnBar,
-  PSBDATA pSBData,
-  LPSCROLLINFO lpsi);
+    HWND hwnd,
+    int fnBar,
+    PSBDATA pSBData,
+    LPSCROLLINFO lpsi);
 
 BOOL
 NTAPI
 NtUserScrollDC(
-  HDC hDC,
-  int dx,
-  int dy,
-  CONST RECT *lprcScroll,
-  CONST RECT *lprcClip ,
-  HRGN hrgnUpdate,
-  LPRECT lprcUpdate);
-
-DWORD NTAPI
-NtUserScrollWindowEx(HWND hWnd, INT dx, INT dy, const RECT *rect,
-   const RECT *clipRect, HRGN hrgnUpdate, LPRECT rcUpdate, UINT flags);
+    HDC hDC,
+    int dx,
+    int dy,
+    CONST RECT *lprcScroll,
+    CONST RECT *lprcClip ,
+    HRGN hrgnUpdate,
+    LPRECT lprcUpdate);
+
+DWORD
+NTAPI
+NtUserScrollWindowEx(
+    HWND hWnd,
+    INT dx,
+    INT dy,
+    const RECT *rect,
+    const RECT *clipRect,
+    HRGN hrgnUpdate,
+    LPRECT rcUpdate,
+    UINT flags);
 
 UINT
 NTAPI
 NtUserSendInput(
-  UINT nInputs,
-  LPINPUT pInput,
-  INT cbSize);
+    UINT nInputs,
+    LPINPUT pInput,
+    INT cbSize);
 
-HWND NTAPI
-NtUserSetActiveWindow(HWND Wnd);
+HWND
+NTAPI
+NtUserSetActiveWindow(
+    HWND Wnd);
 
-DWORD
+BOOL
 NTAPI
 NtUserSetAppImeLevel(
-    DWORD dwUnknown1,
-    DWORD dwUnknown2);
+    HWND hWnd,
+    DWORD dwLevel);
 
-HWND NTAPI
-NtUserSetCapture(HWND Wnd);
+HWND
+NTAPI
+NtUserSetCapture(
+    HWND Wnd);
 
-ULONG_PTR NTAPI
+ULONG_PTR
+NTAPI
 NtUserSetClassLong(
-  HWND  hWnd,
-  INT Offset,
-  ULONG_PTR  dwNewLong,
-  BOOL  Ansi );
+    HWND hWnd,
+    INT Offset,
+    ULONG_PTR dwNewLong,
+    BOOL Ansi);
 
 WORD
 NTAPI
 NtUserSetClassWord(
-  HWND hWnd,
-  INT nIndex,
-  WORD wNewWord);
+    HWND hWnd,
+    INT nIndex,
+    WORD wNewWord);
 
 HANDLE
 NTAPI
 NtUserSetClipboardData(
-  UINT fmt,
-  HANDLE hMem,
-  PSETCLIPBDATA scd);
+    UINT fmt,
+    HANDLE hMem,
+    PSETCLIPBDATA scd);
 
 HWND
 NTAPI
 NtUserSetClipboardViewer(
-  HWND hWndNewViewer);
+    HWND hWndNewViewer);
 
 HPALETTE
 NTAPI
 NtUserSelectPalette(
     HDC hDC,
-    HPALETTE  hpal,
-    BOOL  ForceBackground
-);
+    HPALETTE hpal,
+    BOOL ForceBackground);
 
 DWORD
 NTAPI
 NtUserSetConsoleReserveKeys(
-  DWORD Unknown0,
-  DWORD Unknown1);
+    DWORD Unknown0,
+    DWORD Unknown1);
 
 HCURSOR
 NTAPI
 NtUserSetCursor(
-  HCURSOR hCursor);
+    HCURSOR hCursor);
 
 BOOL
 NTAPI
 NtUserSetCursorContents(
-  HANDLE Handle,
-  PICONINFO IconInfo);
+    HANDLE Handle,
+    PICONINFO IconInfo);
 
-#ifdef NEW_CURSORICON
 BOOL
 NTAPI
 NtUserSetCursorIconData(
-  _In_ HCURSOR hCursor,
-  _In_ PUNICODE_STRING pustrModule,
-  _In_ PUNICODE_STRING puSrcName,
-  _In_ const CURSORDATA* pCursorData);
+    _In_ HCURSOR hCursor,
+    _In_opt_ PUNICODE_STRING pustrModule,
+    _In_opt_ PUNICODE_STRING puSrcName,
+    _In_ const CURSORDATA *pCursorData);
 
 typedef struct _tagFINDEXISTINGCURICONPARAM
 {
@@ -2868,59 +3081,48 @@ typedef struct _tagFINDEXISTINGCURICONPARAM
 HICON
 NTAPI
 NtUserFindExistingCursorIcon(
-  _In_  PUNICODE_STRING pustrModule,
-  _In_  PUNICODE_STRING pustrRsrc,
-  _In_  FINDEXISTINGCURICONPARAM* param);
-#else
-BOOL
-NTAPI
-NtUserSetCursorIconData(
-  HANDLE Handle,
-  PBOOL fIcon,
-  POINT *Hotspot,
-  HMODULE hModule,
-  HRSRC hRsrc,
-  HRSRC hGroupRsrc);
+    _In_ PUNICODE_STRING pustrModule,
+    _In_ PUNICODE_STRING pustrRsrc,
+    _In_ FINDEXISTINGCURICONPARAM *param);
 
-HICON
-NTAPI
-NtUserFindExistingCursorIcon(
-  HMODULE hModule,
-  HRSRC hRsrc,
-  LONG cx,
-  LONG cy);
-#endif
+LONG_PTR
+APIENTRY
+NtUserSetClassLongPtr(
+    VOID);
 
 DWORD
 NTAPI
 NtUserSetDbgTag(
-  DWORD Unknown0,
-  DWORD Unknown1);
+    DWORD Unknown0,
+    DWORD Unknown1);
+
+DWORD
+APIENTRY
+NtUserSetDbgTagCount(
+    DWORD Unknown0);
 
 HWND
 NTAPI
 NtUserSetFocus(
-  HWND hWnd);
+    HWND hWnd);
 
-DWORD
+BOOL
 NTAPI
 NtUserSetImeHotKey(
-  DWORD Unknown0,
-  DWORD Unknown1,
-  DWORD Unknown2,
-  DWORD Unknown3,
-  DWORD Unknown4);
+    DWORD dwHotKeyId,
+    UINT uModifiers,
+    UINT uVirtualKey,
+    HKL hKL,
+    DWORD dwAction);
 
-DWORD
+BOOL
 NTAPI
 NtUserSetImeInfoEx(
-    DWORD dwUnknown1);
+    PIMEINFOEX pImeInfoEx);
 
-DWORD
+BOOL
 NTAPI
-NtUserSetImeOwnerWindow(
-  DWORD Unknown0,
-  DWORD Unknown1);
+NtUserSetImeOwnerWindow(HWND hImeWnd, HWND hwndFocus);
 
 DWORD
 NTAPI
@@ -2936,231 +3138,246 @@ NtUserSetInformationThread(
     IN HANDLE ThreadHandle,
     IN USERTHREADINFOCLASS ThreadInformationClass,
     IN PVOID ThreadInformation,
-    IN ULONG ThreadInformationLength
-);
+    IN ULONG ThreadInformationLength);
 
 DWORD
 NTAPI
 NtUserSetInternalWindowPos(
-  HWND    hwnd,
-  UINT    showCmd,
-  LPRECT  rect,
-  LPPOINT pt);
+    HWND hwnd,
+    UINT showCmd,
+    LPRECT rect,
+    LPPOINT pt);
 
 BOOL
 NTAPI
 NtUserSetKeyboardState(
-  LPBYTE lpKeyState);
+    LPBYTE lpKeyState);
 
 BOOL
 NTAPI
 NtUserSetLayeredWindowAttributes(
-  HWND hwnd,
-  COLORREF crKey,
-  BYTE bAlpha,
-  DWORD dwFlags);
+    HWND hwnd,
+    COLORREF crKey,
+    BYTE bAlpha,
+    DWORD dwFlags);
 
 BOOL
 NTAPI
 NtUserSetLogonNotifyWindow(
-  HWND hWnd);
+    HWND hWnd);
 
 BOOL
 NTAPI
 NtUserSetObjectInformation(
-  HANDLE hObject,
-  DWORD nIndex,
-  PVOID pvInformation,
-  DWORD nLength);
+    HANDLE hObject,
+    DWORD nIndex,
+    PVOID pvInformation,
+    DWORD nLength);
 
 HWND
 NTAPI
 NtUserSetParent(
-  HWND hWndChild,
-  HWND hWndNewParent);
+    HWND hWndChild,
+    HWND hWndNewParent);
 
 BOOL
 NTAPI
 NtUserSetProcessWindowStation(
-  HWINSTA hWindowStation);
+    HWINSTA hWindowStation);
 
-BOOL NTAPI
-NtUserSetProp(HWND hWnd, ATOM Atom, HANDLE Data);
+BOOL
+NTAPI
+NtUserSetProp(
+    HWND hWnd,
+    ATOM Atom,
+    HANDLE Data);
 
 DWORD
 NTAPI
 NtUserSetRipFlags(
-  DWORD Unknown0,
-  DWORD Unknown1);
+    DWORD Unknown0);
 
 DWORD
 NTAPI
 NtUserSetScrollInfo(
-  HWND hwnd,
-  int fnBar,
-  LPCSCROLLINFO lpsi,
-  BOOL bRedraw);
+    HWND hwnd,
+    int fnBar,
+    LPCSCROLLINFO lpsi,
+    BOOL bRedraw);
 
 BOOL
 NTAPI
 NtUserSetShellWindowEx(
-  HWND hwndShell,
-  HWND hwndShellListView);
+    HWND hwndShell,
+    HWND hwndShellListView);
 
 BOOL
 NTAPI
 NtUserSetSysColors(
-  int cElements,
-  IN CONST INT *lpaElements,
-  IN CONST COLORREF *lpaRgbValues,
-  FLONG Flags);
+    int cElements,
+    IN CONST INT *lpaElements,
+    IN CONST COLORREF *lpaRgbValues,
+    FLONG Flags);
 
 BOOL
 NTAPI
 NtUserSetSystemCursor(
-  HCURSOR hcur,
-  DWORD id);
+    HCURSOR hcur,
+    DWORD id);
 
 BOOL
 NTAPI
 NtUserSetThreadDesktop(
-  HDESK hDesktop);
+    HDESK hDesktop);
 
 DWORD
 NTAPI
 NtUserSetThreadState(
-  DWORD Unknown0,
-  DWORD Unknown1);
+    DWORD Unknown0,
+    DWORD Unknown1);
 
 UINT_PTR
 NTAPI
-NtUserSetSystemTimer
-(
- HWND hWnd,
- UINT_PTR nIDEvent,
- UINT uElapse,
- TIMERPROC lpTimerFunc
-);
+NtUserSetSystemTimer(
+    HWND hWnd,
+    UINT_PTR nIDEvent,
+    UINT uElapse,
+    TIMERPROC lpTimerFunc);
 
 DWORD
 NTAPI
-NtUserSetThreadLayoutHandles(
-    DWORD dwUnknown1,
-    DWORD dwUnknown2);
+NtUserSetThreadLayoutHandles(HKL hNewKL, HKL hOldKL);
 
 UINT_PTR
 NTAPI
-NtUserSetTimer
-(
- HWND hWnd,
- UINT_PTR nIDEvent,
- UINT uElapse,
- TIMERPROC lpTimerFunc
-);
+NtUserSetTimer(
+    HWND hWnd,
+    UINT_PTR nIDEvent,
+    UINT uElapse,
+    TIMERPROC lpTimerFunc);
 
 BOOL
 NTAPI
 NtUserSetWindowFNID(
-  HWND hWnd,
-  WORD fnID);
+    HWND hWnd,
+    WORD fnID);
 
 LONG
 NTAPI
 NtUserSetWindowLong(
-  HWND hWnd,
-  DWORD Index,
-  LONG NewValue,
-  BOOL Ansi);
+    HWND hWnd,
+    DWORD Index,
+    LONG NewValue,
+    BOOL Ansi);
+
+#ifdef _WIN64
+LONG_PTR
+NTAPI
+NtUserSetWindowLongPtr(
+    HWND hWnd,
+    DWORD Index,
+    LONG_PTR NewValue,
+    BOOL Ansi);
+#else
+#define NtUserSetWindowLongPtr NtUserSetWindowLong
+#endif // _WIN64
 
 BOOL
 NTAPI
 NtUserSetWindowPlacement(
-  HWND hWnd,
-  WINDOWPLACEMENT *lpwndpl);
+    HWND hWnd,
+    WINDOWPLACEMENT *lpwndpl);
 
 BOOL
-NTAPI NtUserSetWindowPos(
+NTAPI
+NtUserSetWindowPos(
     HWND hWnd,
     HWND hWndInsertAfter,
     int X,
     int Y,
     int cx,
     int cy,
-    UINT uFlags
-);
+    UINT uFlags);
 
 INT
 NTAPI
 NtUserSetWindowRgn(
-  HWND hWnd,
-  HRGN hRgn,
-  BOOL bRedraw);
+    HWND hWnd,
+    HRGN hRgn,
+    BOOL bRedraw);
 
 HHOOK
 NTAPI
 NtUserSetWindowsHookAW(
-  int idHook,
-  HOOKPROC lpfn,
-  BOOL Ansi);
+    int idHook,
+    HOOKPROC lpfn,
+    BOOL Ansi);
 
 HHOOK
 NTAPI
 NtUserSetWindowsHookEx(
-  HINSTANCE Mod,
-  PUNICODE_STRING ModuleName,
-  DWORD ThreadId,
-  int HookId,
-  HOOKPROC HookProc,
-  BOOL Ansi);
+    HINSTANCE Mod,
+    PUNICODE_STRING ModuleName,
+    DWORD ThreadId,
+    int HookId,
+    HOOKPROC HookProc,
+    BOOL Ansi);
 
-DWORD
+BOOL
 NTAPI
 NtUserSetWindowStationUser(
-  DWORD Unknown0,
-  DWORD Unknown1,
-  DWORD Unknown2,
-  DWORD Unknown3);
+    IN HWINSTA hWindowStation,
+    IN PLUID pluid,
+    IN PSID psid OPTIONAL,
+    IN DWORD size);
 
-WORD NTAPI
-NtUserSetWindowWord(HWND hWnd, INT Index, WORD NewVal);
+WORD
+NTAPI
+NtUserSetWindowWord(
+    HWND hWnd,
+    INT Index,
+    WORD NewVal);
 
 HWINEVENTHOOK
 NTAPI
 NtUserSetWinEventHook(
-  UINT eventMin,
-  UINT eventMax,
-  HMODULE hmodWinEventProc,
-  PUNICODE_STRING puString,
-  WINEVENTPROC lpfnWinEventProc,
-  DWORD idProcess,
-  DWORD idThread,
-  UINT dwflags);
+    UINT eventMin,
+    UINT eventMax,
+    HMODULE hmodWinEventProc,
+    PUNICODE_STRING puString,
+    WINEVENTPROC lpfnWinEventProc,
+    DWORD idProcess,
+    DWORD idThread,
+    UINT dwflags);
 
 BOOL
 NTAPI
 NtUserShowCaret(
-  HWND hWnd);
+    HWND hWnd);
 
 BOOL
 NTAPI
 NtUserHideCaret(
-  HWND hWnd);
+    HWND hWnd);
 
 DWORD
 NTAPI
-NtUserShowScrollBar(HWND hWnd, int wBar, DWORD bShow);
+NtUserShowScrollBar(
+    HWND hWnd,
+    int wBar,
+    DWORD bShow);
 
 BOOL
 NTAPI
 NtUserShowWindow(
-  HWND hWnd,
-  LONG nCmdShow);
+    HWND hWnd,
+    LONG nCmdShow);
 
 BOOL
 NTAPI
 NtUserShowWindowAsync(
-  HWND hWnd,
-  LONG nCmdShow);
+    HWND hWnd,
+    LONG nCmdShow);
 
 BOOL
 NTAPI
@@ -3169,15 +3386,15 @@ NtUserSoundSentry(VOID);
 BOOL
 NTAPI
 NtUserSwitchDesktop(
-  HDESK hDesktop);
+    HDESK hDesktop);
 
 BOOL
 NTAPI
 NtUserSystemParametersInfo(
-  UINT uiAction,
-  UINT uiParam,
-  PVOID pvParam,
-  UINT fWinIni);
+    UINT uiAction,
+    UINT uiParam,
+    PVOID pvParam,
+    UINT fWinIni);
 
 DWORD
 NTAPI
@@ -3187,114 +3404,114 @@ NtUserTestForInteractiveUser(
 INT
 NTAPI
 NtUserToUnicodeEx(
-                 UINT wVirtKey,
-                 UINT wScanCode,
-                 PBYTE lpKeyState,
-                 LPWSTR pwszBuff,
-                 int cchBuff,
-                 UINT wFlags,
-                 HKL dwhkl );
+    UINT wVirtKey,
+    UINT wScanCode,
+    PBYTE lpKeyState,
+    LPWSTR pwszBuff,
+    int cchBuff,
+    UINT wFlags,
+    HKL dwhkl);
 
 BOOL
 NTAPI
 NtUserTrackMouseEvent(
-  LPTRACKMOUSEEVENT lpEventTrack);
+    LPTRACKMOUSEEVENT lpEventTrack);
 
 int
 NTAPI
 NtUserTranslateAccelerator(
-  HWND Window,
-  HACCEL Table,
-  LPMSG Message);
+    HWND Window,
+    HACCEL Table,
+    LPMSG Message);
 
 BOOL
 NTAPI
 NtUserTranslateMessage(
-  LPMSG lpMsg,
-  UINT flags );
+    LPMSG lpMsg,
+    UINT flags );
 
 BOOL
 NTAPI
 NtUserUnhookWindowsHookEx(
-  HHOOK Hook);
+    HHOOK Hook);
 
 BOOL
 NTAPI
 NtUserUnhookWinEvent(
-  HWINEVENTHOOK hWinEventHook);
+    HWINEVENTHOOK hWinEventHook);
 
 BOOL
 NTAPI
 NtUserUnloadKeyboardLayout(
-  HKL hKl);
+    HKL hKl);
 
 BOOL
 NTAPI
 NtUserUnlockWindowStation(
-  HWINSTA hWindowStation);
+    HWINSTA hWindowStation);
 
 BOOL
 NTAPI
 NtUserUnregisterClass(
-  PUNICODE_STRING ClassNameOrAtom,
-  HINSTANCE hInstance,
-  PCLSMENUNAME pClassMenuName);
+    PUNICODE_STRING ClassNameOrAtom,
+    HINSTANCE hInstance,
+    PCLSMENUNAME pClassMenuName);
 
 BOOL
 NTAPI
-NtUserUnregisterHotKey(HWND hWnd,
-                      int id);
+NtUserUnregisterHotKey(
+    HWND hWnd,
+    int id);
 
 BOOL
 NTAPI
 NtUserUnregisterUserApiHook(VOID);
 
-DWORD
+BOOL
 NTAPI
 NtUserUpdateInputContext(
-  DWORD Unknown0,
-  DWORD Unknown1,
-  DWORD Unknown2);
+    HIMC hIMC,
+    DWORD dwType,
+    DWORD_PTR dwValue);
 
 DWORD
 NTAPI
 NtUserUpdateInstance(
-  DWORD Unknown0,
-  DWORD Unknown1,
-  DWORD Unknown2);
+    DWORD Unknown0,
+    DWORD Unknown1,
+    DWORD Unknown2);
 
 BOOL
 NTAPI
 NtUserUpdateLayeredWindow(
-  HWND hwnd,
-  HDC hdcDst,
-  POINT *pptDst,
-  SIZE *psize,
-  HDC hdcSrc,
-  POINT *pptSrc,
-  COLORREF crKey,
-  BLENDFUNCTION *pblend,
-  DWORD dwFlags,
-  RECT *prcDirty);
+    HWND hwnd,
+    HDC hdcDst,
+    POINT *pptDst,
+    SIZE *psize,
+    HDC hdcSrc,
+    POINT *pptSrc,
+    COLORREF crKey,
+    BLENDFUNCTION *pblend,
+    DWORD dwFlags,
+    RECT *prcDirty);
 
 BOOL
 NTAPI
 NtUserUpdatePerUserSystemParameters(
-  DWORD dwReserved,
-  BOOL bEnable);
+    DWORD dwReserved,
+    BOOL bEnable);
 
 BOOL
 NTAPI
 NtUserUserHandleGrantAccess(
-  IN HANDLE hUserHandle,
-  IN HANDLE hJob,
-  IN BOOL bGrant);
+    IN HANDLE hUserHandle,
+    IN HANDLE hJob,
+    IN BOOL bGrant);
 
 BOOL
 NTAPI
 NtUserValidateHandleSecure(
-  HANDLE hHdl,
-  BOOL Restricted);
+    HANDLE hHdl);
 
 BOOL
 NTAPI
@@ -3305,28 +3522,26 @@ NtUserValidateRect(
 BOOL
 APIENTRY
 NtUserValidateTimerCallback(
-    HWND hWnd,
-    WPARAM wParam,
     LPARAM lParam);
 
 DWORD
 NTAPI
 NtUserVkKeyScanEx(
-  WCHAR wChar,
-  HKL KeyboardLayout,
-  BOOL bUsehHK);
+    WCHAR wChar,
+    HKL KeyboardLayout,
+    BOOL bUsehHK);
 
 DWORD
 NTAPI
 NtUserWaitForInputIdle(
-  IN HANDLE hProcess,
-  IN DWORD dwMilliseconds,
-  IN BOOL Unknown2); // Always FALSE
+    IN HANDLE hProcess,
+    IN DWORD dwMilliseconds,
+    IN BOOL bSharedWow); /* Always FALSE */
 
 DWORD
 NTAPI
 NtUserWaitForMsgAndEvent(
-  DWORD Unknown0);
+    DWORD Unknown0);
 
 BOOL
 NTAPI
@@ -3335,157 +3550,83 @@ NtUserWaitMessage(VOID);
 DWORD
 NTAPI
 NtUserWin32PoolAllocationStats(
-  DWORD Unknown0,
-  DWORD Unknown1,
-  DWORD Unknown2,
-  DWORD Unknown3,
-  DWORD Unknown4,
-  DWORD Unknown5);
+    DWORD Unknown0,
+    DWORD Unknown1,
+    DWORD Unknown2,
+    DWORD Unknown3,
+    DWORD Unknown4,
+    DWORD Unknown5);
 
 HWND
 NTAPI
 NtUserWindowFromPoint(
-  LONG X,
-  LONG Y);
+    LONG X,
+    LONG Y);
 
 DWORD
 NTAPI
 NtUserYieldTask(VOID);
 
-/* lParam of DDE messages */
-typedef struct tagKMDDEEXECUTEDATA
-{
-  HWND Sender;
-  HGLOBAL ClientMem;
-  /* BYTE Data[DataSize] */
-} KMDDEEXECUTEDATA, *PKMDDEEXECUTEDATA;
-
-typedef struct tagKMDDELPARAM
-{
-  UINT_PTR uiLo;
-  UINT_PTR uiHi;
-} KMDDELPARAM, *PKMDDELPARAM;
-
-
-
-
-
 /* NtUserBad
  * ReactOS-specific NtUser calls and their related structures, both which shouldn't exist.
  */
 
-#define NOPARAM_ROUTINE_ISCONSOLEMODE         0xffff0001
-#define NOPARAM_ROUTINE_GETMESSAGEEXTRAINFO   0xffff0005
-#define ONEPARAM_ROUTINE_CSRSS_GUICHECK       0xffff0008
-#define ONEPARAM_ROUTINE_SWITCHCARETSHOWING   0xfffe0008
-#define ONEPARAM_ROUTINE_ENABLEPROCWNDGHSTING 0xfffe000d
-#define ONEPARAM_ROUTINE_GETDESKTOPMAPPING    0xfffe000e
-#define TWOPARAM_ROUTINE_SETMENUBARHEIGHT   0xfffd0050
-#define TWOPARAM_ROUTINE_EXITREACTOS        0xfffd0051
-#define TWOPARAM_ROUTINE_SETGUITHRDHANDLE   0xfffd0052
-#define HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOWMOUSE 0xfffd0053
-  #define MSQ_STATE_CAPTURE    0x1
-  #define MSQ_STATE_ACTIVE     0x2
-  #define MSQ_STATE_FOCUS      0x3
-  #define MSQ_STATE_MENUOWNER  0x4
-  #define MSQ_STATE_MOVESIZE   0x5
-  #define MSQ_STATE_CARET      0x6
-#define TWOPARAM_ROUTINE_ROS_UPDATEUISTATE  0x1004
+#define NOPARAM_ROUTINE_ISCONSOLEMODE             0xffff0001
+#define ONEPARAM_ROUTINE_ENABLEPROCWNDGHSTING     0xfffe000d
+#define ONEPARAM_ROUTINE_GETDESKTOPMAPPING        0xfffe000e
+#define TWOPARAM_ROUTINE_SETMENUBARHEIGHT         0xfffd0050
+#define TWOPARAM_ROUTINE_SETGUITHRDHANDLE         0xfffd0051
+#define HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOWMOUSE 0xfffd0052
+
+#define MSQ_STATE_CAPTURE   0x1
+#define MSQ_STATE_ACTIVE    0x2
+#define MSQ_STATE_FOCUS     0x3
+#define MSQ_STATE_MENUOWNER 0x4
+#define MSQ_STATE_MOVESIZE  0x5
+#define MSQ_STATE_CARET     0x6
+
+#define TWOPARAM_ROUTINE_ROS_UPDATEUISTATE   0x1004
 #define HWNDPARAM_ROUTINE_ROS_NOTIFYWINEVENT 0x1005
 
 BOOL
 NTAPI
 NtUserGetMonitorInfo(
-  IN HMONITOR hMonitor,
-  OUT LPMONITORINFO pMonitorInfo);
+    IN HMONITOR hMonitor,
+    OUT LPMONITORINFO pMonitorInfo);
 
 /* Should be done in usermode */
 
-/* (other FocusedItem values give the position of the focused item) */
-#define NO_SELECTED_ITEM  0xffff
-
-typedef struct tagROSMENUINFO
-{
-    /* ----------- MENUINFO ----------- */
-    DWORD cbSize;
-    DWORD fMask;
-    DWORD dwStyle;
-    UINT cyMax;
-    HBRUSH  hbrBack;
-    DWORD dwContextHelpID;
-    ULONG_PTR dwMenuData;
-    /* ----------- Extra ----------- */
-    ULONG fFlags;       /* Menu flags (MF_POPUP, MF_SYSMENU) */
-    UINT iItem;         /* Currently focused item */
-    UINT cItems;        /* Number of items in the menu */
-    WORD cxMenu;        /* Width of the whole menu */
-    WORD cyMenu;        /* Height of the whole menu */
-    ULONG cxTextAlign;
-    PWND spwndNotify;     /* window receiving the messages for ownerdraw */
-    INT iTop;
-    INT iMaxTop;
-    DWORD dwArrowsOn:2;
-
-    HMENU Self;         /* Handle of this menu */
-    HWND Wnd;           /* Window containing the menu */
-    BOOL TimeToHide;    /* Request hiding when receiving a second click in the top-level menu item */
-} ROSMENUINFO, *PROSMENUINFO;
-
-typedef struct tagROSMENUITEMINFO
-{
-    /* ----------- MENUITEMINFOW ----------- */
-    UINT cbSize;
-    UINT fMask;
-    UINT fType;
-    UINT fState;
-    UINT wID;
-    HMENU hSubMenu;
-    HBITMAP hbmpChecked;
-    HBITMAP hbmpUnchecked;
-    DWORD dwItemData;
-    LPWSTR dwTypeData;
-    UINT cch;
-    HBITMAP hbmpItem;
-    /* ----------- Extra ----------- */
-    RECT Rect;      /* Item area (relative to menu window) */
-    UINT dxTab;      /* X position of text after Tab */
-    LPWSTR lpstr;    /* Copy of the text pointer in MenuItem->Text */
-    SIZE maxBmpSize;   /* Maximum size of the bitmap items in MIIM_BITMAP state */
-} ROSMENUITEMINFO, *PROSMENUITEMINFO;
-
 HMONITOR
 NTAPI
 NtUserMonitorFromPoint(
-  IN POINT point,
-  IN DWORD dwFlags);
+    IN POINT point,
+    IN DWORD dwFlags);
 
 HMONITOR
 NTAPI
 NtUserMonitorFromRect(
-  IN LPCRECT pRect,
-  IN DWORD dwFlags);
+    IN LPCRECT pRect,
+    IN DWORD dwFlags);
 
 HMONITOR
 NTAPI
 NtUserMonitorFromWindow(
-  IN HWND hWnd,
-  IN DWORD dwFlags);
+    IN HWND hWnd,
+    IN DWORD dwFlags);
 
 typedef struct _SETSCROLLBARINFO
 {
-  int nTrackPos;
-  int reserved;
-  DWORD rgstate[CCHILDREN_SCROLLBAR+1];
+    int nTrackPos;
+    int reserved;
+    DWORD rgstate[CCHILDREN_SCROLLBAR + 1];
 } SETSCROLLBARINFO, *PSETSCROLLBARINFO;
 
 BOOL
 NTAPI
 NtUserSetScrollBarInfo(
-  HWND hwnd,
-  LONG idObject,
-  SETSCROLLBARINFO *info);
-
-
+    HWND hwnd,
+    LONG idObject,
+    SETSCROLLBARINFO *info);
 
 #endif /* __WIN32K_NTUSER_H */