[REACTOS]
authorHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Mon, 15 Apr 2013 19:32:00 +0000 (19:32 +0000)
committerHermès Bélusca-Maïto <hermes.belusca-maito@reactos.org>
Mon, 15 Apr 2013 19:32:00 +0000 (19:32 +0000)
Merge of the ros-csrss branch created with a three-fold purpose:

- Use the new Windows-compatible Client-Server Runtime Subsystem (csrss + csrsrv)
written by Alex Ionescu to replace the old hacked one. Also the CSR client part,
residing in ntdll, is updated. Some work also done on the dlls side, which
communicate with CSR, namely kernel32.

- Replace our very old win32csr.dll CSR server by the collection basesrv.dll /
winsrv.dll as it is done under Windows.

- Since the console subsystem is (for historical purposes on Windows) the
only subsystem which exploits all the possibilities of the CSR, I decided to
put it in a new CSR dll called 'consrv.dll', even if on Windows it is included
together with other APIs inside the winsrv dll (since Windows NT 3.1 release)
(I took the name 'consrv' from the dll where it was included in Windows NT 3.1
beta from October 1991). Some work was also done on its internal architecture
(the external interface is of course unchanged for compatibility reasons) and a
two-layer approach was developed, using the existing idea of console functions +
GUI or TUI we already had in win32csr:
* the "console server" which dialogs with the console applications,
and which maintains a list of all the created consoles.
* different "front-ends" corresponding to where you want to output
the information (~= console hardware) (Work-In-Progress).
Another idea would be to make those front-ends dynamically-loadable (instead
of being compiled inside consrv).
- I also fixed some parts of the console properties dialog box.

More information can be found in http://www.reactos.org/archives/public/ros-dev/2013-April/016121.html

CORE-122 CORE-2510 CORE-7002 #resolve #comment Committed in revision r58xxx.

svn path=/trunk/; revision=58770

242 files changed:
1  2 
reactos/base/applications/cmdutils/doskey/doskey.h
reactos/base/system/smss/smloop.c
reactos/boot/bootdata/hivedef.inf
reactos/boot/bootdata/hivesys.inf
reactos/dll/cpl/console/CMakeLists.txt
reactos/dll/cpl/console/colors.c
reactos/dll/cpl/console/console.c
reactos/dll/cpl/console/console.h
reactos/dll/cpl/console/console.rc
reactos/dll/cpl/console/font.c
reactos/dll/cpl/console/lang/bg-BG.rc
reactos/dll/cpl/console/lang/cs-CZ.rc
reactos/dll/cpl/console/lang/de-DE.rc
reactos/dll/cpl/console/lang/en-US.rc
reactos/dll/cpl/console/lang/es-ES.rc
reactos/dll/cpl/console/lang/fr-FR.rc
reactos/dll/cpl/console/lang/he-IL.rc
reactos/dll/cpl/console/lang/id-ID.rc
reactos/dll/cpl/console/lang/it-IT.rc
reactos/dll/cpl/console/lang/no-NO.rc
reactos/dll/cpl/console/lang/pl-PL.rc
reactos/dll/cpl/console/lang/ro-RO.rc
reactos/dll/cpl/console/lang/ru-RU.rc
reactos/dll/cpl/console/lang/sk-SK.rc
reactos/dll/cpl/console/lang/uk-UA.rc
reactos/dll/cpl/console/lang/zh-CN.rc
reactos/dll/cpl/console/layout.c
reactos/dll/cpl/console/options.c
reactos/dll/cpl/console/res/terminal.ico
reactos/dll/cpl/console/resource.h
reactos/dll/cpl/console/rsrc.rc
reactos/dll/ntdll/csr/api.c
reactos/dll/ntdll/csr/capture.c
reactos/dll/ntdll/csr/connect.c
reactos/dll/ntdll/include/ntdll.h
reactos/dll/ntdll/include/ntdllp.h
reactos/dll/win32/kernel32/CMakeLists.txt
reactos/dll/win32/kernel32/client/console/alias.c
reactos/dll/win32/kernel32/client/console/console.c
reactos/dll/win32/kernel32/client/console/history.c
reactos/dll/win32/kernel32/client/console/init.c
reactos/dll/win32/kernel32/client/console/readwrite.c
reactos/dll/win32/kernel32/client/console/vista.c
reactos/dll/win32/kernel32/client/dllmain.c
reactos/dll/win32/kernel32/client/dosdev.c
reactos/dll/win32/kernel32/client/file/create.c
reactos/dll/win32/kernel32/client/file/deviceio.c
reactos/dll/win32/kernel32/client/file/filename.c
reactos/dll/win32/kernel32/client/path.c
reactos/dll/win32/kernel32/client/proc.c
reactos/dll/win32/kernel32/client/vdm.c
reactos/dll/win32/kernel32/client/vista.c
reactos/dll/win32/kernel32/include/console.h
reactos/dll/win32/kernel32/include/kernel32.h
reactos/dll/win32/kernel32/k32.h
reactos/dll/win32/shell32/shelllink.cpp
reactos/dll/win32/shell32/shelllink.h
reactos/dll/win32/shell32/shlexec.cpp
reactos/include/ndk/umfuncs.h
reactos/include/ndk/umtypes.h
reactos/include/psdk/shellapi.h
reactos/include/psdk/winbase.h
reactos/include/psdk/wincon.h
reactos/include/psdk/winuser.h
reactos/include/reactos/subsys/csr/csr.h
reactos/include/reactos/subsys/csr/csrmsg.h
reactos/include/reactos/subsys/csr/csrsrv.h
reactos/include/reactos/subsys/sm/helper.h
reactos/include/reactos/subsys/sm/ns.h
reactos/include/reactos/subsys/sm/smmsg.h
reactos/include/reactos/subsys/win/base.h
reactos/include/reactos/subsys/win/basemsg.h
reactos/include/reactos/subsys/win/conmsg.h
reactos/include/reactos/subsys/win/console.h
reactos/include/reactos/subsys/win/winmsg.h
reactos/lib/smlib/smclient.c
reactos/subsystems/CMakeLists.txt
reactos/subsystems/win/CMakeLists.txt
reactos/subsystems/win/basesrv/CMakeLists.txt
reactos/subsystems/win/basesrv/api.h
reactos/subsystems/win/basesrv/basesrv.h
reactos/subsystems/win/basesrv/basesrv.rc
reactos/subsystems/win/basesrv/basesrv.spec
reactos/subsystems/win/basesrv/dosdev.c
reactos/subsystems/win/basesrv/init.c
reactos/subsystems/win/basesrv/proc.c
reactos/subsystems/win/basesrv/sndsntry.c
reactos/subsystems/win32/CMakeLists.txt
reactos/subsystems/win32/csrsrv/CMakeLists.txt
reactos/subsystems/win32/csrsrv/api.c
reactos/subsystems/win32/csrsrv/api.h
reactos/subsystems/win32/csrsrv/csrsrv.rc
reactos/subsystems/win32/csrsrv/csrsrv.spec
reactos/subsystems/win32/csrsrv/init.c
reactos/subsystems/win32/csrsrv/procsup.c
reactos/subsystems/win32/csrsrv/server.c
reactos/subsystems/win32/csrsrv/session.c
reactos/subsystems/win32/csrsrv/srv.h
reactos/subsystems/win32/csrsrv/status.h
reactos/subsystems/win32/csrsrv/thredsup.c
reactos/subsystems/win32/csrsrv/wait.c
reactos/subsystems/win32/csrss/CMakeLists.txt
reactos/subsystems/win32/csrss/csrss.c
reactos/subsystems/win32/csrss/csrss.rc
reactos/win32ss/CMakeLists.txt
reactos/win32ss/gdi/ntgdi/gdikdbgext.c
reactos/win32ss/include/ntuser.h
reactos/win32ss/pch.h
reactos/win32ss/user/consrv/CMakeLists.txt
reactos/win32ss/user/consrv/alias.c
reactos/win32ss/user/consrv/alias.h
reactos/win32ss/user/consrv/api.h
reactos/win32ss/user/consrv/coninput.c
reactos/win32ss/user/consrv/coninput.h
reactos/win32ss/user/consrv/conio.h
reactos/win32ss/user/consrv/conoutput.c
reactos/win32ss/user/consrv/conoutput.h
reactos/win32ss/user/consrv/console.c
reactos/win32ss/user/consrv/console.h
reactos/win32ss/user/consrv/consrv.h
reactos/win32ss/user/consrv/consrv.rc
reactos/win32ss/user/consrv/consrv.spec
reactos/win32ss/user/consrv/frontends/frontends.rc
reactos/win32ss/user/consrv/frontends/gui/consolecpl.h
reactos/win32ss/user/consrv/frontends/gui/guisettings.c
reactos/win32ss/user/consrv/frontends/gui/guisettings.h
reactos/win32ss/user/consrv/frontends/gui/guiterm.c
reactos/win32ss/user/consrv/frontends/gui/guiterm.h
reactos/win32ss/user/consrv/frontends/gui/guiterm.rc
reactos/win32ss/user/consrv/frontends/gui/lang/bg-BG.rc
reactos/win32ss/user/consrv/frontends/gui/lang/cs-CZ.rc
reactos/win32ss/user/consrv/frontends/gui/lang/de-DE.rc
reactos/win32ss/user/consrv/frontends/gui/lang/el-GR.rc
reactos/win32ss/user/consrv/frontends/gui/lang/en-US.rc
reactos/win32ss/user/consrv/frontends/gui/lang/es-ES.rc
reactos/win32ss/user/consrv/frontends/gui/lang/fr-FR.rc
reactos/win32ss/user/consrv/frontends/gui/lang/he-IL.rc
reactos/win32ss/user/consrv/frontends/gui/lang/id-ID.rc
reactos/win32ss/user/consrv/frontends/gui/lang/it-IT.rc
reactos/win32ss/user/consrv/frontends/gui/lang/ja-JP.rc
reactos/win32ss/user/consrv/frontends/gui/lang/no-NO.rc
reactos/win32ss/user/consrv/frontends/gui/lang/pl-PL.rc
reactos/win32ss/user/consrv/frontends/gui/lang/pt-BR.rc
reactos/win32ss/user/consrv/frontends/gui/lang/ro-RO.rc
reactos/win32ss/user/consrv/frontends/gui/lang/ru-RU.rc
reactos/win32ss/user/consrv/frontends/gui/lang/sk-SK.rc
reactos/win32ss/user/consrv/frontends/gui/lang/sv-SE.rc
reactos/win32ss/user/consrv/frontends/gui/lang/tr-TR.rc
reactos/win32ss/user/consrv/frontends/gui/lang/uk-UA.rc
reactos/win32ss/user/consrv/frontends/gui/lang/zh-CN.rc
reactos/win32ss/user/consrv/frontends/gui/lang/zh-TW.rc
reactos/win32ss/user/consrv/frontends/gui/res/terminal.ico
reactos/win32ss/user/consrv/frontends/gui/resource.h
reactos/win32ss/user/consrv/frontends/gui/rsrc.rc
reactos/win32ss/user/consrv/frontends/tui/tuiterm.c
reactos/win32ss/user/consrv/frontends/tui/tuiterm.h
reactos/win32ss/user/consrv/handle.c
reactos/win32ss/user/consrv/handle.h
reactos/win32ss/user/consrv/include/conio.h
reactos/win32ss/user/consrv/include/console.h
reactos/win32ss/user/consrv/include/settings.h
reactos/win32ss/user/consrv/init.c
reactos/win32ss/user/consrv/lang/bg-BG.rc
reactos/win32ss/user/consrv/lang/cs-CZ.rc
reactos/win32ss/user/consrv/lang/de-DE.rc
reactos/win32ss/user/consrv/lang/el-GR.rc
reactos/win32ss/user/consrv/lang/en-US.rc
reactos/win32ss/user/consrv/lang/es-ES.rc
reactos/win32ss/user/consrv/lang/fr-FR.rc
reactos/win32ss/user/consrv/lang/he-IL.rc
reactos/win32ss/user/consrv/lang/id-ID.rc
reactos/win32ss/user/consrv/lang/it-IT.rc
reactos/win32ss/user/consrv/lang/ja-JP.rc
reactos/win32ss/user/consrv/lang/no-NO.rc
reactos/win32ss/user/consrv/lang/pl-PL.rc
reactos/win32ss/user/consrv/lang/pt-BR.rc
reactos/win32ss/user/consrv/lang/ro-RO.rc
reactos/win32ss/user/consrv/lang/ru-RU.rc
reactos/win32ss/user/consrv/lang/sk-SK.rc
reactos/win32ss/user/consrv/lang/sv-SE.rc
reactos/win32ss/user/consrv/lang/tr-TR.rc
reactos/win32ss/user/consrv/lang/uk-UA.rc
reactos/win32ss/user/consrv/lang/zh-CN.rc
reactos/win32ss/user/consrv/lang/zh-TW.rc
reactos/win32ss/user/consrv/lineinput.c
reactos/win32ss/user/consrv/lineinput.h
reactos/win32ss/user/consrv/procinit.h
reactos/win32ss/user/consrv/resource.h
reactos/win32ss/user/consrv/rsrc.rc
reactos/win32ss/user/consrv/settings.c
reactos/win32ss/user/ntuser/desktop.c
reactos/win32ss/user/ntuser/hook.c
reactos/win32ss/user/ntuser/main.c
reactos/win32ss/user/ntuser/menu.c
reactos/win32ss/user/ntuser/ntstubs.c
reactos/win32ss/user/ntuser/ntuser.c
reactos/win32ss/user/ntuser/ntuser.h
reactos/win32ss/user/ntuser/simplecall.c
reactos/win32ss/user/ntuser/userfuncs.h
reactos/win32ss/user/ntuser/window.c
reactos/win32ss/user/ntuser/winsta.c
reactos/win32ss/user/ntuser/winsta.h
reactos/win32ss/user/user32/include/user32.h
reactos/win32ss/user/user32/include/user32p.h
reactos/win32ss/user/user32/include/user_x.h
reactos/win32ss/user/user32/misc/dllmain.c
reactos/win32ss/user/user32/misc/exit.c
reactos/win32ss/user/user32/misc/misc.c
reactos/win32ss/user/winsrv/CMakeLists.txt
reactos/win32ss/user/winsrv/api.h
reactos/win32ss/user/winsrv/harderror.c
reactos/win32ss/user/winsrv/init.c
reactos/win32ss/user/winsrv/lang/bg-BG.rc
reactos/win32ss/user/winsrv/lang/cs-CZ.rc
reactos/win32ss/user/winsrv/lang/de-DE.rc
reactos/win32ss/user/winsrv/lang/el-GR.rc
reactos/win32ss/user/winsrv/lang/en-US.rc
reactos/win32ss/user/winsrv/lang/es-ES.rc
reactos/win32ss/user/winsrv/lang/fr-FR.rc
reactos/win32ss/user/winsrv/lang/he-IL.rc
reactos/win32ss/user/winsrv/lang/id-ID.rc
reactos/win32ss/user/winsrv/lang/it-IT.rc
reactos/win32ss/user/winsrv/lang/ja-JP.rc
reactos/win32ss/user/winsrv/lang/no-NO.rc
reactos/win32ss/user/winsrv/lang/pl-PL.rc
reactos/win32ss/user/winsrv/lang/pt-BR.rc
reactos/win32ss/user/winsrv/lang/ro-RO.rc
reactos/win32ss/user/winsrv/lang/ru-RU.rc
reactos/win32ss/user/winsrv/lang/sk-SK.rc
reactos/win32ss/user/winsrv/lang/sv-SE.rc
reactos/win32ss/user/winsrv/lang/tr-TR.rc
reactos/win32ss/user/winsrv/lang/uk-UA.rc
reactos/win32ss/user/winsrv/lang/zh-CN.rc
reactos/win32ss/user/winsrv/lang/zh-TW.rc
reactos/win32ss/user/winsrv/register.c
reactos/win32ss/user/winsrv/resource.h
reactos/win32ss/user/winsrv/rsrc.rc
reactos/win32ss/user/winsrv/shutdown.c
reactos/win32ss/user/winsrv/winsrv.h
reactos/win32ss/user/winsrv/winsrv.rc
reactos/win32ss/user/winsrv/winsrv.spec
reactos/win32ss/win32kp.h

Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 7e3e77d,7e3e77d..7e3e77d
Binary files differ
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 0000000,0000000..78672e0
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,69 @@@
++/*
++ * COPYRIGHT:       See COPYING in the top level directory
++ * PROJECT:         ReactOS System Libraries
++ * FILE:            dll/win32/kernel32/include/console.h
++ * PURPOSE:         Console API Client Definitions
++ * PROGRAMMERS:     Hermes Belusca-Maito (hermes.belusca@sfr.fr)
++ */
++
++#pragma once
++
++/* CONSTANTS ******************************************************************/
++
++#define HANDLE_DETACHED_PROCESS    (HANDLE)-2
++#define HANDLE_CREATE_NEW_CONSOLE  (HANDLE)-3
++#define HANDLE_CREATE_NO_WINDOW    (HANDLE)-4
++
++
++/* FUNCTION PROTOTYPES ********************************************************/
++
++BOOL WINAPI
++BasepInitConsole(VOID);
++
++VOID WINAPI
++BasepUninitConsole(VOID);
++
++VOID WINAPI
++InitConsoleCtrlHandling(VOID);
++
++DWORD WINAPI
++ConsoleControlDispatcher(IN LPVOID lpThreadParameter);
++
++DWORD WINAPI
++PropDialogHandler(IN LPVOID lpThreadParameter);
++
++HANDLE WINAPI
++DuplicateConsoleHandle(HANDLE hConsole,
++                       DWORD  dwDesiredAccess,
++                       BOOL   bInheritHandle,
++                       DWORD  dwOptions);
++
++BOOL WINAPI
++VerifyConsoleIoHandle(HANDLE Handle);
++
++BOOL WINAPI
++CloseConsoleHandle(HANDLE Handle);
++
++HANDLE WINAPI
++GetConsoleInputWaitHandle(VOID);
++
++HANDLE FASTCALL
++TranslateStdHandle(HANDLE hHandle);
++
++VOID
++InitConsoleInfo(IN OUT PCONSOLE_START_INFO ConsoleStartInfo);
++
++LPCWSTR
++IntCheckForConsoleFileName(IN LPCWSTR pszName,
++                           IN DWORD dwDesiredAccess);
++
++HANDLE WINAPI
++OpenConsoleW(LPCWSTR wsName,
++             DWORD   dwDesiredAccess,
++             BOOL    bInheritHandle,
++             DWORD   dwShareMode);
++
++BOOL WINAPI
++SetConsoleInputExeNameW(LPCWSTR lpInputExeName);
++
++/* EOF */
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 0000000,df6fe17..df6fe17
mode 000000,100644..100644
--- /dev/null
index 0000000,3e7d43c..3e7d43c
mode 000000,100644..100644
--- /dev/null
Simple merge
index 0000000,ac99dc8..ac99dc8
mode 000000,100644..100644
--- /dev/null
Simple merge
index 0000000,c45e35e..c45e35e
mode 000000,100644..100644
--- /dev/null
Simple merge
Simple merge
index 0bb6595,0000000..6f63e12
mode 100644,000000..100644
--- /dev/null
@@@ -1,3448 -1,0 +1,3455 @@@
- DWORD
- NTAPI
 +#ifndef __WIN32K_NTUSER_H
 +#define __WIN32K_NTUSER_H
 +
 +typedef struct _PROCESSINFO *PPROCESSINFO;
 +typedef struct _THREADINFO *PTHREADINFO;
 +struct _DESKTOP;
 +struct _WND;
 +
 +#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
 +
 +typedef struct _USER_HANDLE_ENTRY
 +{
 +    void          *ptr;          /* pointer to object */
 +    union
 +    {
 +        PVOID pi;
 +        PTHREADINFO pti;          // pointer to Win32ThreadInfo
 +        PPROCESSINFO 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;
 +
 +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;
 +
 +typedef enum _HANDLE_TYPE
 +{
 +    TYPE_FREE = 0,
 +    TYPE_WINDOW = 1,
 +    TYPE_MENU = 2,
 +    TYPE_CURSOR = 3,
 +    TYPE_SETWINDOWPOS = 4,
 +    TYPE_HOOK = 5,
 +    TYPE_CLIPDATA = 6,
 +    TYPE_CALLPROC = 7,
 +    TYPE_ACCELTABLE = 8,
 +    TYPE_DDEACCESS = 9,
 +    TYPE_DDECONV = 10,
 +    TYPE_DDEXACT = 11,
 +    TYPE_MONITOR = 12,
 +    TYPE_KBDLAYOUT = 13,
 +    TYPE_KBDFILE = 14,
 +    TYPE_WINEVENTHOOK = 15,
 +    TYPE_TIMER = 16,
 +    TYPE_INPUTCONTEXT = 17,
 +    TYPE_HIDDATA = 18,
 +    TYPE_DEVICEINFO = 19,
 +    TYPE_TOUCHINPUTINFO = 20,
 +    TYPE_GESTUREINFOOBJ = 21,
 +    TYPE_CTYPES,
 +    TYPE_GENERIC = 255
 +} HANDLE_TYPE, *PHANDLE_TYPE;
 +
 +typedef enum _USERTHREADINFOCLASS
 +{
 +    UserThreadShutdownInformation,
 +    UserThreadFlags,
 +    UserThreadTaskName,
 +    UserThreadWOWInformation,
 +    UserThreadHungStatus,
 +    UserThreadInitiateShutdown,
 +    UserThreadEndShutdown,
 +    UserThreadUseActiveDesktop,
 +    UserThreadUseDesktop,
 +    UserThreadRestoreDesktop,
 +    UserThreadCsrApiPort,
 +} USERTHREADINFOCLASS;
 +
 +typedef struct _LARGE_UNICODE_STRING
 +{
 +  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;
 +} LARGE_STRING, *PLARGE_STRING;
 +//
 +// Based on ANSI_STRING
 +//
 +typedef struct _LARGE_ANSI_STRING
 +{
 +  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);
 +
 +#define NB_HOOKS (WH_MAXHOOK-WH_MINHOOK+1)
 +
 +typedef struct _DESKTOPINFO
 +{
 +    PVOID pvDesktopBase;
 +    PVOID pvDesktopLimit;
 +    struct _WND *spwnd;
 +    DWORD fsHooks;
 +    LIST_ENTRY aphkStart[NB_HOOKS];
 +
 +    HWND hTaskManWindow;
 +    HWND hProgmanWindow;
 +    HWND hShellWindow;
 +
 +    PPROCESSINFO ppiShellProcess;
 +
 +    union
 +    {
 +        UINT Dummy;
 +        struct
 +        {
 +            UINT LastInputWasKbd : 1;
 +        };
 +    };
 +
 +    WCHAR szDesktopName[1];
 +} DESKTOPINFO, *PDESKTOPINFO;
 +
 +#define CTI_THREADSYSLOCK 0x0001
 +#define CTI_INSENDMESSAGE 0x0002
 +
 +typedef struct _CLIENTTHREADINFO
 +{
 +    DWORD CTI_flags;
 +    WORD  fsChangeBits;
 +    WORD  fsWakeBits;
 +    WORD  fsWakeBitsJournal;
 +    WORD  fsWakeMask;
 +    ULONG tickLastMsgChecked;
 +    DWORD dwcPumpHook;
 +} CLIENTTHREADINFO, *PCLIENTTHREADINFO;
 +
 +typedef struct _HEAD
 +{
 +  HANDLE h;
 +  DWORD  cLockObj;
 +} HEAD, *PHEAD;
 +
 +typedef struct _THROBJHEAD
 +{
 +  HEAD;
 +  PTHREADINFO pti;
 +} THROBJHEAD, *PTHROBJHEAD;
 +
 +typedef struct _THRDESKHEAD
 +{
 +  THROBJHEAD;
 +  struct _DESKTOP *rpdesk;
 +  PVOID       pSelf;
 +} THRDESKHEAD, *PTHRDESKHEAD;
 +
 +typedef struct _PROCDESKHEAD
 +{
 +  HEAD;
 +  DWORD hTaskWow;
 +  struct _DESKTOP *rpdesk;
 +  PVOID       pSelf;
 +} PROCDESKHEAD, *PPROCDESKHEAD;
 +
 +typedef struct _PROCMARKHEAD
 +{
 +  HEAD;
 +  ULONG hTaskWow;
 +  PPROCESSINFO ppi;
 +} PROCMARKHEAD, *PPROCMARKHEAD;
 +
 +#define UserHMGetHandle(obj) ((obj)->head.h)
 +
 +/* Window Client Information structure */
 +struct  _ETHREAD;
 +
 +#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 */
 +} HOOK, *PHOOK;
 +
 +typedef struct tagCLIPBOARDDATA
 +{
 +  HEAD  head;
 +  DWORD cbData;
 +  BYTE  Data[0];
 +} CLIPBOARDDATA, *PCLIPBOARDDATA;
 +
 +/* THREADINFO Flags */
 +#define TIF_INCLEANUP               0x00000001
 +#define TIF_16BIT                   0x00000002
 +#define TIF_SYSTEMTHREAD            0x00000004
 +#define TIF_CSRSSTHREAD             0x00000008
 +#define TIF_TRACKRECTVISIBLE        0x00000010
 +#define TIF_ALLOWFOREGROUNDACTIVATE 0x00000020
 +#define TIF_DONTATTACHQUEUE         0x00000040
 +#define TIF_DONTJOURNALATTACH       0x00000080
 +#define TIF_WOW64                   0x00000100
 +#define TIF_INACTIVATEAPPMSG        0x00000200
 +#define TIF_SPINNING                0x00000400
 +#define TIF_PALETTEAWARE            0x00000800
 +#define TIF_SHAREDWOW               0x00001000
 +#define TIF_FIRSTIDLE               0x00002000
 +#define TIF_WAITFORINPUTIDLE        0x00004000
 +#define TIF_MOVESIZETRACKING        0x00008000
 +#define TIF_VDMAPP                  0x00010000
 +#define TIF_DOSEMULATOR             0x00020000
 +#define TIF_GLOBALHOOKER            0x00040000
 +#define TIF_DELAYEDEVENT            0x00080000
 +#define TIF_MSGPOSCHANGED           0x00100000
 +#define TIF_SHUTDOWNCOMPLETE        0x00200000
 +#define TIF_IGNOREPLAYBACKDELAY     0x00400000
 +#define TIF_ALLOWOTHERACCOUNTHOOK   0x00800000
 +#define TIF_GUITHREADINITIALIZED    0x02000000
 +#define TIF_DISABLEIME              0x04000000
 +#define TIF_INGETTEXTLENGTH         0x08000000
 +#define TIF_ANSILENGTH              0x10000000
 +#define TIF_DISABLEHOOKS            0x20000000
 +
 +typedef struct _CALLBACKWND
 +{
 +     HWND hWnd;
 +     struct _WND *pWnd;
 +     PVOID pActCtx;
 +} CALLBACKWND, *PCALLBACKWND;
 +
 +#define CI_TRANSACTION       0x00000001
 +#define CI_QUEUEMSG          0x00000002
 +#define CI_WOW               0x00000004
 +#define CI_INITTHREAD        0x00000008
 +#define CI_CURTHPRHOOK       0x00000010
 +#define CI_CLASSESREGISTERED 0x00000020
 +#define CI_IMMACTIVATE       0x00000040
 +
 +typedef struct _CLIENTINFO
 +{
 +    ULONG_PTR CI_flags;
 +    ULONG_PTR cSpins;
 +    DWORD dwExpWinVer;
 +    DWORD dwCompatFlags;
 +    DWORD dwCompatFlags2;
 +    DWORD dwTIFlags; // ThreadInfo TIF_Xxx flags for User space.
 +    PDESKTOPINFO pDeskInfo;
 +    ULONG_PTR ulClientDelta;
 +    PHOOK phkCurrent;
 +    ULONG fsHooks;
 +    CALLBACKWND CallbackWnd;
 +    DWORD dwHookCurrent;
 +    INT cInDDEMLCallback;
 +    PCLIENTTHREADINFO pClientThreadInfo;
 +    ULONG_PTR dwHookData;
 +    DWORD dwKeyCache;
 +    BYTE afKeyState[8];
 +    DWORD dwAsyncKeyCache;
 +    BYTE afAsyncKeyState[8];
 +    BYTE afAsyncKeyStateRecentDow[8];
 +    HKL hKL;
 +    USHORT CodePage;
 +    UCHAR achDbcsCF[2];
 +    MSG msgDbcsCB;
 +    LPDWORD lpdwRegisteredClasses;
 +    ULONG Win32ClientInfo3[26];
 +/* It's just a pointer reference not to be used w the structure in user space. */
 +    PPROCESSINFO ppi;
 +} CLIENTINFO, *PCLIENTINFO;
 +
 +/* Make sure it fits into the TEB */
 +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.
 +
 +/* Menu Item fType. */
 +#define MFT_RTOL 0x6000
 +
 +typedef struct tagITEM
 +{
 +    UINT fType;
 +    UINT fState;
 +    UINT wID;
 +    struct tagMENU* spSubMenu; /* Pop-up menu. */
 +    HANDLE hbmpChecked;
 +    HANDLE hbmpUnchecked;
 +    USHORT* lpstr; /* 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 ulWidth; /* underline.. width */
 +    HBITMAP hbmp;  /* bitmap */
 +    INT cxBmp;     /* Width Maximum size of the bitmap items in MIIM_BITMAP state */
 +    INT cyBmp;     /* Height " */
 +} ITEM, *PITEM;
 +
 +typedef struct tagMENULIST
 +{
 +   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
 +
 +typedef struct tagMENU
 +{
 +    PROCDESKHEAD head;
 +    ULONG fFlags;             /* [Style flags | Menu flags] */
 +    INT iItem;                /* nPos of selected item, if -1 not selected. */
 +    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 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. */
 +} MENU, *PMENU;
 +
 +typedef struct _REGISTER_SYSCLASS
 +{
 +    /* This is a reactos specific class used to initialize the
 +       system window classes during user32 initialization */
 +    PWSTR ClassName;
 +    UINT Style;
 +    WNDPROC ProcW;
 +    UINT ExtraBytes;
 +    HICON hCursor;
 +    HBRUSH hBrush;
 +    WORD fiId;
 +    WORD iCls;
 +} REGISTER_SYSCLASS, *PREGISTER_SYSCLASS;
 +
 +typedef struct _CLSMENUNAME
 +{
 +  LPSTR     pszClientAnsiMenuName;
 +  LPWSTR    pwszClientUnicodeMenuName;
 +  PUNICODE_STRING pusMenuName;
 +} CLSMENUNAME, *PCLSMENUNAME;
 +
 +typedef struct tagSBDATA
 +{
 +  INT posMin;
 +  INT posMax;
 +  INT page;
 +  INT pos;
 +} SBDATA, *PSBDATA;
 +
 +typedef struct tagSBINFO
 +{
 +  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;
 +} SBCALC, *PSBCALC;
 +
 +typedef enum _GETCPD
 +{
 +    UserGetCPDA2U      = 0x01, // " Unicode "
 +    UserGetCPDU2A      = 0X02, // " Ansi "
 +    UserGetCPDClass    = 0X10,
 +    UserGetCPDWindow   = 0X20,
 +    UserGetCPDDialog   = 0X40,
 +    UserGetCPDWndtoCls = 0X80
 +} GETCPD, *PGETCPD;
 +
 +typedef struct _CALLPROCDATA
 +{
 +    PROCDESKHEAD head;
 +    struct _CALLPROCDATA *spcpdNext;
 +    WNDPROC pfnClientPrevious;
 +    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
 +
 +typedef struct _CLS
 +{
 +    struct _CLS *pclsNext;
 +    RTL_ATOM atomClassName;
 +    ATOM atomNVClassName;
 +    DWORD fnid;
 +    struct _DESKTOP *rpdeskParent;
 +    PVOID pdce;
 +    DWORD CSF_flags;
 +    PSTR  lpszClientAnsiMenuName;    // For client use
 +    PWSTR lpszClientUnicodeMenuName; // "   "      "
 +    PCALLPROCDATA spcpdFirst;
 +    struct _CLS *pclsBase;
 +    struct _CLS *pclsClone;
 +    ULONG cWndReferenceCount;
 +    UINT style;
 +    WNDPROC lpfnWndProc;
 +    INT cbclsExtra;
 +    INT cbwndExtra;
 +    HINSTANCE hModule;
 +    HANDLE hIcon; /* FIXME - Use pointer! */
 +    //PCURSOR spicn;
 +    HANDLE hCursor; /* FIXME - Use pointer! */
 +    //PCURSOR spcur;
 +    HBRUSH hbrBackground;
 +    PWSTR lpszMenuName;     // kernel use
 +    PSTR lpszAnsiClassName; // "
 +    HANDLE hIconSm; /* FIXME - Use pointer! */
 +    //PCURSOR spicnSm;
 +
 +    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;
 +} SBINFOEX, *PSBINFOEX;
 +
 +// State Flags !Not Implemented!
 +#define WNDS_HASMENU                 0X00000001
 +#define WNDS_HASVERTICALSCROOLLBAR   0X00000002
 +#define WNDS_HASHORIZONTALSCROLLBAR  0X00000004
 +#define WNDS_HASCAPTION              0X00000008
 +#define WNDS_SENDSIZEMOVEMSGS        0X00000010
 +#define WNDS_MSGBOX                  0X00000020
 +#define WNDS_ACTIVEFRAME             0X00000040
 +#define WNDS_HASSPB                  0X00000080
 +#define WNDS_NONCPAINT               0X00000100
 +#define WNDS_SENDERASEBACKGROUND     0X00000200
 +#define WNDS_ERASEBACKGROUND         0X00000400
 +#define WNDS_SENDNCPAINT             0X00000800
 +#define WNDS_INTERNALPAINT           0X00001000
 +#define WNDS_UPDATEDIRTY             0X00002000
 +#define WNDS_HIDDENPOPUP             0X00004000
 +#define WNDS_FORCEMENUDRAW           0X00008000
 +#define WNDS_DIALOGWINDOW            0X00010000
 +#define WNDS_HASCREATESTRUCTNAME     0X00020000
 +#define WNDS_SERVERSIDEWINDOWPROC    0x00040000 // Call proc inside win32k.
 +#define WNDS_ANSIWINDOWPROC          0x00080000
 +#define WNDS_BEINGACTIVATED          0x00100000
 +#define WNDS_HASPALETTE              0x00200000
 +#define WNDS_PAINTNOTPROCESSED       0x00400000
 +#define WNDS_SYNCPAINTPENDING        0x00800000
 +#define WNDS_RECEIVEDQUERYSUSPENDMSG 0x01000000
 +#define WNDS_RECEIVEDSUSPENDMSG      0x02000000
 +#define WNDS_TOGGLETOPMOST           0x04000000
 +#define WNDS_REDRAWIFHUNG            0x08000000
 +#define WNDS_REDRAWFRAMEIFHUNG       0x10000000
 +#define WNDS_ANSICREATOR             0x20000000
 +#define WNDS_MAXIMIZESTOMONITOR      0x40000000
 +#define WNDS_DESTROYED               0x80000000
 +
 +#define WNDSACTIVEFRAME              0x00000006
 +
 +// State2 Flags !Not Implemented!
 +#define WNDS2_WMPAINTSENT               0X00000001
 +#define WNDS2_ENDPAINTINVALIDATE        0X00000002
 +#define WNDS2_STARTPAINT                0X00000004
 +#define WNDS2_OLDUI                     0X00000008
 +#define WNDS2_HASCLIENTEDGE             0X00000010
 +#define WNDS2_BOTTOMMOST                0X00000020
 +#define WNDS2_FULLSCREEN                0X00000040
 +#define WNDS2_INDESTROY                 0X00000080
 +#define WNDS2_WIN31COMPAT               0X00000100
 +#define WNDS2_WIN40COMPAT               0X00000200
 +#define WNDS2_WIN50COMPAT               0X00000400
 +#define WNDS2_MAXIMIZEDMONITORREGION    0X00000800
 +#define WNDS2_CLOSEBUTTONDOWN           0X00001000
 +#define WNDS2_MAXIMIZEBUTTONDOWN        0X00002000
 +#define WNDS2_MINIMIZEBUTTONDOWN        0X00004000
 +#define WNDS2_HELPBUTTONDOWN            0X00008000
 +#define WNDS2_SCROLLBARLINEUPBTNDOWN    0X00010000
 +#define WNDS2_SCROLLBARPAGEUPBTNDOWN    0X00020000
 +#define WNDS2_SCROLLBARPAGEDOWNBTNDOWN  0X00040000
 +#define WNDS2_SCROLLBARLINEDOWNBTNDOWN  0X00080000
 +#define WNDS2_ANYSCROLLBUTTONDOWN       0X00100000
 +#define WNDS2_SCROLLBARVERTICALTRACKING 0X00200000
 +#define WNDS2_FORCENCPAINT              0X00400000
 +#define WNDS2_FORCEFULLNCPAINTCLIPRGN   0X00800000
 +#define WNDS2_FULLSCREENMODE            0X01000000
 +#define WNDS2_CAPTIONTEXTTRUNCATED      0X08000000
 +#define WNDS2_NOMINMAXANIMATERECTS      0X10000000
 +#define WNDS2_SMALLICONFROMWMQUERYDRAG  0X20000000
 +#define WNDS2_SHELLHOOKREGISTERED       0X40000000
 +#define WNDS2_WMCREATEMSGPROCESSED      0X80000000
 +
 +/* ExStyles2 */
 +#define WS_EX2_CLIPBOARDLISTENER        0X00000001
 +#define WS_EX2_LAYEREDINVALIDATE        0X00000002
 +#define WS_EX2_REDIRECTEDFORPRINT       0X00000004
 +#define WS_EX2_LINKED                   0X00000008
 +#define WS_EX2_LAYEREDFORDWM            0X00000010
 +#define WS_EX2_LAYEREDLIMBO             0X00000020
 +#define WS_EX2_HIGHTDPI_UNAWAR          0X00000040
 +#define WS_EX2_VERTICALLYMAXIMIZEDLEFT  0X00000080
 +#define WS_EX2_VERTICALLYMAXIMIZEDRIGHT 0X00000100
 +#define WS_EX2_HASOVERLAY               0X00000200
 +#define WS_EX2_CONSOLEWINDOW            0X00000400
 +#define WS_EX2_CHILDNOACTIVATE          0X00000800
 +
 +#define WPF_MININIT    0x0008
 +#define WPF_MAXINIT    0x0010
 +
 +typedef struct _WND
 +{
 +    THRDESKHEAD head;
 +    DWORD state;
 +    DWORD state2;
 +    /* Extended style. */
 +    DWORD ExStyle;
 +    /* Style. */
 +    DWORD style;
 +    /* Handle of the module that created the window. */
 +    HINSTANCE hModule;
 +    DWORD fnid;
 +    struct _WND *spwndNext;
 +    struct _WND *spwndPrev;
 +    struct _WND *spwndParent;
 +    struct _WND *spwndChild;
 +    struct _WND *spwndOwner;
 +    RECT rcWindow;
 +    RECT rcClient;
 +    WNDPROC lpfnWndProc;
 +    /* Pointer to the window class. */
 +    PCLS pcls;
 +    HRGN hrgnUpdate;
 +    /* Property list head.*/
 +    LIST_ENTRY PropListHead;
 +    ULONG PropListItems;
 +    /* Scrollbar info */
 +    PSBINFO pSBInfo;
 +    /* system menu handle. */
 +    HMENU SystemMenu;
 +    //PMENU spmenuSys;
 +    /* Window menu handle or window id */
 +    UINT IDMenu; // Use spmenu
 +    //PMENU spmenu;
 +    HRGN hrgnClip;
 +    HRGN hrgnNewFrame;
 +    /* Window name. */
 +    LARGE_UNICODE_STRING strName;
 +    /* Size of the extra data associated with the window. */
 +    ULONG cbwndExtra;
 +    struct _WND *spwndLastActive;
 +    //HIMC hImc; // Input context associated with this window.
 +    LONG dwUserData;
 +    PVOID pActCtx;
 +    //PD3DMATRIX pTransForm;
 +    struct _WND *spwndClipboardListener;
 +    DWORD ExStyle2;
 +
 +    /* ReactOS */
 +    struct
 +    {
 +        RECT NormalRect;
 +        POINT IconPos;
 +        POINT MaxPos;
 +        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 ?
 +
 +  /* Scrollbar info */
 +  PSBINFOEX pSBInfoex; // convert to PSBINFO
 +  /* Entry in the list of thread windows. */
 +  LIST_ENTRY ThreadListEntry;
 +} WND, *PWND;
 +
 +#define PWND_BOTTOM ((PWND)1)
 +
 +typedef struct _SBWND
 +{
 +  WND    wnd;
 +  BOOL   fVert;
 +  UINT   wDisableFlags;
 +  SBCALC SBCalc;
 +} SBWND, *PSBWND;
 +
 +typedef struct _PFNCLIENT
 +{
 +    WNDPROC pfnScrollBarWndProc;
 +    WNDPROC pfnTitleWndProc;
 +    WNDPROC pfnMenuWndProc;
 +    WNDPROC pfnDesktopWndProc;
 +    WNDPROC pfnDefWindowProc;
 +    WNDPROC pfnMessageWindowProc;
 +    WNDPROC pfnSwitchWindowProc;
 +    WNDPROC pfnButtonWndProc;
 +    WNDPROC pfnComboBoxWndProc;
 +    WNDPROC pfnComboListBoxProc;
 +    WNDPROC pfnDialogWndProc;
 +    WNDPROC pfnEditWndProc;
 +    WNDPROC pfnListBoxWndProc;
 +    WNDPROC pfnMDIClientWndProc;
 +    WNDPROC pfnStaticWndProc;
 +    WNDPROC pfnImeWndProc;
 +    WNDPROC pfnGhostWndProc;
 +    WNDPROC pfnHkINLPCWPSTRUCT;
 +    WNDPROC pfnHkINLPCWPRETSTRUCT;
 +    WNDPROC pfnDispatchHook;
 +    WNDPROC pfnDispatchDefWindowProc;
 +    WNDPROC pfnDispatchMessage;
 +    WNDPROC pfnMDIActivateDlgProc;
 +} PFNCLIENT, *PPFNCLIENT;
 +
 +/*
 +  Wine Common proc ( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL Unicode );
 +  Windows uses Ansi == TRUE, Wine uses Unicode == TRUE.
 + */
 +
 +typedef LRESULT(CALLBACK *WNDPROC_EX)(HWND,UINT,WPARAM,LPARAM,BOOL);
 +
 +typedef struct _PFNCLIENTWORKER
 +{
 +    WNDPROC_EX pfnButtonWndProc;
 +    WNDPROC_EX pfnComboBoxWndProc;
 +    WNDPROC_EX pfnComboListBoxProc;
 +    WNDPROC_EX pfnDialogWndProc;
 +    WNDPROC_EX pfnEditWndProc;
 +    WNDPROC_EX pfnListBoxWndProc;
 +    WNDPROC_EX pfnMDIClientWndProc;
 +    WNDPROC_EX pfnStaticWndProc;
 +    WNDPROC_EX pfnImeWndProc;
 +    WNDPROC_EX pfnGhostWndProc;
 +    WNDPROC_EX pfnCtfHookProc;
 +} PFNCLIENTWORKER, *PPFNCLIENTWORKER;
 +
 +typedef LONG_PTR (NTAPI *PFN_FNID)(PWND, UINT, WPARAM, LPARAM, ULONG_PTR);
 +
 +// FNID's for NtUserSetWindowFNID, NtUserMessageCall
 +#define FNID_FIRST                  0x029A
 +#define FNID_SCROLLBAR              0x029A
 +#define FNID_ICONTITLE              0x029B
 +#define FNID_MENU                   0x029C
 +#define FNID_DESKTOP                0x029D
 +#define FNID_DEFWINDOWPROC          0x029E
 +#define FNID_MESSAGEWND             0x029F
 +#define FNID_SWITCH                 0x02A0
 +#define FNID_BUTTON                 0x02A1
 +#define FNID_COMBOBOX               0x02A2
 +#define FNID_COMBOLBOX              0x02A3
 +#define FNID_DIALOG                 0x02A4
 +#define FNID_EDIT                   0x02A5
 +#define FNID_LISTBOX                0x02A6
 +#define FNID_MDICLIENT              0x02A7
 +#define FNID_STATIC                 0x02A8
 +#define FNID_IME                    0x02A9
 +#define FNID_GHOST                  0x02AA
 +#define FNID_CALLWNDPROC            0x02AB
 +#define FNID_CALLWNDPROCRET         0x02AC
 +#define FNID_HKINLPCWPEXSTRUCT      0x02AD
 +#define FNID_HKINLPCWPRETEXSTRUCT   0x02AE
 +#define FNID_MB_DLGPROC             0x02AF
 +#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.
 +#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_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)\
 + (WNDPROC)(*(((ULONG_PTR *)&gpsi->apfnClientA) + (fnid - FNID_FIRST)))
 +#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
 +#define ICLS_BUTTON       0
 +#define ICLS_EDIT         1
 +#define ICLS_STATIC       2
 +#define ICLS_LISTBOX      3
 +#define ICLS_SCROLLBAR    4
 +#define ICLS_COMBOBOX     5
 +#define ICLS_MDICLIENT    6
 +#define ICLS_COMBOLBOX    7
 +#define ICLS_DDEMLEVENT   8
 +#define ICLS_DDEMLMOTHER  9
 +#define ICLS_DDEML16BIT   10
 +#define ICLS_DDEMLCLIENTA 11
 +#define ICLS_DDEMLCLIENTW 12
 +#define ICLS_DDEMLSERVERA 13
 +#define ICLS_DDEMLSERVERW 14
 +#define ICLS_IME          15
 +#define ICLS_GHOST        16
 +#define ICLS_DESKTOP      17
 +#define ICLS_DIALOG       18
 +#define ICLS_MENU         19
 +#define ICLS_SWITCH       20
 +#define ICLS_ICONTITLE    21
 +#define ICLS_TOOLTIPS     22
 +#if (_WIN32_WINNT <= 0x0501)
 +#define ICLS_UNKNOWN      22
 +#define ICLS_NOTUSED      23
 +#else
 +#define ICLS_SYSSHADOW    23
 +#define ICLS_HWNDMESSAGE  24
 +#define ICLS_NOTUSED      25
 +#endif
 +#define ICLS_END          31
 +
 +#define COLOR_LAST COLOR_MENUBAR
 +#define MAX_MB_STRINGS 11
 +
 +#define SRVINFO_APIHOOK 0x0010
 +#define SRVINFO_METRICS 0x0020
 +#define SRVINFO_KBDPREF 0x0080
 +
 +#define NUM_SYSCOLORS 31
 +
 +typedef struct tagOEMBITMAPINFO
 +{
 +    INT x;
 +    INT y;
 +    INT cx;
 +    INT cy;
 +} OEMBITMAPINFO, *POEMBITMAPINFO;
 +
 +typedef struct tagMBSTRING
 +{
 +    WCHAR szName[16];
 +    UINT uID;
 +    UINT uStr;
 +} MBSTRING, *PMBSTRING;
 +
 +typedef struct tagDPISERVERINFO
 +{
 +    INT gclBorder;                       /* 000 */
 +    HFONT hCaptionFont;                  /* 004 */
 +    HFONT hMsgFont;                      /* 008 */
 +    INT cxMsgFontChar;                   /* 00C */
 +    INT cyMsgFontChar;                   /* 010 */
 +    UINT wMaxBtnSize;                    /* 014 */
 +} DPISERVERINFO, *PDPISERVERINFO;
 +
 +// PUSIFlags:
 +#define PUSIF_PALETTEDISPLAY         0x01
 +#define PUSIF_SNAPTO                 0x02
 +#define PUSIF_COMBOBOXANIMATION      0x04
 +#define PUSIF_LISTBOXSMOOTHSCROLLING 0x08
 +#define PUSIF_KEYBOARDCUES           0x20
 +
 +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;
 +    DPISERVERINFO dpiSystem;
 +    HICON         hIconSmWindows;
 +    HICON         hIcoWindows;
 +    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;
 +} PERUSERSERVERINFO, *PPERUSERSERVERINFO;
 +
 +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;
 +    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;
 +    PERUSERSERVERINFO;
 +} SERVERINFO, *PSERVERINFO;
 +
 +
 +// Server event activity bits.
 +#define SRV_EVENT_MENU            0x0001
 +#define SRV_EVENT_END_APPLICATION 0x0002
 +#define SRV_EVENT_RUNNING         0x0004
 +#define SRV_EVENT_NAMECHANGE      0x0008
 +#define SRV_EVENT_VALUECHANGE     0x0010
 +#define SRV_EVENT_STATECHANGE     0x0020
 +#define SRV_EVENT_LOCATIONCHANGE  0x0040
 +#define SRV_EVENT_CREATE          0x8000
 +
 +typedef struct _PROPLISTITEM
 +{
 +  ATOM Atom;
 +  HANDLE Data;
 +} PROPLISTITEM, *PPROPLISTITEM;
 +
 +typedef struct _PROPERTY
 +{
 +  LIST_ENTRY PropListEntry;
 +  HANDLE Data;
 +  ATOM Atom;
 +} PROPERTY, *PPROPERTY;
 +
 +typedef struct _BROADCASTPARM
 +{
 +  DWORD flags;
 +  DWORD recipients;
 +  HDESK hDesk;
 +  HWND  hWnd;
 +  LUID  luid;
 +} BROADCASTPARM, *PBROADCASTPARM;
 +
 +PTHREADINFO GetW32ThreadInfo(VOID);
 +PPROCESSINFO GetW32ProcessInfo(VOID);
 +
 +typedef struct _WNDMSG
 +{
 +  DWORD maxMsgs;
 +  PINT abMsgs;
 +} WNDMSG, *PWNDMSG;
 +
 +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;
 +} SHAREDINFO, *PSHAREDINFO;
 +
 +typedef struct _USERCONNECT
 +{
 +  ULONG ulVersion;
 +  ULONG ulCurrentVersion;
 +  DWORD dwDispatchCount;
 +  SHAREDINFO siClient;
 +} USERCONNECT, *PUSERCONNECT;
 +
 +typedef struct tagGETCLIPBDATA
 +{
 +  UINT uFmtRet;
 +  BOOL fGlobalHandle;
 +  union
 +  {
 +    HANDLE hLocale;
 +    HANDLE hPalette;
 +  };
 +} GETCLIPBDATA, *PGETCLIPBDATA;
 +
 +typedef struct tagSETCLIPBDATA
 +{
 +    BOOL fGlobalHandle;
 +    BOOL fIncSerialNumber;
 +} SETCLIPBDATA, *PSETCLIPBDATA;
 +
 +// 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;
 +} CURSORDATA, *PCURSORDATA; /* !dso CURSORDATA */
 +
 +// CURSORF_flags:
 +#define CURSORF_FROMRESOURCE 0x0001
 +#define CURSORF_GLOBAL       0x0002
 +#define CURSORF_LRSHARED     0x0004
 +#define CURSORF_ACON         0x0008
 +#define CURSORF_WOWCLEANUP   0x0010
 +#define CURSORF_ACONFRAME    0x0040
 +#define CURSORF_SECRET       0x0080
 +#define CURSORF_LINKED       0x0100
 +#define CURSORF_CURRENT      0x0200
 +
 +DWORD
 +NTAPI
 +NtUserAssociateInputContext(
 +    DWORD dwUnknown1,
 +    DWORD dwUnknown2,
 +    DWORD dwUnknown3);
 +
 +DWORD
 +NTAPI
 +NtUserBuildHimcList(
 +    DWORD dwUnknown1,
 +    DWORD dwUnknown2,
 +    DWORD dwUnknown3,
 +    DWORD dwUnknown4);
 +
 +DWORD
 +NTAPI
 +NtUserCalcMenuBar(
 +    DWORD dwUnknown1,
 +    DWORD dwUnknown2,
 +    DWORD dwUnknown3,
 +    DWORD dwUnknown4,
 +    DWORD dwUnknown5);
 +
 +DWORD
 +NTAPI
 +NtUserCheckMenuItem(
 +  HMENU hmenu,
 +  UINT uIDCheckItem,
 +  UINT uCheck);
 +
 +DWORD
 +NTAPI
 +NtUserCtxDisplayIOCtl(
 +    DWORD dwUnknown1,
 +    DWORD dwUnknown2,
 +    DWORD dwUnknown3);
 +
 +BOOL
 +NTAPI
 +NtUserDeleteMenu(
 +  HMENU hMenu,
 +  UINT uPosition,
 +  UINT uFlags);
 +
 +BOOL
 +NTAPI
 +NtUserDestroyMenu(
 +  HMENU hMenu);
 +
 +DWORD
 +NTAPI
 +NtUserDrawMenuBarTemp(
 +  HWND hWnd,
 +  HDC hDC,
 +  PRECT hRect,
 +  HMENU hMenu,
 +  HFONT hFont);
 +
 +UINT
 +NTAPI
 +NtUserEnableMenuItem(
 +  HMENU hMenu,
 +  UINT uIDEnableItem,
 +  UINT uEnable);
 +
 +BOOL
 +NTAPI
 +NtUserEndMenu(VOID);
 +
 +BOOL
 +NTAPI
 +NtUserGetMenuBarInfo(
 +  HWND hwnd,
 +  LONG idObject,
 +  LONG idItem,
 +  PMENUBARINFO pmbi);
 +
 +UINT
 +NTAPI
 +NtUserGetMenuIndex(
 +  HMENU hMenu,
 +  HMENU hSubMenu);
 +
 +BOOL
 +NTAPI
 +NtUserGetMenuItemRect(
 +  HWND hWnd,
 +  HMENU hMenu,
 +  UINT uItem,
 +  LPRECT lprcItem);
 +
 +HMENU
 +NTAPI
 +NtUserGetSystemMenu(
 +  HWND hWnd,
 +  BOOL bRevert);
 +
 +BOOL
 +NTAPI
 +NtUserHiliteMenuItem(
 +  HWND hWnd,
 +  HMENU hMenu,
 +  UINT uItemHilite,
 +  UINT uHilite);
 +
 +int
 +NTAPI
 +NtUserMenuItemFromPoint(
 +  HWND hWnd,
 +  HMENU hMenu,
 +  DWORD X,
 +  DWORD Y);
 +
 +BOOL
 +NTAPI
 +NtUserRemoveMenu(
 +  HMENU hMenu,
 +  UINT uPosition,
 +  UINT uFlags);
 +
 +BOOL
 +NTAPI
 +NtUserSetMenu(
 +  HWND hWnd,
 +  HMENU hMenu,
 +  BOOL bRepaint);
 +
 +BOOL
 +NTAPI
 +NtUserSetMenuContextHelpId(
 +  HMENU hmenu,
 +  DWORD dwContextHelpId);
 +
 +BOOL
 +NTAPI
 +NtUserSetMenuDefaultItem(
 +  HMENU hMenu,
 +  UINT uItem,
 +  UINT fByPos);
 +
 +BOOL
 +NTAPI
 +NtUserSetMenuFlagRtoL(
 +  HMENU hMenu);
 +
 +BOOL
 +NTAPI
 +NtUserSetSystemMenu(
 +  HWND hWnd,
 +  HMENU hMenu);
 +
 +BOOL
 +NTAPI
 +NtUserThunkedMenuInfo(
 +  HMENU hMenu,
 +  LPCMENUINFO lpcmi);
 +
 +BOOL
 +NTAPI
 +NtUserThunkedMenuItemInfo(
 +  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);
 +
 +HKL
 +NTAPI
 +NtUserActivateKeyboardLayout(
 +  HKL hKl,
 +  ULONG Flags);
 +
 +DWORD
 +NTAPI
 +NtUserAlterWindowStyle(
 +  DWORD Unknown0,
 +  DWORD Unknown1,
 +  DWORD Unknown2);
 +
 +BOOL
 +NTAPI
 +NtUserAttachThreadInput(
 +  IN DWORD idAttach,
 +  IN DWORD idAttachTo,
 +  IN BOOL fAttach);
 +
 +HDC NTAPI
 +NtUserBeginPaint(HWND hWnd, PAINTSTRUCT* lPs);
 +
 +BOOL
 +NTAPI
 +NtUserBitBltSysBmp(
 +  HDC hdc,
 +  INT nXDest,
 +  INT nYDest,
 +  INT nWidth,
 +  INT nHeight,
 +  INT nXSrc,
 +  INT nYSrc,
 +  DWORD dwRop );
 +
 +BOOL
 +NTAPI
 +NtUserBlockInput(
 +  BOOL BlockIt);
 +
 +NTSTATUS
 +NTAPI
 +NtUserBuildHwndList(
 +  HDESK hDesktop,
 +  HWND hwndParent,
 +  BOOLEAN bChildren,
 +  ULONG dwThreadId,
 +  ULONG lParam,
 +  HWND* pWnd,
 +  ULONG* pBufSize);
 +
 +NTSTATUS NTAPI
 +NtUserBuildNameList(
 +   HWINSTA hWinSta,
 +   ULONG dwSize,
 +   PVOID lpBuffer,
 +   PULONG pRequiredSize);
 +
 +NTSTATUS
 +NTAPI
 +NtUserBuildPropList(
 +  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
 +
 +enum SimpleCallRoutines
 +{
 +      NOPARAM_ROUTINE_CREATEMENU,
 +      NOPARAM_ROUTINE_CREATEMENUPOPUP,
 +#if (WIN32K_VERSION >= NTDDI_VISTA)
 +      NOPARAM_ROUTINE_ALLOWFOREGNDACTIVATION,
 +      NOPARAM_ROUTINE_MSQCLEARWAKEMASK,
 +      NOPARAM_ROUTINE_CREATESYSTEMTHREADS,
 +      NOPARAM_ROUTINE_DESTROY_CARET,
 +#endif
 +      NOPARAM_ROUTINE_ENABLEPROCWNDGHSTING,
 +#if (WIN32K_VERSION < NTDDI_VISTA)
 +      NOPARAM_ROUTINE_MSQCLEARWAKEMASK,
 +      NOPARAM_ROUTINE_ALLOWFOREGNDACTIVATION,
 +      NOPARAM_ROUTINE_DESTROY_CARET,
 +#endif
 +      NOPARAM_ROUTINE_GETDEVICECHANGEINFO,
 +      NOPARAM_ROUTINE_GETIMESHOWSTATUS,
 +      NOPARAM_ROUTINE_GETINPUTDESKTOP,
 +      NOPARAM_ROUTINE_GETMSESSAGEPOS,
 +#if (WIN32K_VERSION >= NTDDI_VISTA)
 +      NOPARAM_ROUTINE_HANDLESYSTHRDCREATFAIL,
 +#else
 +      NOPARAM_ROUTINE_GETREMOTEPROCID,
 +#endif
 +      NOPARAM_ROUTINE_HIDECURSORNOCAPTURE,
 +      NOPARAM_ROUTINE_LOADCURSANDICOS,
 +#if (WIN32K_VERSION >= NTDDI_VISTA)
 +      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,
 +#if (WIN32K_VERSION >= NTDDI_VISTA)
 +      NOPARAM_ROUTINE_WAKERITFORSHTDWN,
 +#endif
 +      NOPARAM_ROUTINE_INIT_MESSAGE_PUMP,
 +      NOPARAM_ROUTINE_UNINIT_MESSAGE_PUMP,
 +#if (WIN32K_VERSION < NTDDI_VISTA)
 +      NOPARAM_ROUTINE_LOADUSERAPIHOOK,
 +#endif
 +      ONEPARAM_ROUTINE_BEGINDEFERWNDPOS,
 +#if (WIN32K_VERSION >= NTDDI_VISTA)
 +      ONEPARAM_ROUTINE_GETSENDMSGRECVR,
 +#endif
 +      ONEPARAM_ROUTINE_WINDOWFROMDC,
 +      ONEPARAM_ROUTINE_ALLOWSETFOREGND,
 +      ONEPARAM_ROUTINE_CREATEEMPTYCUROBJECT,
 +#if (WIN32K_VERSION < NTDDI_VISTA)
 +      ONEPARAM_ROUTINE_CREATESYSTEMTHREADS,
 +#endif
 +      ONEPARAM_ROUTINE_CSDDEUNINITIALIZE,
 +      ONEPARAM_ROUTINE_DIRECTEDYIELD,
 +      ONEPARAM_ROUTINE_ENUMCLIPBOARDFORMATS,
 +#if (WIN32K_VERSION < NTDDI_VISTA)
 +      ONEPARAM_ROUTINE_GETCURSORPOS,
 +#endif
 +      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,
 +#endif
 +      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,
 +#endif
 +      ONEPARAM_ROUTINE_REALIZEPALETTE,
 +      ONEPARAM_ROUTINE_REGISTERLPK,
 +#if (WIN32K_VERSION >= NTDDI_VISTA)
 +      ONEPARAM_ROUTINE_REGISTERSYSTEMTHREAD,
 +#endif
 +      ONEPARAM_ROUTINE_REMOTERECONNECT,
 +      ONEPARAM_ROUTINE_REMOTETHINWIRESTATUS,
 +      ONEPARAM_ROUTINE_RELEASEDC,
 +#if (WIN32K_VERSION >= NTDDI_VISTA)
 +      ONEPARAM_ROUTINE_REMOTENOTIFY,
 +#endif
 +      ONEPARAM_ROUTINE_REPLYMESSAGE,
 +      ONEPARAM_ROUTINE_SETCARETBLINKTIME,
 +      ONEPARAM_ROUTINE_SETDBLCLICKTIME,
 +#if (WIN32K_VERSION < NTDDI_VISTA)
 +      ONEPARAM_ROUTINE_SETIMESHOWSTATUS,
 +#endif
 +      ONEPARAM_ROUTINE_SETMESSAGEEXTRAINFO,
 +      ONEPARAM_ROUTINE_SETPROCDEFLAYOUT,
 +#if (WIN32K_VERSION >= NTDDI_VISTA)
 +      ONEPARAM_ROUTINE_SETWATERMARKSTRINGS,
 +#endif
 +      ONEPARAM_ROUTINE_SHOWCURSOR,
 +      ONEPARAM_ROUTINE_SHOWSTARTGLASS,
 +      ONEPARAM_ROUTINE_SWAPMOUSEBUTTON,
 +      X_ROUTINE_WOWMODULEUNLOAD,
 +#if (WIN32K_VERSION < NTDDI_VISTA)
 +      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,
 +#if (WIN32K_VERSION >= NTDDI_VISTA)
 +      TWOPARAM_ROUTINE_CHANGEWNDMSGFILTER,
 +      TWOPARAM_ROUTINE_GETCURSORPOS,
 +#endif
 +      TWOPARAM_ROUTINE_GETHDEVNAME,
 +      TWOPARAM_ROUTINE_INITANSIOEM,
 +      TWOPARAM_ROUTINE_NLSSENDIMENOTIFY,
 +#if (WIN32K_VERSION >= NTDDI_VISTA)
 +      TWOPARAM_ROUTINE_REGISTERGHSTWND,
 +#endif
 +      TWOPARAM_ROUTINE_REGISTERLOGONPROCESS,
 +#if (WIN32K_VERSION >= NTDDI_VISTA)
 +      TWOPARAM_ROUTINE_REGISTERSBLFROSTWND,
 +#else
 +      TWOPARAM_ROUTINE_REGISTERSYSTEMTHREAD,
 +#endif
 +      TWOPARAM_ROUTINE_REGISTERUSERHUNGAPPHANDLERS,
 +      TWOPARAM_ROUTINE_SHADOWCLEANUP,
 +      TWOPARAM_ROUTINE_REMOTESHADOWSTART,
 +      TWOPARAM_ROUTINE_SETCARETPOS,
 +      TWOPARAM_ROUTINE_SETCURSORPOS,
 +#if (WIN32K_VERSION >= NTDDI_VISTA)
 +      TWOPARAM_ROUTINE_SETPHYSCURSORPOS,
 +#endif
 +      TWOPARAM_ROUTINE_UNHOOKWINDOWSHOOK,
 +      TWOPARAM_ROUTINE_WOWCLEANUP
 +};
 +
 +DWORD
 +NTAPI
 +NtUserCallHwnd(
 +  HWND hWnd,
 +  DWORD Routine);
 +
 +BOOL
 +NTAPI
 +NtUserCallHwndLock(
 +  HWND hWnd,
 +  DWORD Routine);
 +
 +HWND
 +NTAPI
 +NtUserCallHwndOpt(
 +  HWND hWnd,
 +  DWORD Routine);
 +
 +DWORD
 +NTAPI
 +NtUserCallHwndParam(
 +  HWND hWnd,
 +  DWORD Param,
 +  DWORD Routine);
 +
 +DWORD
 +NTAPI
 +NtUserCallHwndParamLock(
 +  HWND hWnd,
 +  DWORD Param,
 +  DWORD Routine);
 +
 +BOOL
 +NTAPI
 +NtUserCallMsgFilter(
 +  LPMSG msg,
 +  INT code);
 +
 +LRESULT
 +NTAPI
 +NtUserCallNextHookEx(
 +  int Code,
 +  WPARAM wParam,
 +  LPARAM lParam,
 +  BOOL Ansi);
 +
 +DWORD_PTR
 +NTAPI
 +NtUserCallNoParam(
 +  DWORD Routine);
 +
 +DWORD_PTR
 +NTAPI
 +NtUserCallOneParam(
 +  DWORD_PTR Param,
 +  DWORD Routine);
 +
 +DWORD_PTR
 +NTAPI
 +NtUserCallTwoParam(
 +  DWORD_PTR Param1,
 +  DWORD_PTR Param2,
 +  DWORD Routine);
 +
 +BOOL
 +NTAPI
 +NtUserChangeClipboardChain(
 +  HWND hWndRemove,
 +  HWND hWndNewNext);
 +
 +LONG
 +NTAPI
 +NtUserChangeDisplaySettings(
 +  PUNICODE_STRING lpszDeviceName,
 +  LPDEVMODEW lpDevMode,
 +  HWND hwnd,
 +  DWORD dwflags,
 +  LPVOID lParam);
 +
 +BOOL
 +NTAPI
 +NtUserCheckDesktopByThreadId(
 +  DWORD dwThreadId);
 +
 +BOOL
 +NTAPI
 +NtUserCheckWindowThreadDesktop(
 +  HWND hwnd,
 +  DWORD dwThreadId,
 +  ULONG ReturnValue);
 +
 +DWORD
 +NTAPI
 +NtUserCheckImeHotKey(
 +  DWORD dwUnknown1,
 +  DWORD dwUnknown2);
 +
 +HWND NTAPI
 +NtUserChildWindowFromPointEx(
 +  HWND Parent,
 +  LONG x,
 +  LONG y,
 +  UINT Flags);
 +
 +BOOL
 +NTAPI
 +NtUserClipCursor(
 +    RECT *lpRect);
 +
 +BOOL
 +NTAPI
 +NtUserCloseClipboard(VOID);
 +
 +BOOL
 +NTAPI
 +NtUserCloseDesktop(
 +  HDESK hDesktop);
 +
 +BOOL
 +NTAPI
 +NtUserCloseWindowStation(
 +  HWINSTA hWinSta);
 +
-   DWORD dwUnknown1,
-   DWORD dwUnknown2,
-   DWORD dwUnknown3);
++/* Console commands for NtUserConsoleControl */
++typedef enum _CONSOLECONTROL
++{
++    GuiConsoleWndClassAtom,
++    ConsoleAcquireDisplayOwnership,
++} CONSOLECONTROL, *PCONSOLECONTROL;
++
++NTSTATUS
++APIENTRY
 +NtUserConsoleControl(
++    IN CONSOLECONTROL ConsoleCtrl,
++    IN PVOID ConsoleCtrlInfo,
++    IN DWORD ConsoleCtrlInfoLength);
 +
 +HANDLE
 +NTAPI
 +NtUserConvertMemHandle(
 +  PVOID pData,
 +  DWORD cbData);
 +
 +ULONG
 +NTAPI
 +NtUserCopyAcceleratorTable(
 +  HACCEL Table,
 +  LPACCEL Entries,
 +  ULONG EntriesCount);
 +
 +DWORD
 +NTAPI
 +NtUserCountClipboardFormats(VOID);
 +
 +HACCEL
 +NTAPI
 +NtUserCreateAcceleratorTable(
 +  LPACCEL Entries,
 +  ULONG EntriesCount);
 +
 +BOOL
 +NTAPI
 +NtUserCreateCaret(
 +  HWND hWnd,
 +  HBITMAP hBitmap,
 +  int nWidth,
 +  int nHeight);
 +
 +HDESK
 +NTAPI
 +NtUserCreateDesktop(
 +  POBJECT_ATTRIBUTES poa,
 +  PUNICODE_STRING lpszDesktopDevice,
 +  LPDEVMODEW lpdmw,
 +  DWORD dwFlags,
 +  ACCESS_MASK dwDesiredAccess);
 +
 +DWORD
 +NTAPI
 +NtUserCreateInputContext(
 +    DWORD dwUnknown1);
 +
 +NTSTATUS
 +NTAPI
 +NtUserCreateLocalMemHandle(
 +  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);
 +
 +HWINSTA
 +NTAPI
 +NtUserCreateWindowStation(
 +  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);
 +
 +DWORD
 +NTAPI
 +NtUserDdeInitialize(
 +  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);
 +
 +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);
 +
 +BOOLEAN
 +NTAPI
 +NtUserDestroyAcceleratorTable(
 +  HACCEL Table);
 +
 +BOOL
 +NTAPI
 +NtUserDestroyCursor(
 +  _In_  HANDLE Handle,
 +  _In_  BOOL bForce);
 +
 +DWORD
 +NTAPI
 +NtUserDestroyInputContext(
 +    DWORD dwUnknown1);
 +
 +BOOLEAN NTAPI
 +NtUserDestroyWindow(HWND Wnd);
 +
 +DWORD
 +NTAPI
 +NtUserDisableThreadIme(
 +    DWORD dwUnknown1);
 +
 +LRESULT
 +NTAPI
 +NtUserDispatchMessage(PMSG pMsg);
 +
 +BOOL
 +NTAPI
 +NtUserDragDetect(
 +  HWND hWnd,
 +  POINT pt);
 +
 +DWORD
 +NTAPI
 +NtUserDragObject(
 +   HWND    hwnd1,
 +   HWND    hwnd2,
 +   UINT    u1,
 +   DWORD   dw1,
 +   HCURSOR hc1);
 +
 +BOOL
 +NTAPI
 +NtUserDrawAnimatedRects(
 +  HWND hwnd,
 +  INT idAni,
 +  RECT *lprcFrom,
 +  RECT *lprcTo);
 +
 +BOOL
 +NTAPI
 +NtUserDrawCaption(
 +   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.
 +typedef struct _DRAWICONEXDATA
 +{
 +  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);
 +
 +BOOL
 +NTAPI
 +NtUserEmptyClipboard(VOID);
 +
 +BOOL
 +NTAPI
 +NtUserEnableScrollBar(
 +  HWND hWnd,
 +  UINT wSBflags,
 +  UINT wArrows);
 +
 +BOOL
 +NTAPI
 +NtUserEndDeferWindowPosEx(
 +  HDWP WinPosInfo,
 +  DWORD Unknown1);
 +
 +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 */
 +
 +/*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.  */
 +INT
 +NTAPI
 +NtUserEnumDisplayMonitors(
 +  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 );
 +
 +DWORD
 +NTAPI
 +NtUserEvent(
 +  DWORD Unknown0);
 +
 +DWORD
 +NTAPI
 +NtUserExcludeUpdateRgn(
 +  HDC hDC,
 +  HWND hWnd);
 +
 +BOOL
 +NTAPI
 +NtUserFillWindow(
 +  HWND hWndPaint,
 +  HWND hWndPaint1,
 +  HDC  hDC,
 +  HBRUSH hBrush);
 +
 +HWND
 +NTAPI
 +NtUserFindWindowEx(
 +  HWND  hwndParent,
 +  HWND  hwndChildAfter,
 +  PUNICODE_STRING  ucClassName,
 +  PUNICODE_STRING  ucWindowName,
 +  DWORD dwUnknown
 +  );
 +
 +BOOL
 +NTAPI
 +NtUserFlashWindowEx(
 +  IN PFLASHWINFO pfwi);
 +
 +BOOL
 +NTAPI
 +NtUserGetAltTabInfo(
 +   HWND hwnd,
 +   INT  iItem,
 +   PALTTABINFO pati,
 +   LPWSTR pszItemText,
 +   UINT   cchItemText,
 +   BOOL   Ansi);
 +
 +HWND NTAPI
 +NtUserGetAncestor(HWND hWnd, UINT Flags);
 +
 +DWORD
 +NTAPI
 +NtUserGetAppImeLevel(
 +    DWORD dwUnknown1);
 +
 +SHORT
 +NTAPI
 +NtUserGetAsyncKeyState(
 +  INT Key);
 +
 +_Success_(return!=0)
 +_At_(pustrName->Buffer, _Out_z_bytecap_post_bytecount_(pustrName->MaximumLength, return*2+2))
 +ULONG
 +APIENTRY
 +NtUserGetAtomName(
 +    _In_ ATOM atom,
 +    _Inout_ PUNICODE_STRING pustrName);
 +
 +UINT
 +NTAPI
 +NtUserGetCaretBlinkTime(VOID);
 +
 +BOOL
 +NTAPI
 +NtUserGetCaretPos(
 +  LPPOINT lpPoint);
 +
 +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);
 +
 +HANDLE
 +NTAPI
 +NtUserGetClipboardData(
 +  UINT fmt,
 +  PGETCLIPBDATA pgcd);
 +
 +INT
 +NTAPI
 +NtUserGetClipboardFormatName(
 +  UINT uFormat,
 +  LPWSTR lpszFormatName,
 +  INT cchMaxCount);
 +
 +HWND
 +NTAPI
 +NtUserGetClipboardOwner(VOID);
 +
 +DWORD
 +NTAPI
 +NtUserGetClipboardSequenceNumber(VOID);
 +
 +HWND
 +NTAPI
 +NtUserGetClipboardViewer(VOID);
 +
 +BOOL
 +NTAPI
 +NtUserGetClipCursor(
 +  RECT *lpRect);
 +
 +BOOL
 +NTAPI
 +NtUserGetComboBoxInfo(
 +  HWND hWnd,
 +  PCOMBOBOXINFO pcbi);
 +
 +HBRUSH
 +NTAPI
 +NtUserGetControlBrush(
 +  HWND hwnd,
 +  HDC  hdc,
 +  UINT ctlType);
 +
 +HBRUSH
 +NTAPI
 +NtUserGetControlColor(
 +   HWND hwndParent,
 +   HWND hwnd,
 +   HDC hdc,
 +   UINT CtlMsg);
 +
 +ULONG_PTR
 +NTAPI
 +NtUserGetCPD(
 +  HWND hWnd,
 +  GETCPD Flags,
 +  ULONG_PTR Proc);
 +
 +HCURSOR
 +NTAPI
 +NtUserGetCursorFrameInfo(
 +  HCURSOR hCursor,
 +  DWORD istep,
 +  PDWORD rate_jiffies,
 +  INT *num_steps);
 +
 +BOOL
 +NTAPI
 +NtUserGetCursorInfo(
 +  PCURSORINFO pci);
 +
 +HDC
 +NTAPI
 +NtUserGetDC(
 +  HWND hWnd);
 +
 +HDC
 +NTAPI
 +NtUserGetDCEx(
 +  HWND hWnd,
 +  HANDLE hRegion,
 +  ULONG Flags);
 +
 +UINT
 +NTAPI
 +NtUserGetDoubleClickTime(VOID);
 +
 +HWND
 +NTAPI
 +NtUserGetForegroundWindow(VOID);
 +
 +DWORD
 +NTAPI
 +NtUserGetGuiResources(
 +  HANDLE hProcess,
 +  DWORD uiFlags);
 +
 +BOOL
 +NTAPI
 +NtUserGetGUIThreadInfo(
 +  DWORD idThread,
 +  LPGUITHREADINFO lpgui);
 +
 +_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);
 +
 +BOOL
 +NTAPI
 +NtUserGetIconSize(
 +    HANDLE Handle,
 +    UINT istepIfAniCur,
 +    LONG  *plcx,
 +    LONG  *plcy);
 +
 +DWORD
 +NTAPI
 +NtUserGetImeHotKey(
 +  DWORD Unknown0,
 +  DWORD Unknown1,
 +  DWORD Unknown2,
 +  DWORD Unknown3);
 +
 +DWORD
 +NTAPI
 +NtUserGetImeInfoEx(
 +    DWORD dwUnknown1,
 +    DWORD dwUnknown2);
 +
 +DWORD
 +NTAPI
 +NtUserGetInternalWindowPos(
 +  HWND hwnd,
 +  LPRECT rectWnd,
 +  LPPOINT ptIcon);
 +
 +HKL
 +NTAPI
 +NtUserGetKeyboardLayout(
 +  DWORD dwThreadid);
 +
 +UINT
 +NTAPI
 +NtUserGetKeyboardLayoutList(
 +  ULONG nItems,
 +  HKL *pHklBuff);
 +
 +BOOL
 +NTAPI
 +NtUserGetKeyboardLayoutName(
 +  LPWSTR lpszName);
 +
 +DWORD
 +NTAPI
 +NtUserGetKeyboardState(
 +  LPBYTE Unknown0);
 +
 +DWORD
 +NTAPI
 +NtUserGetKeyboardType(
 +  DWORD TypeFlag);
 +
 +DWORD
 +NTAPI
 +NtUserGetKeyNameText( LONG lParam, LPWSTR lpString, int nSize );
 +
 +SHORT
 +NTAPI
 +NtUserGetKeyState(
 +  INT VirtKey);
 +
 +BOOL
 +NTAPI
 +NtUserGetLayeredWindowAttributes(
 +    HWND hwnd,
 +    COLORREF *pcrKey,
 +    BYTE *pbAlpha,
 +    DWORD *pdwFlags);
 +
 +DWORD
 +NTAPI
 +NtUserGetListBoxInfo(
 +  HWND hWnd);
 +
 +BOOL APIENTRY
 +NtUserGetMessage(PMSG pMsg,
 +                 HWND hWnd,
 +                 UINT MsgFilterMin,
 +                 UINT MsgFilterMax);
 +
 +DWORD
 +NTAPI
 +NtUserGetMouseMovePointsEx(
 +  UINT cbSize,
 +  LPMOUSEMOVEPOINT lppt,
 +  LPMOUSEMOVEPOINT lpptBuf,
 +  int nBufPoints,
 +  DWORD resolution);
 +
 +BOOL
 +NTAPI
 +NtUserGetObjectInformation(
 +  HANDLE hObject,
 +  DWORD nIndex,
 +  PVOID pvInformation,
 +  DWORD nLength,
 +  PDWORD nLengthNeeded);
 +
 +HWND
 +NTAPI
 +NtUserGetOpenClipboardWindow(VOID);
 +
 +INT
 +NTAPI
 +NtUserGetPriorityClipboardFormat(
 +  UINT *paFormatPriorityList,
 +  INT cFormats);
 +
 +HWINSTA
 +NTAPI
 +NtUserGetProcessWindowStation(VOID);
 +
 +DWORD
 +NTAPI
 +NtUserGetRawInputBuffer(
 +    PRAWINPUT pData,
 +    PUINT pcbSize,
 +    UINT cbSizeHeader);
 +
 +DWORD
 +NTAPI
 +NtUserGetRawInputData(
 +  HRAWINPUT hRawInput,
 +  UINT uiCommand,
 +  LPVOID pData,
 +  PUINT pcbSize,
 +  UINT cbSizeHeader);
 +
 +DWORD
 +NTAPI
 +NtUserGetRawInputDeviceInfo(
 +    HANDLE hDevice,
 +    UINT uiCommand,
 +    LPVOID pData,
 +    PUINT pcbSize);
 +
 +DWORD
 +NTAPI
 +NtUserGetRawInputDeviceList(
 +    PRAWINPUTDEVICELIST pRawInputDeviceList,
 +    PUINT puiNumDevices,
 +    UINT cbSize);
 +
 +DWORD
 +NTAPI
 +NtUserGetRegisteredRawInputDevices(
 +    PRAWINPUTDEVICE pRawInputDevices,
 +    PUINT puiNumDevices,
 +    UINT cbSize);
 +
 +BOOL
 +NTAPI
 +NtUserGetScrollBarInfo(
 +  HWND hWnd,
 +  LONG idObject,
 +  PSCROLLBARINFO psbi);
 +
 +HDESK
 +NTAPI
 +NtUserGetThreadDesktop(
 +  DWORD dwThreadId,
 +  DWORD Unknown1);
 +
 +
 +enum ThreadStateRoutines
 +{
 +    THREADSTATE_GETTHREADINFO,
 +    THREADSTATE_INSENDMESSAGE,
 +    THREADSTATE_FOCUSWINDOW,
 +    THREADSTATE_ACTIVEWINDOW,
 +    THREADSTATE_CAPTUREWINDOW,
 +    THREADSTATE_PROGMANWINDOW,
 +    THREADSTATE_TASKMANWINDOW,
 +    THREADSTATE_GETMESSAGETIME,
 +    THREADSTATE_GETINPUTSTATE,
 +    THREADSTATE_UPTIMELASTREAD,
 +    THREADSTATE_FOREGROUNDTHREAD,
 +    THREADSTATE_GETCURSOR
 +};
 +
 +DWORD_PTR
 +NTAPI
 +NtUserGetThreadState(
 +  DWORD Routine);
 +
 +BOOLEAN
 +NTAPI
 +NtUserGetTitleBarInfo(
 +  HWND hwnd,
 +  PTITLEBARINFO pti);
 +
 +BOOL NTAPI
 +NtUserGetUpdateRect(HWND hWnd, LPRECT lpRect, BOOL fErase);
 +
 +int
 +NTAPI
 +NtUserGetUpdateRgn(
 +  HWND hWnd,
 +  HRGN hRgn,
 +  BOOL bErase);
 +
 +HDC
 +NTAPI
 +NtUserGetWindowDC(
 +  HWND hWnd);
 +
 +BOOL
 +NTAPI
 +NtUserGetWindowPlacement(
 +  HWND hWnd,
 +  WINDOWPLACEMENT *lpwndpl);
 +
 +PCLS
 +NTAPI
 +NtUserGetWOWClass(
 +  HINSTANCE hInstance,
 +  PUNICODE_STRING ClassName);
 +
 +DWORD
 +NTAPI
 +NtUserHardErrorControl(
 +    DWORD dwUnknown1,
 +    DWORD dwUnknown2,
 +    DWORD dwUnknown3);
 +
 +BOOL
 +NTAPI
 +NtUserImpersonateDdeClientWindow(
 +  HWND hWndClient,
 +  HWND hWndServer);
 +
 +NTSTATUS
 +NTAPI
 +NtUserInitialize(
 +  DWORD   dwWinVersion,
 +  HANDLE  hPowerRequestEvent,
 +  HANDLE  hMediaRequestEvent);
 +
 +NTSTATUS
 +NTAPI
 +NtUserInitializeClientPfnArrays(
 +  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);
 +
 +INT
 +NTAPI
 +NtUserInternalGetWindowText(
 +  HWND hWnd,
 +  LPWSTR lpString,
 +  INT nMaxCount);
 +
 +BOOL
 +NTAPI
 +NtUserInvalidateRect(
 +    HWND hWnd,
 +    CONST RECT *lpRect,
 +    BOOL bErase);
 +
 +BOOL
 +NTAPI
 +NtUserInvalidateRgn(
 +    HWND hWnd,
 +    HRGN hRgn,
 +    BOOL bErase);
 +
 +BOOL
 +NTAPI
 +NtUserIsClipboardFormatAvailable(
 +  UINT format);
 +
 +BOOL
 +NTAPI
 +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);
 +
 +BOOL
 +NTAPI
 +NtUserLockWindowStation(
 +  HWINSTA hWindowStation);
 +
 +BOOL
 +NTAPI
 +NtUserLockWindowUpdate(
 +  HWND hWnd);
 +
 +BOOL
 +NTAPI
 +NtUserLockWorkStation(VOID);
 +
 +UINT
 +NTAPI
 +NtUserMapVirtualKeyEx( UINT keyCode,
 +                     UINT transType,
 +                     DWORD keyboardId,
 +                     HKL dwhkl );
 +
 +typedef struct tagDOSENDMESSAGE
 +{
 +  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);
 +
 +DWORD
 +NTAPI
 +NtUserMinMaximize(
 +    HWND hWnd,
 +    UINT cmd, // Wine SW_ commands
 +    BOOL Hide);
 +
 +DWORD
 +NTAPI
 +NtUserMNDragLeave(VOID);
 +
 +DWORD
 +NTAPI
 +NtUserMNDragOver(
 +  DWORD Unknown0,
 +  DWORD Unknown1);
 +
 +DWORD
 +NTAPI
 +NtUserModifyUserStartupInfoFlags(
 +  DWORD Unknown0,
 +  DWORD Unknown1);
 +
 +BOOL
 +NTAPI
 +NtUserMoveWindow(
 +    HWND hWnd,
 +    int X,
 +    int Y,
 +    int nWidth,
 +    int nHeight,
 +    BOOL bRepaint
 +);
 +
 +DWORD
 +NTAPI
 +NtUserNotifyIMEStatus(
 +  DWORD Unknown0,
 +  DWORD Unknown1,
 +  DWORD Unknown2);
 +
 +DWORD
 +NTAPI
 +NtUserNotifyProcessCreate(
 +    DWORD dwUnknown1,
 +    DWORD dwUnknown2,
 +    DWORD dwUnknown3,
 +    DWORD dwUnknown4);
 +
 +VOID
 +NTAPI
 +NtUserNotifyWinEvent(
 +  DWORD Event,
 +  HWND  hWnd,
 +  LONG  idObject,
 +  LONG  idChild);
 +
 +BOOL
 +NTAPI
 +NtUserOpenClipboard(
 +  HWND hWnd,
 +  DWORD Unknown1);
 +
 +HDESK
 +NTAPI
 +NtUserOpenDesktop(
 +   POBJECT_ATTRIBUTES ObjectAttributes,
 +   DWORD dwFlags,
 +   ACCESS_MASK dwDesiredAccess);
 +
 +HDESK
 +NTAPI
 +NtUserOpenInputDesktop(
 +  DWORD dwFlags,
 +  BOOL fInherit,
 +  ACCESS_MASK dwDesiredAccess);
 +
 +HWINSTA
 +NTAPI
 +NtUserOpenWindowStation(
 +  POBJECT_ATTRIBUTES ObjectAttributes,
 +  ACCESS_MASK dwDesiredAccess);
 +
 +BOOL
 +NTAPI
 +NtUserPaintDesktop(
 +  HDC hDC);
 +
 +DWORD
 +NTAPI
 +NtUserPaintMenuBar(
 +    DWORD dwUnknown1,
 +    DWORD dwUnknown2,
 +    DWORD dwUnknown3,
 +    DWORD dwUnknown4,
 +    DWORD dwUnknown5,
 +    DWORD dwUnknown6);
 +
 +BOOL APIENTRY
 +NtUserPeekMessage( PMSG pMsg,
 +                   HWND hWnd,
 +                   UINT MsgFilterMin,
 +                   UINT MsgFilterMax,
 +                   UINT RemoveMsg);
 +
 +BOOL
 +NTAPI
 +NtUserPostMessage(
 +  HWND hWnd,
 +  UINT Msg,
 +  WPARAM wParam,
 +  LPARAM lParam);
 +
 +BOOL
 +NTAPI
 +NtUserPostThreadMessage(
 +  DWORD idThread,
 +  UINT Msg,
 +  WPARAM wParam,
 +  LPARAM lParam);
 +
 +BOOL
 +NTAPI
 +NtUserPrintWindow(
 +    HWND hwnd,
 +    HDC  hdcBlt,
 +    UINT nFlags);
 +
 +NTSTATUS
 +NTAPI
 +NtUserProcessConnect(
 +    IN  HANDLE Process,
 +    OUT PUSERCONNECT pUserConnect,
 +    IN  DWORD dwSize); // sizeof(USERCONNECT)
 +
 +DWORD
 +NTAPI
 +NtUserQueryInformationThread(
 +    DWORD dwUnknown1,
 +    DWORD dwUnknown2,
 +    DWORD dwUnknown3,
 +    DWORD dwUnknown4,
 +    DWORD dwUnknown5);
 +
 +DWORD
 +NTAPI
 +NtUserQueryInputContext(
 +    DWORD dwUnknown1,
 +    DWORD dwUnknown2);
 +
 +DWORD
 +NTAPI
 +NtUserQuerySendMessage(
 +  DWORD Unknown0);
 +
 +DWORD
 +NTAPI
 +NtUserQueryUserCounters(
 +  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
 +DWORD
 +NTAPI
 +NtUserQueryWindow(
 +  HWND hWnd,
 +  DWORD Index);
 +
 +BOOL
 +NTAPI
 +NtUserRealInternalGetMessage(
 +    LPMSG lpMsg,
 +    HWND hWnd,
 +    UINT wMsgFilterMin,
 +    UINT wMsgFilterMax,
 +    UINT wRemoveMsg,
 +    BOOL bGMSG);
 +
 +HWND
 +NTAPI
 +NtUserRealChildWindowFromPoint(
 +    HWND Parent,
 +    LONG x,
 +    LONG y);
 +
 +BOOL
 +NTAPI
 +NtUserRealWaitMessageEx(
 +    DWORD dwWakeMask,
 +    UINT uTimeout);
 +
 +BOOL
 +NTAPI
 +NtUserRedrawWindow
 +(
 + HWND hWnd,
 + CONST RECT *lprcUpdate,
 + HRGN hrgnUpdate,
 + UINT flags
 +);
 +
 +RTL_ATOM
 +NTAPI
 +NtUserRegisterClassExWOW(
 +    WNDCLASSEXW* lpwcx,
 +    PUNICODE_STRING pustrClassName,
 +    PUNICODE_STRING pustrCNVersion,
 +    PCLSMENUNAME pClassMenuName,
 +    DWORD fnID,
 +    DWORD Flags,
 +    LPDWORD pWow);
 +
 +BOOL
 +NTAPI
 +NtUserRegisterRawInputDevices(
 +    IN PCRAWINPUTDEVICE pRawInputDevices,
 +    IN UINT uiNumDevices,
 +    IN UINT cbSize);
 +
 +BOOL
 +NTAPI
 +NtUserRegisterUserApiHook(
 +    PUNICODE_STRING m_dllname1,
 +    PUNICODE_STRING m_funname1,
 +    DWORD dwUnknown3,
 +    DWORD dwUnknown4);
 +
 +BOOL
 +NTAPI
 +NtUserRegisterHotKey(HWND hWnd,
 +                   int id,
 +                   UINT fsModifiers,
 +                   UINT vk);
 +
 +DWORD
 +NTAPI
 +NtUserRegisterTasklist(
 +  DWORD Unknown0);
 +
 +UINT NTAPI
 +NtUserRegisterWindowMessage(PUNICODE_STRING MessageName);
 +
 +DWORD
 +NTAPI
 +NtUserRemoteConnect(
 +    DWORD dwUnknown1,
 +    DWORD dwUnknown2,
 +    DWORD dwUnknown3);
 +
 +DWORD
 +NTAPI
 +NtUserRemoteRedrawRectangle(
 +    DWORD dwUnknown1,
 +    DWORD dwUnknown2,
 +    DWORD dwUnknown3,
 +    DWORD dwUnknown4);
 +
 +DWORD
 +NTAPI
 +NtUserRemoteRedrawScreen(VOID);
 +
 +DWORD
 +NTAPI
 +NtUserRemoteStopScreenUpdates(VOID);
 +
 +HANDLE NTAPI
 +NtUserRemoveProp(HWND hWnd, ATOM Atom);
 +
 +DWORD
 +NTAPI
 +NtUserResolveDesktop(
 +    DWORD dwUnknown1,
 +    DWORD dwUnknown2,
 +    DWORD dwUnknown3,
 +    DWORD dwUnknown4);
 +
 +DWORD
 +NTAPI
 +NtUserResolveDesktopForWOW(
 +  DWORD Unknown0);
 +
 +BOOL
 +NTAPI
 +NtUserSBGetParms(
 +  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);
 +
 +UINT
 +NTAPI
 +NtUserSendInput(
 +  UINT nInputs,
 +  LPINPUT pInput,
 +  INT cbSize);
 +
 +HWND NTAPI
 +NtUserSetActiveWindow(HWND Wnd);
 +
 +DWORD
 +NTAPI
 +NtUserSetAppImeLevel(
 +    DWORD dwUnknown1,
 +    DWORD dwUnknown2);
 +
 +HWND NTAPI
 +NtUserSetCapture(HWND Wnd);
 +
 +ULONG_PTR NTAPI
 +NtUserSetClassLong(
 +  HWND  hWnd,
 +  INT Offset,
 +  ULONG_PTR  dwNewLong,
 +  BOOL  Ansi );
 +
 +WORD
 +NTAPI
 +NtUserSetClassWord(
 +  HWND hWnd,
 +  INT nIndex,
 +  WORD wNewWord);
 +
 +HANDLE
 +NTAPI
 +NtUserSetClipboardData(
 +  UINT fmt,
 +  HANDLE hMem,
 +  PSETCLIPBDATA scd);
 +
 +HWND
 +NTAPI
 +NtUserSetClipboardViewer(
 +  HWND hWndNewViewer);
 +
 +HPALETTE
 +NTAPI
 +NtUserSelectPalette(
 +    HDC hDC,
 +    HPALETTE  hpal,
 +    BOOL  ForceBackground
 +);
 +
 +DWORD
 +NTAPI
 +NtUserSetConsoleReserveKeys(
 +  DWORD Unknown0,
 +  DWORD Unknown1);
 +
 +HCURSOR
 +NTAPI
 +NtUserSetCursor(
 +  HCURSOR hCursor);
 +
 +BOOL
 +NTAPI
 +NtUserSetCursorContents(
 +  HANDLE Handle,
 +  PICONINFO IconInfo);
 +
 +#ifdef NEW_CURSORICON
 +BOOL
 +NTAPI
 +NtUserSetCursorIconData(
 +  _In_ HCURSOR hCursor,
 +  _In_ PUNICODE_STRING pustrModule,
 +  _In_ PUNICODE_STRING puSrcName,
 +  _In_ PCURSORDATA pCursorData);
 +
 +typedef struct _tagFINDEXISTINGCURICONPARAM
 +{
 +    BOOL bIcon;
 +    LONG cx;
 +    LONG cy;
 +} FINDEXISTINGCURICONPARAM;
 +
 +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);
 +
 +HICON
 +NTAPI
 +NtUserFindExistingCursorIcon(
 +  HMODULE hModule,
 +  HRSRC hRsrc,
 +  LONG cx,
 +  LONG cy);
 +#endif
 +
 +DWORD
 +NTAPI
 +NtUserSetDbgTag(
 +  DWORD Unknown0,
 +  DWORD Unknown1);
 +
 +HWND
 +NTAPI
 +NtUserSetFocus(
 +  HWND hWnd);
 +
 +DWORD
 +NTAPI
 +NtUserSetImeHotKey(
 +  DWORD Unknown0,
 +  DWORD Unknown1,
 +  DWORD Unknown2,
 +  DWORD Unknown3,
 +  DWORD Unknown4);
 +
 +DWORD
 +NTAPI
 +NtUserSetImeInfoEx(
 +    DWORD dwUnknown1);
 +
 +DWORD
 +NTAPI
 +NtUserSetImeOwnerWindow(
 +  DWORD Unknown0,
 +  DWORD Unknown1);
 +
 +DWORD
 +NTAPI
 +NtUserSetInformationProcess(
 +    DWORD dwUnknown1,
 +    DWORD dwUnknown2,
 +    DWORD dwUnknown3,
 +    DWORD dwUnknown4);
 +
 +NTSTATUS
 +NTAPI
 +NtUserSetInformationThread(
 +    IN HANDLE ThreadHandle,
 +    IN USERTHREADINFOCLASS ThreadInformationClass,
 +    IN PVOID ThreadInformation,
 +    IN ULONG ThreadInformationLength
 +);
 +
 +DWORD
 +NTAPI
 +NtUserSetInternalWindowPos(
 +  HWND    hwnd,
 +  UINT    showCmd,
 +  LPRECT  rect,
 +  LPPOINT pt);
 +
 +BOOL
 +NTAPI
 +NtUserSetKeyboardState(
 +  LPBYTE lpKeyState);
 +
 +BOOL
 +NTAPI
 +NtUserSetLayeredWindowAttributes(
 +  HWND hwnd,
 +  COLORREF crKey,
 +  BYTE bAlpha,
 +  DWORD dwFlags);
 +
 +BOOL
 +NTAPI
 +NtUserSetLogonNotifyWindow(
 +  HWND hWnd);
 +
 +BOOL
 +NTAPI
 +NtUserSetObjectInformation(
 +  HANDLE hObject,
 +  DWORD nIndex,
 +  PVOID pvInformation,
 +  DWORD nLength);
 +
 +HWND
 +NTAPI
 +NtUserSetParent(
 +  HWND hWndChild,
 +  HWND hWndNewParent);
 +
 +BOOL
 +NTAPI
 +NtUserSetProcessWindowStation(
 +  HWINSTA hWindowStation);
 +
 +BOOL NTAPI
 +NtUserSetProp(HWND hWnd, ATOM Atom, HANDLE Data);
 +
 +DWORD
 +NTAPI
 +NtUserSetRipFlags(
 +  DWORD Unknown0,
 +  DWORD Unknown1);
 +
 +DWORD
 +NTAPI
 +NtUserSetScrollInfo(
 +  HWND hwnd,
 +  int fnBar,
 +  LPCSCROLLINFO lpsi,
 +  BOOL bRedraw);
 +
 +BOOL
 +NTAPI
 +NtUserSetShellWindowEx(
 +  HWND hwndShell,
 +  HWND hwndShellListView);
 +
 +BOOL
 +NTAPI
 +NtUserSetSysColors(
 +  int cElements,
 +  IN CONST INT *lpaElements,
 +  IN CONST COLORREF *lpaRgbValues,
 +  FLONG Flags);
 +
 +BOOL
 +NTAPI
 +NtUserSetSystemCursor(
 +  HCURSOR hcur,
 +  DWORD id);
 +
 +BOOL
 +NTAPI
 +NtUserSetThreadDesktop(
 +  HDESK hDesktop);
 +
 +DWORD
 +NTAPI
 +NtUserSetThreadState(
 +  DWORD Unknown0,
 +  DWORD Unknown1);
 +
 +UINT_PTR
 +NTAPI
 +NtUserSetSystemTimer
 +(
 + HWND hWnd,
 + UINT_PTR nIDEvent,
 + UINT uElapse,
 + TIMERPROC lpTimerFunc
 +);
 +
 +DWORD
 +NTAPI
 +NtUserSetThreadLayoutHandles(
 +    DWORD dwUnknown1,
 +    DWORD dwUnknown2);
 +
 +UINT_PTR
 +NTAPI
 +NtUserSetTimer
 +(
 + HWND hWnd,
 + UINT_PTR nIDEvent,
 + UINT uElapse,
 + TIMERPROC lpTimerFunc
 +);
 +
 +BOOL
 +NTAPI
 +NtUserSetWindowFNID(
 +  HWND hWnd,
 +  WORD fnID);
 +
 +LONG
 +NTAPI
 +NtUserSetWindowLong(
 +  HWND hWnd,
 +  DWORD Index,
 +  LONG NewValue,
 +  BOOL Ansi);
 +
 +BOOL
 +NTAPI
 +NtUserSetWindowPlacement(
 +  HWND hWnd,
 +  WINDOWPLACEMENT *lpwndpl);
 +
 +BOOL
 +NTAPI NtUserSetWindowPos(
 +    HWND hWnd,
 +    HWND hWndInsertAfter,
 +    int X,
 +    int Y,
 +    int cx,
 +    int cy,
 +    UINT uFlags
 +);
 +
 +INT
 +NTAPI
 +NtUserSetWindowRgn(
 +  HWND hWnd,
 +  HRGN hRgn,
 +  BOOL bRedraw);
 +
 +HHOOK
 +NTAPI
 +NtUserSetWindowsHookAW(
 +  int idHook,
 +  HOOKPROC lpfn,
 +  BOOL Ansi);
 +
 +HHOOK
 +NTAPI
 +NtUserSetWindowsHookEx(
 +  HINSTANCE Mod,
 +  PUNICODE_STRING ModuleName,
 +  DWORD ThreadId,
 +  int HookId,
 +  HOOKPROC HookProc,
 +  BOOL Ansi);
 +
 +DWORD
 +NTAPI
 +NtUserSetWindowStationUser(
 +  DWORD Unknown0,
 +  DWORD Unknown1,
 +  DWORD Unknown2,
 +  DWORD Unknown3);
 +
 +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);
 +
 +BOOL
 +NTAPI
 +NtUserShowCaret(
 +  HWND hWnd);
 +
 +BOOL
 +NTAPI
 +NtUserHideCaret(
 +  HWND hWnd);
 +
 +DWORD
 +NTAPI
 +NtUserShowScrollBar(HWND hWnd, int wBar, DWORD bShow);
 +
 +BOOL
 +NTAPI
 +NtUserShowWindow(
 +  HWND hWnd,
 +  LONG nCmdShow);
 +
 +BOOL
 +NTAPI
 +NtUserShowWindowAsync(
 +  HWND hWnd,
 +  LONG nCmdShow);
 +
 +BOOL
 +NTAPI
 +NtUserSoundSentry(VOID);
 +
 +BOOL
 +NTAPI
 +NtUserSwitchDesktop(
 +  HDESK hDesktop);
 +
 +BOOL
 +NTAPI
 +NtUserSystemParametersInfo(
 +  UINT uiAction,
 +  UINT uiParam,
 +  PVOID pvParam,
 +  UINT fWinIni);
 +
 +DWORD
 +NTAPI
 +NtUserTestForInteractiveUser(
 +    DWORD dwUnknown1);
 +
 +INT
 +NTAPI
 +NtUserToUnicodeEx(
 +                UINT wVirtKey,
 +                UINT wScanCode,
 +                PBYTE lpKeyState,
 +                LPWSTR pwszBuff,
 +                int cchBuff,
 +                UINT wFlags,
 +                HKL dwhkl );
 +
 +BOOL
 +NTAPI
 +NtUserTrackMouseEvent(
 +  LPTRACKMOUSEEVENT lpEventTrack);
 +
 +int
 +NTAPI
 +NtUserTranslateAccelerator(
 +  HWND Window,
 +  HACCEL Table,
 +  LPMSG Message);
 +
 +BOOL
 +NTAPI
 +NtUserTranslateMessage(
 +  LPMSG lpMsg,
 +  UINT flags );
 +
 +BOOL
 +NTAPI
 +NtUserUnhookWindowsHookEx(
 +  HHOOK Hook);
 +
 +BOOL
 +NTAPI
 +NtUserUnhookWinEvent(
 +  HWINEVENTHOOK hWinEventHook);
 +
 +BOOL
 +NTAPI
 +NtUserUnloadKeyboardLayout(
 +  HKL hKl);
 +
 +BOOL
 +NTAPI
 +NtUserUnlockWindowStation(
 +  HWINSTA hWindowStation);
 +
 +BOOL
 +NTAPI
 +NtUserUnregisterClass(
 +  PUNICODE_STRING ClassNameOrAtom,
 +  HINSTANCE hInstance,
 +  PCLSMENUNAME pClassMenuName);
 +
 +BOOL
 +NTAPI
 +NtUserUnregisterHotKey(HWND hWnd,
 +                     int id);
 +
 +BOOL
 +NTAPI
 +NtUserUnregisterUserApiHook(VOID);
 +
 +DWORD
 +NTAPI
 +NtUserUpdateInputContext(
 +  DWORD Unknown0,
 +  DWORD Unknown1,
 +  DWORD Unknown2);
 +
 +DWORD
 +NTAPI
 +NtUserUpdateInstance(
 +  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);
 +
 +BOOL
 +NTAPI
 +NtUserUpdatePerUserSystemParameters(
 +  DWORD dwReserved,
 +  BOOL bEnable);
 +
 +BOOL
 +NTAPI
 +NtUserUserHandleGrantAccess(
 +  IN HANDLE hUserHandle,
 +  IN HANDLE hJob,
 +  IN BOOL bGrant);
 +
 +BOOL
 +NTAPI
 +NtUserValidateHandleSecure(
 +  HANDLE hHdl,
 +  BOOL Restricted);
 +
 +BOOL
 +NTAPI
 +NtUserValidateRect(
 +    HWND hWnd,
 +    CONST RECT *lpRect);
 +
 +BOOL
 +APIENTRY
 +NtUserValidateTimerCallback(
 +    HWND hWnd,
 +    WPARAM wParam,
 +    LPARAM lParam);
 +
 +DWORD
 +NTAPI
 +NtUserVkKeyScanEx(
 +  WCHAR wChar,
 +  HKL KeyboardLayout,
 +  BOOL bUsehHK);
 +
 +DWORD
 +NTAPI
 +NtUserWaitForInputIdle(
 +  IN HANDLE hProcess,
 +  IN DWORD dwMilliseconds,
 +  IN BOOL Unknown2); // Always FALSE
 +
 +DWORD
 +NTAPI
 +NtUserWaitForMsgAndEvent(
 +  DWORD Unknown0);
 +
 +BOOL
 +NTAPI
 +NtUserWaitMessage(VOID);
 +
 +DWORD
 +NTAPI
 +NtUserWin32PoolAllocationStats(
 +  DWORD Unknown0,
 +  DWORD Unknown1,
 +  DWORD Unknown2,
 +  DWORD Unknown3,
 +  DWORD Unknown4,
 +  DWORD Unknown5);
 +
 +HWND
 +NTAPI
 +NtUserWindowFromPhysicalPoint(
 +  POINT Point);
 +
 +HWND
 +NTAPI
 +NtUserWindowFromPoint(
 +  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_SETCARETPOS        0xfffd0060
 +#define TWOPARAM_ROUTINE_ROS_UPDATEUISTATE  0x1004
 +#define HWNDPARAM_ROUTINE_ROS_NOTIFYWINEVENT 0x1005
 +
 +DWORD
 +NTAPI
 +NtUserBuildMenuItemList(
 + HMENU hMenu,
 + PVOID Buffer,
 + ULONG nBufSize,
 + DWORD Reserved);
 +
 +UINT
 +NTAPI
 +NtUserGetMenuDefaultItem(
 +  HMENU hMenu,
 +  UINT fByPos,
 +  UINT gmdiFlags);
 +
 +BOOL
 +NTAPI
 +NtUserGetMonitorInfo(
 +  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 ----------- */
 +    HMENU Self;         /* Handle of this menu */
 +    WORD Flags;         /* Menu flags (MF_POPUP, MF_SYSMENU) */
 +    UINT FocusedItem;   /* Currently focused item */
 +    UINT MenuItemCount; /* Number of items in the menu */
 +    HWND Wnd;           /* Window containing the menu */
 +    WORD Width;         /* Width of the whole menu */
 +    WORD Height;        /* Height of the whole menu */
 +    HWND WndOwner;     /* window receiving the messages for ownerdraw */
 +    BOOL TimeToHide;   /* Request hiding when receiving a second click in the top-level menu item */
 +    SIZE maxBmpSize;   /* Maximum size of the bitmap items in MIIM_BITMAP state */
 +} ROSMENUINFO, *PROSMENUINFO;
 +
 +BOOL
 +NTAPI
 +NtUserMenuInfo(
 + HMENU hmenu,
 + PROSMENUINFO lpmi,
 + BOOL fsog
 +);
 +
 +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 */
 +} ROSMENUITEMINFO, *PROSMENUITEMINFO;
 +
 +BOOL
 +NTAPI
 +NtUserMenuItemInfo(
 + HMENU hMenu,
 + UINT uItem,
 + BOOL fByPosition,
 + PROSMENUITEMINFO lpmii,
 + BOOL fsog
 +);
 +
 +HMONITOR
 +NTAPI
 +NtUserMonitorFromPoint(
 +  IN POINT point,
 +  IN DWORD dwFlags);
 +
 +HMONITOR
 +NTAPI
 +NtUserMonitorFromRect(
 +  IN LPCRECT pRect,
 +  IN DWORD dwFlags);
 +
 +HMONITOR
 +NTAPI
 +NtUserMonitorFromWindow(
 +  IN HWND hWnd,
 +  IN DWORD dwFlags);
 +
 +typedef struct _SETSCROLLBARINFO
 +{
 +  int nTrackPos;
 +  int reserved;
 +  DWORD rgstate[CCHILDREN_SCROLLBAR+1];
 +} SETSCROLLBARINFO, *PSETSCROLLBARINFO;
 +
 +BOOL
 +NTAPI
 +NtUserSetScrollBarInfo(
 +  HWND hwnd,
 +  LONG idObject,
 +  SETSCROLLBARINFO *info);
 +
 +
 +
 +#endif /* __WIN32K_NTUSER_H */
 +
 +/* EOF */
Simple merge
index 0000000,c7589b7..c7589b7
mode 000000,100644..100644
--- /dev/null
index 0000000,cc501d9..cc501d9
mode 000000,100644..100644
--- /dev/null
index 0000000,5819706..5819706
mode 000000,100644..100644
--- /dev/null
index 0000000,2248f7a..2248f7a
mode 000000,100644..100644
--- /dev/null
index 0000000,4f3efba..4f3efba
mode 000000,100644..100644
--- /dev/null
index 0000000,7235ac2..7235ac2
mode 000000,100644..100644
--- /dev/null
index 0000000,81ae2f9..81ae2f9
mode 000000,100644..100644
--- /dev/null
index 0000000,6a903d5..6a903d5
mode 000000,100644..100644
--- /dev/null
index 0000000,4a5c252..4a5c252
mode 000000,100644..100644
--- /dev/null
index 0000000,3a80267..3a80267
mode 000000,100644..100644
--- /dev/null
index 0000000,de845f4..de845f4
mode 000000,100644..100644
--- /dev/null
index 0000000,6a08977..6a08977
mode 000000,100644..100644
--- /dev/null
index 0000000,c883165..c883165
mode 000000,100644..100644
--- /dev/null
index 0000000,7e3e77d..7e3e77d
mode 000000,100644..100644
Binary files differ
index 0000000,f71560a..f71560a
mode 000000,100644..100644
--- /dev/null
index 0000000,ced9648..ced9648
mode 000000,100644..100644
--- /dev/null
index 0000000,6aa0067..6aa0067
mode 000000,100644..100644
--- /dev/null
index 0000000,555b08e..555b08e
mode 000000,100644..100644
--- /dev/null
index 0000000,a8568ab..a8568ab
mode 000000,100644..100644
--- /dev/null
index 0000000,126e700..126e700
mode 000000,100644..100644
--- /dev/null
index 0000000,7f41aa0..7f41aa0
mode 000000,100644..100644
--- /dev/null
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
index 0000000,b3a826d..b3a826d
mode 000000,100644..100644
--- /dev/null
Simple merge
index 0000000,f571d38..f571d38
mode 000000,100644..100644
--- /dev/null
index 0000000,2bfeae7..2bfeae7
mode 000000,100644..100644
--- /dev/null
Simple merge
Simple merge
Simple merge
index 0000000,79e7e25..79e7e25
mode 000000,100644..100644
--- /dev/null
Simple merge