xref: /reactos/win32ss/include/ntuser.h (revision 565bf9e3)
1 #ifndef __WIN32K_NTUSER_H
2 #define __WIN32K_NTUSER_H
3 
4 struct _PROCESSINFO;
5 struct _THREADINFO;
6 struct _DESKTOP;
7 struct _WND;
8 struct tagPOPUPMENU;
9 
10 #define FIRST_USER_HANDLE 0x0020 /* first possible value for low word of user handle */
11 #define LAST_USER_HANDLE 0xffef /* last possible value for low word of user handle */
12 
13 #define HANDLEENTRY_DESTROY 1
14 #define HANDLEENTRY_INDESTROY 2
15 
16 typedef struct _USER_HANDLE_ENTRY
17 {
18     void *ptr; /* pointer to object */
19     union
20     {
21         PVOID pi;
22         struct _THREADINFO *pti; /* pointer to Win32ThreadInfo */
23         struct _PROCESSINFO *ppi; /* pointer to W32ProcessInfo */
24     };
25     unsigned char type; /* object type (0 if free) */
26     unsigned char flags;
27     unsigned short generation; /* generation counter */
28 } USER_HANDLE_ENTRY, *PUSER_HANDLE_ENTRY;
29 
30 typedef struct _USER_HANDLE_TABLE
31 {
32     PUSER_HANDLE_ENTRY handles;
33     PUSER_HANDLE_ENTRY freelist;
34     int nb_handles;
35     int allocated_handles;
36 } USER_HANDLE_TABLE, *PUSER_HANDLE_TABLE;
37 
38 typedef enum _HANDLE_TYPE
39 {
40     TYPE_FREE = 0,
41     TYPE_WINDOW = 1,
42     TYPE_MENU = 2,
43     TYPE_CURSOR = 3,
44     TYPE_SETWINDOWPOS = 4,
45     TYPE_HOOK = 5,
46     TYPE_CLIPDATA = 6,
47     TYPE_CALLPROC = 7,
48     TYPE_ACCELTABLE = 8,
49     TYPE_DDEACCESS = 9,
50     TYPE_DDECONV = 10,
51     TYPE_DDEXACT = 11,
52     TYPE_MONITOR = 12,
53     TYPE_KBDLAYOUT = 13,
54     TYPE_KBDFILE = 14,
55     TYPE_WINEVENTHOOK = 15,
56     TYPE_TIMER = 16,
57     TYPE_INPUTCONTEXT = 17,
58     TYPE_HIDDATA = 18,
59     TYPE_DEVICEINFO = 19,
60     TYPE_TOUCHINPUTINFO = 20,
61     TYPE_GESTUREINFOOBJ = 21,
62     TYPE_CTYPES,
63     TYPE_GENERIC = 255
64 } HANDLE_TYPE, *PHANDLE_TYPE;
65 
66 typedef enum _USERTHREADINFOCLASS
67 {
68     UserThreadShutdownInformation,
69     UserThreadFlags,
70     UserThreadTaskName,
71     UserThreadWOWInformation,
72     UserThreadHungStatus,
73     UserThreadInitiateShutdown,
74     UserThreadEndShutdown,
75     UserThreadUseActiveDesktop,
76     UserThreadUseDesktop,
77     UserThreadRestoreDesktop,
78     UserThreadCsrApiPort,
79 } USERTHREADINFOCLASS;
80 
81 typedef struct _LARGE_UNICODE_STRING
82 {
83     ULONG Length;
84     ULONG MaximumLength:31;
85     ULONG bAnsi:1;
86     PWSTR Buffer;
87 } LARGE_UNICODE_STRING, *PLARGE_UNICODE_STRING;
88 
89 typedef struct _LARGE_STRING
90 {
91     ULONG Length;
92     ULONG MaximumLength:31;
93     ULONG bAnsi:1;
94     PVOID Buffer;
95 } LARGE_STRING, *PLARGE_STRING;
96 
97 
98 /* Based on ANSI_STRING */
99 typedef struct _LARGE_ANSI_STRING
100 {
101     ULONG Length;
102     ULONG MaximumLength:31;
103     ULONG bAnsi:1;
104     PCHAR Buffer;
105 } LARGE_ANSI_STRING, *PLARGE_ANSI_STRING;
106 
107 VOID
108 NTAPI
109 RtlInitLargeAnsiString(
110     IN OUT PLARGE_ANSI_STRING,
111     IN PCSZ,
112     IN INT);
113 
114 VOID
115 NTAPI
116 RtlInitLargeUnicodeString(
117     IN OUT PLARGE_UNICODE_STRING,
118     IN PCWSTR,
119     IN INT);
120 
121 BOOL
122 NTAPI
123 RtlLargeStringToUnicodeString(
124     PUNICODE_STRING,
125     PLARGE_STRING);
126 
127 #define NB_HOOKS (WH_MAXHOOK - WH_MINHOOK + 1)
128 
129 /*
130  * DESKTOPINFO structure.
131  * See also: https://reactos.org/wiki/Techwiki:Win32k/DESKTOP
132  */
133 typedef struct _DESKTOPINFO
134 {
135     PVOID pvDesktopBase;
136     PVOID pvDesktopLimit;
137     struct _WND *spwnd;
138     DWORD fsHooks;
139     LIST_ENTRY aphkStart[NB_HOOKS];
140 
141     HWND hTaskManWindow;
142     HWND hProgmanWindow;
143     HWND hShellWindow;
144     struct _WND *spwndShell;
145     struct _WND *spwndBkGnd;
146 
147     struct _PROCESSINFO *ppiShellProcess;
148 
149     union
150     {
151         UINT Dummy;
152         struct
153         {
154             UINT LastInputWasKbd:1;
155         };
156     };
157 
158     WCHAR szDesktopName[1];
159 } DESKTOPINFO, *PDESKTOPINFO;
160 
161 #define CTI_THREADSYSLOCK 0x0001
162 #define CTI_INSENDMESSAGE 0x0002
163 
164 /*
165  * CLIENTTHREADINFO structure.
166  * See also: https://reactos.org/wiki/Techwiki:Win32k/CLIENTTHREADINFO
167  */
168 typedef struct _CLIENTTHREADINFO
169 {
170     DWORD CTI_flags;
171     WORD fsChangeBits;
172     WORD fsWakeBits;
173     WORD fsWakeBitsJournal;
174     WORD fsWakeMask;
175     ULONG timeLastRead; // Last time the message queue was read.
176     DWORD dwcPumpHook;
177 } CLIENTTHREADINFO, *PCLIENTTHREADINFO;
178 
179 typedef struct _HEAD
180 {
181     HANDLE h;
182     DWORD cLockObj;
183 } HEAD, *PHEAD;
184 
185 typedef struct _THROBJHEAD
186 {
187     HEAD;
188     struct _THREADINFO *pti;
189 } THROBJHEAD, *PTHROBJHEAD;
190 
191 typedef struct _THRDESKHEAD
192 {
193     THROBJHEAD;
194     struct _DESKTOP *rpdesk;
195     PVOID pSelf;
196 } THRDESKHEAD, *PTHRDESKHEAD;
197 
198 typedef struct tagIMC
199 {
200     THRDESKHEAD    head;
201     struct tagIMC *pImcNext;
202     ULONG_PTR      dwClientImcData;
203     HWND           hImeWnd;
204 } IMC, *PIMC;
205 
206 #ifndef _WIN64
207 C_ASSERT(offsetof(IMC, head.h) == 0x0);
208 C_ASSERT(offsetof(IMC, head.cLockObj) == 0x4);
209 C_ASSERT(offsetof(IMC, head.pti) == 0x8);
210 C_ASSERT(offsetof(IMC, pImcNext) == 0x14);
211 C_ASSERT(offsetof(IMC, dwClientImcData) == 0x18);
212 C_ASSERT(offsetof(IMC, hImeWnd) == 0x1c);
213 #endif
214 
215 typedef struct _PROCDESKHEAD
216 {
217     HEAD;
218     DWORD_PTR hTaskWow;
219     struct _DESKTOP *rpdesk;
220     PVOID pSelf;
221 } PROCDESKHEAD, *PPROCDESKHEAD;
222 
223 typedef struct _PROCMARKHEAD
224 {
225     HEAD;
226     ULONG hTaskWow;
227     struct _PROCESSINFO *ppi;
228 } PROCMARKHEAD, *PPROCMARKHEAD;
229 
230 #define UserHMGetHandle(obj) ((obj)->head.h)
231 
232 /* Window Client Information structure */
233 struct _ETHREAD;
234 
235 #define WEF_SETBYWNDPTI 0x0001
236 
237 typedef struct tagHOOK
238 {
239     THRDESKHEAD head;
240     struct tagHOOK *phkNext; /* This is for user space. */
241     int HookId; /* Hook table index */
242     ULONG_PTR offPfn;
243     ULONG flags; /* Some internal flags */
244     INT_PTR ihmod;
245     struct _THREADINFO *ptiHooked;
246     struct _DESKTOP *rpdesk;
247     /* ReactOS */
248     LIST_ENTRY Chain; /* Hook chain entry */
249     HOOKPROC Proc; /* Hook function */
250     BOOLEAN Ansi; /* Is it an Ansi hook? */
251     UNICODE_STRING ModuleName; /* Module name for global hooks */
252 } HOOK, *PHOOK;
253 
254 typedef struct tagCLIPBOARDDATA
255 {
256     HEAD head;
257     DWORD cbData;
258     BYTE Data[0];
259 } CLIPBOARDDATA, *PCLIPBOARDDATA;
260 
261 /* THREADINFO Flags */
262 #define TIF_INCLEANUP               0x00000001
263 #define TIF_16BIT                   0x00000002
264 #define TIF_SYSTEMTHREAD            0x00000004
265 #define TIF_CSRSSTHREAD             0x00000008
266 #define TIF_TRACKRECTVISIBLE        0x00000010
267 #define TIF_ALLOWFOREGROUNDACTIVATE 0x00000020
268 #define TIF_DONTATTACHQUEUE         0x00000040
269 #define TIF_DONTJOURNALATTACH       0x00000080
270 #define TIF_WOW64                   0x00000100
271 #define TIF_INACTIVATEAPPMSG        0x00000200
272 #define TIF_SPINNING                0x00000400
273 #define TIF_PALETTEAWARE            0x00000800
274 #define TIF_SHAREDWOW               0x00001000
275 #define TIF_FIRSTIDLE               0x00002000
276 #define TIF_WAITFORINPUTIDLE        0x00004000
277 #define TIF_MOVESIZETRACKING        0x00008000
278 #define TIF_VDMAPP                  0x00010000
279 #define TIF_DOSEMULATOR             0x00020000
280 #define TIF_GLOBALHOOKER            0x00040000
281 #define TIF_DELAYEDEVENT            0x00080000
282 #define TIF_MSGPOSCHANGED           0x00100000
283 #define TIF_SHUTDOWNCOMPLETE        0x00200000
284 #define TIF_IGNOREPLAYBACKDELAY     0x00400000
285 #define TIF_ALLOWOTHERACCOUNTHOOK   0x00800000
286 #define TIF_GUITHREADINITIALIZED    0x02000000
287 #define TIF_DISABLEIME              0x04000000
288 #define TIF_INGETTEXTLENGTH         0x08000000
289 #define TIF_ANSILENGTH              0x10000000
290 #define TIF_DISABLEHOOKS            0x20000000
291 
292 typedef struct _CALLBACKWND
293 {
294     HWND hWnd;
295     struct _WND *pWnd;
296     PVOID pActCtx;
297 } CALLBACKWND, *PCALLBACKWND;
298 
299 #define CI_TRANSACTION       0x00000001
300 #define CI_QUEUEMSG          0x00000002
301 #define CI_WOW               0x00000004
302 #define CI_INITTHREAD        0x00000008
303 #define CI_CURTHPRHOOK       0x00000010
304 #define CI_CLASSESREGISTERED 0x00000020
305 #define CI_IMMACTIVATE       0x00000040 /* IMM/IME (Asian input) */
306 #define CI_TSFDISABLED       0x00000400 /* TSF (Text Services Framework a.k.a. Cicero) */
307 #define CI_AIMMACTIVATED     0x00000800 /* Active IMM (AIMM) */
308 
309 /*
310  * CLIENTINFO structure.
311  * See also: https://reactos.org/wiki/Techwiki:Win32k/CLIENTINFO
312  */
313 typedef struct _CLIENTINFO
314 {
315     ULONG_PTR CI_flags;
316     ULONG_PTR cSpins;
317     DWORD dwExpWinVer;
318     DWORD dwCompatFlags;
319     DWORD dwCompatFlags2;
320     DWORD dwTIFlags; /* ThreadInfo TIF_Xxx flags for User space. */
321     PDESKTOPINFO pDeskInfo;
322     ULONG_PTR ulClientDelta;
323     PHOOK phkCurrent;
324     ULONG fsHooks;
325     CALLBACKWND CallbackWnd;
326     DWORD dwHookCurrent;
327     INT cInDDEMLCallback;
328     PCLIENTTHREADINFO pClientThreadInfo;
329     ULONG_PTR dwHookData;
330     DWORD dwKeyCache;
331     BYTE afKeyState[8];
332     DWORD dwAsyncKeyCache;
333     BYTE afAsyncKeyState[8];
334     BYTE afAsyncKeyStateRecentDow[8];
335     HKL hKL;
336     USHORT CodePage;
337     UCHAR achDbcsCF[2];
338     MSG msgDbcsCB;
339     LPDWORD lpdwRegisteredClasses;
340     ULONG Win32ClientInfo3[26];
341 /* It's just a pointer reference not to be used w the structure in user space. */
342     struct _PROCESSINFO *ppi;
343 } CLIENTINFO, *PCLIENTINFO;
344 
345 /* Make sure it fits into the TEB */
346 C_ASSERT(sizeof(CLIENTINFO) <= sizeof(((PTEB)0)->Win32ClientInfo));
347 
348 #define GetWin32ClientInfo() ((PCLIENTINFO)(NtCurrentTeb()->Win32ClientInfo))
349 
350 typedef struct tagDDEPACK
351 {
352     UINT_PTR uiLo;
353     UINT_PTR uiHi;
354 } DDEPACK, *PDDEPACK;
355 
356 #define HRGN_NULL    ((HRGN)0) /* NULL empty region */
357 #define HRGN_WINDOW  ((HRGN)1) /* region from window rcWindow */
358 #define HRGN_MONITOR ((HRGN)2) /* region from monitor region. */
359 
360 /* Menu Item fType. */
361 #define MFT_RTOL 0x6000
362 
363 /* Menu Item fState. */
364 #define MFS_HBMMENUBMP 0x20000000
365 
366 typedef struct tagITEM
367 {
368     UINT fType;
369     UINT fState;
370     UINT wID;
371     struct tagMENU *spSubMenu; /* Pop-up menu. */
372     HANDLE hbmpChecked;
373     HANDLE hbmpUnchecked;
374     USHORT *Xlpstr; /* Item text pointer. */
375     ULONG cch;
376     DWORD_PTR dwItemData;
377     ULONG xItem; /* Item position. left */
378     ULONG yItem; /*     "          top */
379     ULONG cxItem; /* Item Size Width */
380     ULONG cyItem; /*     "     Height */
381     ULONG dxTab; /* X position of text after Tab */
382     ULONG ulX; /* underline.. start position */
383     ULONG ulWidth; /* underline.. width */
384     HBITMAP hbmp; /* bitmap */
385     INT cxBmp; /* Width Maximum size of the bitmap items in MIIM_BITMAP state */
386     INT cyBmp; /* Height " */
387     /* ReactOS */
388     UNICODE_STRING lpstr;
389 } ITEM, *PITEM;
390 
391 typedef struct tagMENULIST
392 {
393     struct tagMENULIST *pNext;
394     struct tagMENU *pMenu;
395 } MENULIST, *PMENULIST;
396 
397 /* Menu fFlags, upper byte is MNS_X style flags. */
398 #define MNF_POPUP      0x0001
399 #define MNF_UNDERLINE  0x0004
400 #define MNF_INACTIVE   0x0010
401 #define MNF_RTOL       0x0020
402 #define MNF_DESKTOPMN  0x0040
403 #define MNF_SYSDESKMN  0x0080
404 #define MNF_SYSSUBMENU 0x0100
405 /* Hack */
406 #define MNF_SYSMENU    0x0200
407 
408 /* (other FocusedItem values give the position of the focused item) */
409 #define NO_SELECTED_ITEM 0xffff
410 
411 typedef struct tagMENU
412 {
413     PROCDESKHEAD head;
414     ULONG fFlags; /* [Style flags | Menu flags] */
415     INT iItem; /* nPos of selected item, if -1 not selected. AKA focused item */
416     UINT cAlloced; /* Number of allocated items. Inc's of 8 */
417     UINT cItems; /* Number of items in the menu */
418     ULONG cxMenu; /* Width of the whole menu */
419     ULONG cyMenu; /* Height of the whole menu */
420     ULONG cxTextAlign; /* Offset of text when items have both bitmaps and text */
421     struct _WND *spwndNotify; /* window receiving the messages for ownerdraw */
422     PITEM rgItems; /* Array of menu items */
423     struct tagMENULIST *pParentMenus; /* If this is SubMenu, list of parents. */
424     DWORD dwContextHelpId;
425     ULONG cyMax; /* max height of the whole menu, 0 is screen height */
426     DWORD_PTR dwMenuData; /* application defined value */
427     HBRUSH hbrBack; /* brush for menu background */
428     INT iTop; /* Current scroll position Top */
429     INT iMaxTop; /* Current scroll position Max Top */
430     DWORD dwArrowsOn:2; /* Arrows: 0 off, 1 on, 2 to the top, 3 to the bottom. */
431     /* ReactOS */
432     LIST_ENTRY ListEntry;
433     HWND hWnd; /* Window containing the menu, use POPUPMENU */
434     BOOL TimeToHide;
435 } MENU, *PMENU;
436 
437 typedef struct tagPOPUPMENU
438 {
439     ULONG fIsMenuBar:1;
440     ULONG fHasMenuBar:1;
441     ULONG fIsSysMenu:1;
442     ULONG fIsTrackPopup:1;
443     ULONG fDroppedLeft:1;
444     ULONG fHierarchyDropped:1;
445     ULONG fRightButton:1;
446     ULONG fToggle:1;
447     ULONG fSynchronous:1;
448     ULONG fFirstClick:1;
449     ULONG fDropNextPopup:1;
450     ULONG fNoNotify:1;
451     ULONG fAboutToHide:1;
452     ULONG fShowTimer:1;
453     ULONG fHideTimer:1;
454     ULONG fDestroyed:1;
455     ULONG fDelayedFree:1;
456     ULONG fFlushDelayedFree:1;
457     ULONG fFreed:1;
458     ULONG fInCancel:1;
459     ULONG fTrackMouseEvent:1;
460     ULONG fSendUninit:1;
461     ULONG fRtoL:1;
462     // ULONG fDesktopMenu:1;
463     ULONG iDropDir:5;
464     ULONG fUseMonitorRect:1;
465     struct _WND *spwndNotify;
466     struct _WND *spwndPopupMenu;
467     struct _WND *spwndNextPopup;
468     struct _WND *spwndPrevPopup;
469     PMENU spmenu;
470     PMENU spmenuAlternate;
471     struct _WND *spwndActivePopup;
472     struct tagPOPUPMENU *ppopupmenuRoot;
473     struct tagPOPUPMENU *ppmDelayedFree;
474     UINT posSelectedItem;
475     UINT posDropped;
476 } POPUPMENU, *PPOPUPMENU;
477 
478 typedef struct _REGISTER_SYSCLASS
479 {
480     /* This is a reactos specific class used to initialize the
481        system window classes during user32 initialization */
482     PWSTR ClassName;
483     UINT Style;
484     WNDPROC ProcW;
485     UINT ExtraBytes;
486     HICON hCursor;
487     HBRUSH hBrush;
488     WORD fiId;
489     WORD iCls;
490 } REGISTER_SYSCLASS, *PREGISTER_SYSCLASS;
491 
492 typedef struct _CLSMENUNAME
493 {
494     LPSTR pszClientAnsiMenuName;
495     LPWSTR pwszClientUnicodeMenuName;
496     PUNICODE_STRING pusMenuName;
497 } CLSMENUNAME, *PCLSMENUNAME;
498 
499 typedef struct tagSBDATA
500 {
501     INT posMin;
502     INT posMax;
503     INT page;
504     INT pos;
505 } SBDATA, *PSBDATA;
506 
507 typedef struct tagSBINFO
508 {
509     INT WSBflags;
510     SBDATA Horz;
511     SBDATA Vert;
512 } SBINFO, *PSBINFO;
513 
514 typedef struct tagSBCALC
515 {
516     INT posMin;
517     INT posMax;
518     INT page;
519     INT pos;
520     INT pxTop;
521     INT pxBottom;
522     INT pxLeft;
523     INT pxRight;
524     INT cpxThumb;
525     INT pxUpArrow;
526     INT pxDownArrow;
527     INT pxStart;
528     INT pxThumbBottom;
529     INT pxThumbTop;
530     INT cpx;
531     INT pxMin;
532 } SBCALC, *PSBCALC;
533 
534 typedef enum _GETCPD
535 {
536     UserGetCPDA2U = 0x01, /* " Unicode " */
537     UserGetCPDU2A = 0X02, /* " Ansi " */
538     UserGetCPDClass = 0X10,
539     UserGetCPDWindow = 0X20,
540     UserGetCPDDialog = 0X40,
541     UserGetCPDWndtoCls = 0X80
542 } GETCPD, *PGETCPD;
543 
544 typedef struct _CALLPROCDATA
545 {
546     PROCDESKHEAD head;
547     struct _CALLPROCDATA *spcpdNext;
548     WNDPROC pfnClientPrevious;
549     GETCPD wType;
550 } CALLPROCDATA, *PCALLPROCDATA;
551 
552 #define CSF_SERVERSIDEPROC  0x0001
553 #define CSF_ANSIPROC        0x0002
554 #define CSF_WOWDEFERDESTROY 0x0004
555 #define CSF_SYSTEMCLASS     0x0008
556 #define CSF_WOWCLASS        0x0010
557 #define CSF_WOWEXTRA        0x0020
558 #define CSF_CACHEDSMICON    0x0040
559 #define CSF_WIN40COMPAT     0x0080
560 
561 typedef struct _CLS
562 {
563     struct _CLS *pclsNext;
564     RTL_ATOM atomClassName;
565     ATOM atomNVClassName;
566     DWORD fnid;
567     struct _DESKTOP *rpdeskParent;
568     PVOID pdce;
569     DWORD CSF_flags;
570     PSTR  lpszClientAnsiMenuName; /* For client use */
571     PWSTR lpszClientUnicodeMenuName; /* "   "      " */
572     PCALLPROCDATA spcpdFirst;
573     struct _CLS *pclsBase;
574     struct _CLS *pclsClone;
575     ULONG cWndReferenceCount;
576     UINT style;
577     WNDPROC lpfnWndProc;
578     INT cbclsExtra;
579     INT cbwndExtra;
580     HINSTANCE hModule;
581     struct _CURICON_OBJECT *spicn;
582     struct _CURICON_OBJECT *spcur;
583     HBRUSH hbrBackground;
584     PWSTR lpszMenuName; /* kernel use */
585     PSTR lpszAnsiClassName; /* " */
586     struct _CURICON_OBJECT *spicnSm;
587     ////
588     UINT Unicode:1; // !CSF_ANSIPROC
589     UINT Global:1; // CS_GLOBALCLASS or CSF_SERVERSIDEPROC
590     UINT MenuNameIsString:1;
591     UINT NotUsed:29;
592 } CLS, *PCLS;
593 
594 typedef struct _SBINFOEX
595 {
596     SCROLLBARINFO ScrollBarInfo;
597     SCROLLINFO ScrollInfo;
598 } SBINFOEX, *PSBINFOEX;
599 
600 /* State Flags !Not ALL Implemented! */
601 #define WNDS_HASMENU                 0X00000001
602 #define WNDS_HASVERTICALSCROOLLBAR   0X00000002
603 #define WNDS_HASHORIZONTALSCROLLBAR  0X00000004
604 #define WNDS_HASCAPTION              0X00000008
605 #define WNDS_SENDSIZEMOVEMSGS        0X00000010
606 #define WNDS_MSGBOX                  0X00000020
607 #define WNDS_ACTIVEFRAME             0X00000040
608 #define WNDS_HASSPB                  0X00000080
609 #define WNDS_NONCPAINT               0X00000100
610 #define WNDS_SENDERASEBACKGROUND     0X00000200
611 #define WNDS_ERASEBACKGROUND         0X00000400
612 #define WNDS_SENDNCPAINT             0X00000800
613 #define WNDS_INTERNALPAINT           0X00001000
614 #define WNDS_UPDATEDIRTY             0X00002000
615 #define WNDS_HIDDENPOPUP             0X00004000
616 #define WNDS_FORCEMENUDRAW           0X00008000
617 #define WNDS_DIALOGWINDOW            0X00010000
618 #define WNDS_HASCREATESTRUCTNAME     0X00020000
619 #define WNDS_SERVERSIDEWINDOWPROC    0x00040000 /* Call proc inside win32k. */
620 #define WNDS_ANSIWINDOWPROC          0x00080000
621 #define WNDS_BEINGACTIVATED          0x00100000
622 #define WNDS_HASPALETTE              0x00200000
623 #define WNDS_PAINTNOTPROCESSED       0x00400000
624 #define WNDS_SYNCPAINTPENDING        0x00800000
625 #define WNDS_RECEIVEDQUERYSUSPENDMSG 0x01000000
626 #define WNDS_RECEIVEDSUSPENDMSG      0x02000000
627 #define WNDS_TOGGLETOPMOST           0x04000000
628 #define WNDS_REDRAWIFHUNG            0x08000000
629 #define WNDS_REDRAWFRAMEIFHUNG       0x10000000
630 #define WNDS_ANSICREATOR             0x20000000
631 #define WNDS_MAXIMIZESTOMONITOR      0x40000000
632 #define WNDS_DESTROYED               0x80000000
633 
634 #define WNDSACTIVEFRAME              0x00000006
635 
636 /* State2 Flags !Not ALL Implemented! */
637 #define WNDS2_WMPAINTSENT               0X00000001
638 #define WNDS2_ENDPAINTINVALIDATE        0X00000002
639 #define WNDS2_STARTPAINT                0X00000004
640 #define WNDS2_OLDUI                     0X00000008
641 #define WNDS2_HASCLIENTEDGE             0X00000010
642 #define WNDS2_BOTTOMMOST                0X00000020
643 #define WNDS2_FULLSCREEN                0X00000040
644 #define WNDS2_INDESTROY                 0X00000080
645 #define WNDS2_WIN31COMPAT               0X00000100
646 #define WNDS2_WIN40COMPAT               0X00000200
647 #define WNDS2_WIN50COMPAT               0X00000400
648 #define WNDS2_MAXIMIZEDMONITORREGION    0X00000800
649 #define WNDS2_CLOSEBUTTONDOWN           0X00001000
650 #define WNDS2_MAXIMIZEBUTTONDOWN        0X00002000
651 #define WNDS2_MINIMIZEBUTTONDOWN        0X00004000
652 #define WNDS2_HELPBUTTONDOWN            0X00008000
653 #define WNDS2_SCROLLBARLINEUPBTNDOWN    0X00010000
654 #define WNDS2_SCROLLBARPAGEUPBTNDOWN    0X00020000
655 #define WNDS2_SCROLLBARPAGEDOWNBTNDOWN  0X00040000
656 #define WNDS2_SCROLLBARLINEDOWNBTNDOWN  0X00080000
657 #define WNDS2_ANYSCROLLBUTTONDOWN       0X00100000
658 #define WNDS2_SCROLLBARVERTICALTRACKING 0X00200000
659 #define WNDS2_FORCENCPAINT              0X00400000
660 #define WNDS2_FORCEFULLNCPAINTCLIPRGN   0X00800000
661 #define WNDS2_FULLSCREENMODE            0X01000000
662 #define WNDS2_CAPTIONTEXTTRUNCATED      0X08000000
663 #define WNDS2_NOMINMAXANIMATERECTS      0X10000000
664 #define WNDS2_SMALLICONFROMWMQUERYDRAG  0X20000000
665 #define WNDS2_SHELLHOOKREGISTERED       0X40000000
666 #define WNDS2_WMCREATEMSGPROCESSED      0X80000000
667 
668 /* ExStyles2 */
669 #define WS_EX2_CLIPBOARDLISTENER        0X00000001
670 #define WS_EX2_LAYEREDINVALIDATE        0X00000002
671 #define WS_EX2_REDIRECTEDFORPRINT       0X00000004
672 #define WS_EX2_LINKED                   0X00000008
673 #define WS_EX2_LAYEREDFORDWM            0X00000010
674 #define WS_EX2_LAYEREDLIMBO             0X00000020
675 #define WS_EX2_HIGHTDPI_UNAWAR          0X00000040
676 #define WS_EX2_VERTICALLYMAXIMIZEDLEFT  0X00000080
677 #define WS_EX2_VERTICALLYMAXIMIZEDRIGHT 0X00000100
678 #define WS_EX2_HASOVERLAY               0X00000200
679 #define WS_EX2_CONSOLEWINDOW            0X00000400
680 #define WS_EX2_CHILDNOACTIVATE          0X00000800
681 
682 #define WPF_MININIT 0x0008
683 #define WPF_MAXINIT 0x0010
684 
685 /*
686  * WND structure.
687  * See also: https://reactos.org/wiki/Techwiki:Win32k/WND
688  */
689 typedef struct _WND
690 {
691     THRDESKHEAD head;
692 #if 0
693     WW ww;
694 #else
695     /* These fields should be moved in the WW at some point. */
696     /* Plese do not change them to keep the same layout with WW. */
697     DWORD state;
698     DWORD state2;
699     /* Extended style. */
700     DWORD ExStyle;
701     /* Style. */
702     DWORD style;
703     /* Handle of the module that created the window. */
704     HINSTANCE hModule;
705     DWORD fnid;
706 #endif
707     struct _WND *spwndNext;
708     struct _WND *spwndPrev;
709     struct _WND *spwndParent;
710     struct _WND *spwndChild;
711     struct _WND *spwndOwner;
712     RECT rcWindow;
713     RECT rcClient;
714     WNDPROC lpfnWndProc;
715     /* Pointer to the window class. */
716     PCLS pcls;
717     HRGN hrgnUpdate;
718     /* Property list head.*/
719     LIST_ENTRY PropListHead;
720     ULONG PropListItems;
721     /* Scrollbar info */
722     PSBINFO pSBInfo;
723     /* system menu handle. */
724     HMENU SystemMenu;
725     //PMENU spmenuSys;
726     /* Window menu handle or window id */
727     UINT_PTR IDMenu; // Use spmenu
728     //PMENU spmenu;
729     HRGN hrgnClip;
730     HRGN hrgnNewFrame;
731     /* Window name. */
732     LARGE_UNICODE_STRING strName;
733     /* Size of the extra data associated with the window. */
734     ULONG cbwndExtra;
735     struct _WND *spwndLastActive;
736     HIMC hImc; // Input context associated with this window.
737     LONG_PTR dwUserData;
738     PVOID pActCtx;
739     //PD3DMATRIX pTransForm;
740     struct _WND *spwndClipboardListener;
741     DWORD ExStyle2;
742 
743     /* ReactOS */
744     struct
745     {
746         RECT NormalRect;
747         POINT IconPos;
748         POINT MaxPos;
749         UINT flags; /* WPF_ flags. */
750     } InternalPos;
751 
752     UINT Unicode:1; /* !(WNDS_ANSICREATOR|WNDS_ANSIWINDOWPROC) ? */
753     UINT InternalPosInitialized:1;
754     UINT HideFocus:1; /* WS_EX_UISTATEFOCUSRECTHIDDEN ? */
755     UINT HideAccel:1; /* WS_EX_UISTATEKBACCELHIDDEN ? */
756 
757     /* Scrollbar info */
758     PSBINFOEX pSBInfoex; // convert to PSBINFO
759     /* Entry in the list of thread windows. */
760     LIST_ENTRY ThreadListEntry;
761 
762     PVOID DialogPointer;
763 } WND, *PWND;
764 
765 #define PWND_BOTTOM ((PWND)1)
766 
767 typedef struct _SBWND
768 {
769     WND wnd;
770     BOOL fVert;
771     UINT wDisableFlags;
772     SBCALC SBCalc;
773 } SBWND, *PSBWND;
774 
775 typedef struct _MDIWND
776 {
777   WND wnd;
778   DWORD dwReserved;
779   PVOID pmdi;
780 } MDIWND, *PMDIWND;
781 
782 #define GWLP_MDIWND 4
783 
784 typedef struct _MENUWND
785 {
786     WND wnd;
787     PPOPUPMENU ppopupmenu;
788 } MENUWND, *PMENUWND;
789 
790 typedef struct _PFNCLIENT
791 {
792     WNDPROC pfnScrollBarWndProc;
793     WNDPROC pfnTitleWndProc;
794     WNDPROC pfnMenuWndProc;
795     WNDPROC pfnDesktopWndProc;
796     WNDPROC pfnDefWindowProc;
797     WNDPROC pfnMessageWindowProc;
798     WNDPROC pfnSwitchWindowProc;
799     WNDPROC pfnButtonWndProc;
800     WNDPROC pfnComboBoxWndProc;
801     WNDPROC pfnComboListBoxProc;
802     WNDPROC pfnDialogWndProc;
803     WNDPROC pfnEditWndProc;
804     WNDPROC pfnListBoxWndProc;
805     WNDPROC pfnMDIClientWndProc;
806     WNDPROC pfnStaticWndProc;
807     WNDPROC pfnImeWndProc;
808     WNDPROC pfnGhostWndProc;
809     WNDPROC pfnHkINLPCWPSTRUCT;
810     WNDPROC pfnHkINLPCWPRETSTRUCT;
811     WNDPROC pfnDispatchHook;
812     WNDPROC pfnDispatchDefWindowProc;
813     WNDPROC pfnDispatchMessage;
814     WNDPROC pfnMDIActivateDlgProc;
815 } PFNCLIENT, *PPFNCLIENT;
816 
817 /*
818   Wine Common proc ( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam, BOOL Unicode );
819   Windows uses Ansi == TRUE, Wine uses Unicode == TRUE.
820  */
821 
822 typedef LRESULT
823 (CALLBACK *WNDPROC_EX)(
824     HWND,
825     UINT,
826     WPARAM,
827     LPARAM,
828     BOOL);
829 
830 typedef struct _PFNCLIENTWORKER
831 {
832     WNDPROC_EX pfnButtonWndProc;
833     WNDPROC_EX pfnComboBoxWndProc;
834     WNDPROC_EX pfnComboListBoxProc;
835     WNDPROC_EX pfnDialogWndProc;
836     WNDPROC_EX pfnEditWndProc;
837     WNDPROC_EX pfnListBoxWndProc;
838     WNDPROC_EX pfnMDIClientWndProc;
839     WNDPROC_EX pfnStaticWndProc;
840     WNDPROC_EX pfnImeWndProc;
841     WNDPROC_EX pfnGhostWndProc;
842     WNDPROC_EX pfnCtfHookProc;
843 } PFNCLIENTWORKER, *PPFNCLIENTWORKER;
844 
845 typedef LONG_PTR
846 (NTAPI *PFN_FNID)(
847     PWND,
848     UINT,
849     WPARAM,
850     LPARAM,
851     ULONG_PTR);
852 
853 /* FNID's for NtUserSetWindowFNID, NtUserMessageCall */
854 #define FNID_FIRST                  0x029A
855 #define FNID_SCROLLBAR              0x029A
856 #define FNID_ICONTITLE              0x029B
857 #define FNID_MENU                   0x029C
858 #define FNID_DESKTOP                0x029D
859 #define FNID_DEFWINDOWPROC          0x029E
860 #define FNID_MESSAGEWND             0x029F
861 #define FNID_SWITCH                 0x02A0
862 #define FNID_BUTTON                 0x02A1
863 #define FNID_COMBOBOX               0x02A2
864 #define FNID_COMBOLBOX              0x02A3
865 #define FNID_DIALOG                 0x02A4
866 #define FNID_EDIT                   0x02A5
867 #define FNID_LISTBOX                0x02A6
868 #define FNID_MDICLIENT              0x02A7
869 #define FNID_STATIC                 0x02A8
870 #define FNID_IME                    0x02A9
871 #define FNID_GHOST                  0x02AA
872 #define FNID_CALLWNDPROC            0x02AB
873 #define FNID_CALLWNDPROCRET         0x02AC
874 #define FNID_HKINLPCWPEXSTRUCT      0x02AD
875 #define FNID_HKINLPCWPRETEXSTRUCT   0x02AE
876 #define FNID_MB_DLGPROC             0x02AF
877 #define FNID_MDIACTIVATEDLGPROC     0x02B0
878 #define FNID_SENDMESSAGE            0x02B1
879 #define FNID_SENDMESSAGEFF          0x02B2
880 /* Kernel has option to use TimeOut or normal msg send, based on type of msg. */
881 #define FNID_SENDMESSAGEWTOOPTION   0x02B3
882 #define FNID_SENDMESSAGECALLPROC    0x02B4
883 #define FNID_BROADCASTSYSTEMMESSAGE 0x02B5
884 #define FNID_TOOLTIPS               0x02B6
885 #define FNID_SENDNOTIFYMESSAGE      0x02B7
886 #define FNID_SENDMESSAGECALLBACK    0x02B8
887 
888 #define FNID_LAST                   FNID_SENDMESSAGECALLBACK
889 
890 #define FNID_NUM                    (FNID_LAST - FNID_FIRST + 1)
891 #define FNID_NUMSERVERPROC          (FNID_SWITCH - FNID_FIRST + 1)
892 
893 #define FNID_DDEML   0x2000 /* Registers DDEML */
894 #define FNID_DESTROY 0x4000 /* This is sent when WM_NCDESTROY or in the support routine. */
895                             /* Seen during WM_CREATE on error exit too. */
896 #define FNID_FREED   0x8000 /* Window being Freed... */
897 
898 #define ICLASS_TO_MASK(iCls) (1 << ((iCls)))
899 
900 #define GETPFNCLIENTA(fnid) \
901  (WNDPROC)(*(((ULONG_PTR *)&gpsi->apfnClientA) + (fnid - FNID_FIRST)))
902 #define GETPFNCLIENTW(fnid) \
903  (WNDPROC)(*(((ULONG_PTR *)&gpsi->apfnClientW) + (fnid - FNID_FIRST)))
904 
905 #define GETPFNSERVER(fnid) gpsi->aStoCidPfn[fnid - FNID_FIRST]
906 
907 /* ICLS's for NtUserGetClassName FNID to ICLS, NtUserInitializeClientPfnArrays */
908 #define ICLS_BUTTON       0
909 #define ICLS_EDIT         1
910 #define ICLS_STATIC       2
911 #define ICLS_LISTBOX      3
912 #define ICLS_SCROLLBAR    4
913 #define ICLS_COMBOBOX     5
914 #define ICLS_MDICLIENT    6
915 #define ICLS_COMBOLBOX    7
916 #define ICLS_DDEMLEVENT   8
917 #define ICLS_DDEMLMOTHER  9
918 #define ICLS_DDEML16BIT   10
919 #define ICLS_DDEMLCLIENTA 11
920 #define ICLS_DDEMLCLIENTW 12
921 #define ICLS_DDEMLSERVERA 13
922 #define ICLS_DDEMLSERVERW 14
923 #define ICLS_IME          15
924 #define ICLS_GHOST        16
925 #define ICLS_DESKTOP      17
926 #define ICLS_DIALOG       18
927 #define ICLS_MENU         19
928 #define ICLS_SWITCH       20
929 #define ICLS_ICONTITLE    21
930 #define ICLS_TOOLTIPS     22
931 #if (_WIN32_WINNT <= 0x0501)
932 #define ICLS_UNKNOWN      22
933 #define ICLS_NOTUSED      23
934 #else
935 #define ICLS_SYSSHADOW    23
936 #define ICLS_HWNDMESSAGE  24
937 #define ICLS_NOTUSED      25
938 #endif
939 #define ICLS_END          31
940 
941 #define COLOR_LAST COLOR_MENUBAR
942 #define MAX_MB_STRINGS 11
943 
944 #define SRVINFO_DBCSENABLED 0x0002
945 #define SRVINFO_IMM32       0x0004
946 #define SRVINFO_APIHOOK     0x0010
947 #define SRVINFO_CICERO_ENABLED 0x0020
948 #define SRVINFO_KBDPREF     0x0080
949 
950 #define NUM_SYSCOLORS 31
951 
952 typedef struct tagOEMBITMAPINFO
953 {
954     INT x;
955     INT y;
956     INT cx;
957     INT cy;
958 } OEMBITMAPINFO, *POEMBITMAPINFO;
959 
960 typedef enum _OBI_TYPES
961 {
962     OBI_CLOSE = 0,
963     OBI_UPARROW = 46,
964     OBI_UPARROWI = 49,
965     OBI_DNARROW = 50,
966     OBI_DNARROWI = 53,
967     OBI_MNARROW = 62,
968     OBI_CTYPES = 93
969 } OBI_TYPES;
970 
971 typedef struct tagMBSTRING
972 {
973     WCHAR szName[16];
974     UINT uID;
975     UINT uStr;
976 } MBSTRING, *PMBSTRING;
977 
978 typedef struct tagDPISERVERINFO
979 {
980     INT gclBorder;      /* 000 */
981     HFONT hCaptionFont; /* 004 */
982     HFONT hMsgFont;     /* 008 */
983     INT cxMsgFontChar;  /* 00C */
984     INT cyMsgFontChar;  /* 010 */
985     UINT wMaxBtnSize;   /* 014 */
986 } DPISERVERINFO, *PDPISERVERINFO;
987 
988 /* PUSIFlags: */
989 #define PUSIF_PALETTEDISPLAY         0x01
990 #define PUSIF_SNAPTO                 0x02
991 #define PUSIF_COMBOBOXANIMATION      0x04
992 #define PUSIF_LISTBOXSMOOTHSCROLLING 0x08
993 #define PUSIF_KEYBOARDCUES           0x20
994 
995 /*
996  * PERUSERSERVERINFO structure.
997  * See also: https://reactos.org/wiki/Techwiki:Win32k/SERVERINFO
998  */
999 typedef struct _PERUSERSERVERINFO
1000 {
1001     INT aiSysMet[SM_CMETRICS];
1002     ULONG argbSystemUnmatched[NUM_SYSCOLORS];
1003     COLORREF argbSystem[NUM_SYSCOLORS];
1004     HBRUSH ahbrSystem[NUM_SYSCOLORS];
1005     HBRUSH hbrGray;
1006     POINT ptCursor;
1007     POINT ptCursorReal;
1008     DWORD dwLastRITEventTickCount;
1009     INT nEvents;
1010     UINT dtScroll;
1011     UINT dtLBSearch;
1012     UINT dtCaretBlink;
1013     UINT ucWheelScrollLines;
1014     UINT ucWheelScrollChars;
1015     INT wMaxLeftOverlapChars;
1016     INT wMaxRightOverlapChars;
1017     INT cxSysFontChar;
1018     INT cySysFontChar;
1019     TEXTMETRICW tmSysFont;
1020     DPISERVERINFO dpiSystem;
1021     HICON hIconSmWindows;
1022     HICON hIconWindows;
1023     DWORD dwKeyCache;
1024     DWORD dwAsyncKeyCache;
1025     ULONG cCaptures;
1026     OEMBITMAPINFO oembmi[OBI_CTYPES];
1027     RECT rcScreenReal;
1028     USHORT BitCount;
1029     USHORT dmLogPixels;
1030     BYTE Planes;
1031     BYTE BitsPixel;
1032     ULONG PUSIFlags;
1033     UINT uCaretWidth;
1034     USHORT UILangID;
1035     DWORD dwLastSystemRITEventTickCountUpdate;
1036     ULONG adwDBGTAGFlags[35];
1037     DWORD dwTagCount;
1038     DWORD dwRIPFlags;
1039 } PERUSERSERVERINFO, *PPERUSERSERVERINFO;
1040 
1041 /*
1042  * SERVERINFO structure.
1043  * See also: https://reactos.org/wiki/Techwiki:Win32k/SERVERINFO
1044  */
1045 typedef struct tagSERVERINFO
1046 {
1047     DWORD dwSRVIFlags;
1048     ULONG_PTR cHandleEntries;
1049     PFN_FNID mpFnidPfn[FNID_NUM];
1050     WNDPROC aStoCidPfn[FNID_NUMSERVERPROC];
1051     USHORT mpFnid_serverCBWndProc[FNID_NUM];
1052     PFNCLIENT apfnClientA;
1053     PFNCLIENT apfnClientW;
1054     PFNCLIENTWORKER apfnClientWorker;
1055     ULONG cbHandleTable;
1056     ATOM atomSysClass[ICLS_NOTUSED+1];
1057     DWORD dwDefaultHeapBase;
1058     DWORD dwDefaultHeapSize;
1059     UINT uiShellMsg;
1060     MBSTRING MBStrings[MAX_MB_STRINGS];
1061     ATOM atomIconSmProp;
1062     ATOM atomIconProp;
1063     ATOM atomContextHelpIdProp;
1064     ATOM atomFrostedWindowProp;
1065     CHAR acOemToAnsi[256];
1066     CHAR acAnsiToOem[256];
1067     DWORD dwInstalledEventHooks;
1068     PERUSERSERVERINFO;
1069 } SERVERINFO, *PSERVERINFO;
1070 
1071 #ifdef _M_IX86
1072 C_ASSERT(sizeof(SERVERINFO) <= PAGE_SIZE);
1073 #endif
1074 
1075 
1076 /* Server event activity bits. */
1077 #define SRV_EVENT_MENU            0x0001
1078 #define SRV_EVENT_END_APPLICATION 0x0002
1079 #define SRV_EVENT_RUNNING         0x0004
1080 #define SRV_EVENT_NAMECHANGE      0x0008
1081 #define SRV_EVENT_VALUECHANGE     0x0010
1082 #define SRV_EVENT_STATECHANGE     0x0020
1083 #define SRV_EVENT_LOCATIONCHANGE  0x0040
1084 #define SRV_EVENT_CREATE          0x8000
1085 
1086 typedef struct _PROPLISTITEM
1087 {
1088     ATOM Atom;
1089     HANDLE Data;
1090 } PROPLISTITEM, *PPROPLISTITEM;
1091 
1092 #define PROPERTY_FLAG_SYSTEM 1
1093 
1094 typedef struct _PROPERTY
1095 {
1096     LIST_ENTRY PropListEntry;
1097     HANDLE Data;
1098     ATOM Atom;
1099     WORD fs;
1100 } PROPERTY, *PPROPERTY;
1101 
1102 typedef struct _BROADCASTPARM
1103 {
1104     DWORD flags;
1105     DWORD recipients;
1106     HDESK hDesk;
1107     HWND hWnd;
1108     LUID luid;
1109 } BROADCASTPARM, *PBROADCASTPARM;
1110 
1111 struct _THREADINFO *GetW32ThreadInfo(VOID);
1112 struct _PROCESSINFO *GetW32ProcessInfo(VOID);
1113 
1114 typedef struct _WNDMSG
1115 {
1116     DWORD maxMsgs;
1117     PINT abMsgs;
1118 } WNDMSG, *PWNDMSG;
1119 
1120 /*
1121  * SHAREDINFO structure.
1122  * See also: https://reactos.org/wiki/Techwiki:Win32k/SHAREDINFO
1123  */
1124 typedef struct _SHAREDINFO
1125 {
1126     PSERVERINFO psi;         /* Global Server Info */
1127     PVOID aheList;           /* Handle Entry List */
1128     PVOID pDispInfo;         /* Global PDISPLAYINFO pointer */
1129     ULONG_PTR ulSharedDelta; /* Shared USER mapped section delta */
1130     WNDMSG awmControl[FNID_NUM];
1131     WNDMSG DefWindowMsgs;
1132     WNDMSG DefWindowSpecMsgs;
1133 } SHAREDINFO, *PSHAREDINFO;
1134 
1135 /* See also the USERSRV_API_CONNECTINFO #define in include/reactos/subsys/win/winmsg.h */
1136 typedef struct _USERCONNECT
1137 {
1138     ULONG ulVersion;
1139     ULONG ulCurrentVersion;
1140     DWORD dwDispatchCount;
1141     SHAREDINFO siClient;
1142 } USERCONNECT, *PUSERCONNECT;
1143 
1144 /* WinNT 5.0 compatible user32 / win32k */
1145 #define USER_VERSION MAKELONG(0x0000, 0x0005)
1146 
1147 #if defined(_M_IX86)
1148 C_ASSERT(sizeof(USERCONNECT) == 0x124);
1149 #endif
1150 
1151 typedef struct tagGETCLIPBDATA
1152 {
1153     UINT uFmtRet;
1154     BOOL fGlobalHandle;
1155     union
1156     {
1157         HANDLE hLocale;
1158         HANDLE hPalette;
1159     };
1160 } GETCLIPBDATA, *PGETCLIPBDATA;
1161 
1162 typedef struct tagSETCLIPBDATA
1163 {
1164     BOOL fGlobalHandle;
1165     BOOL fIncSerialNumber;
1166 } SETCLIPBDATA, *PSETCLIPBDATA;
1167 
1168 /* Used with NtUserSetCursorIconData, last parameter. */
1169 typedef struct tagCURSORDATA
1170 {
1171     LPWSTR lpName;
1172     LPWSTR lpModName;
1173     USHORT rt;
1174     USHORT dummy;
1175     ULONG CURSORF_flags;
1176     SHORT xHotspot;
1177     SHORT yHotspot;
1178     HBITMAP hbmMask;
1179     HBITMAP hbmColor;
1180     HBITMAP hbmAlpha;
1181     RECT rcBounds;
1182     HBITMAP hbmUserAlpha; /* Could be in W7U, not in W2k */
1183     ULONG bpp;
1184     ULONG cx;
1185     ULONG cy;
1186     UINT cpcur;
1187     UINT cicur;
1188     struct tagCURSORDATA *aspcur;
1189     DWORD *aicur;
1190     INT *ajifRate;
1191     UINT iicur;
1192 } CURSORDATA, *PCURSORDATA; /* !dso CURSORDATA */
1193 
1194 /* CURSORF_flags: */
1195 #define CURSORF_FROMRESOURCE 0x0001
1196 #define CURSORF_GLOBAL       0x0002
1197 #define CURSORF_LRSHARED     0x0004
1198 #define CURSORF_ACON         0x0008
1199 #define CURSORF_WOWCLEANUP   0x0010
1200 #define CURSORF_ACONFRAME    0x0040
1201 #define CURSORF_SECRET       0x0080
1202 #define CURSORF_LINKED       0x0100
1203 #define CURSORF_CURRENT      0x0200
1204 
1205 typedef struct tagIMEINFOEX
1206 {
1207     HKL hkl;
1208     IMEINFO ImeInfo;
1209     WCHAR wszUIClass[16];
1210     ULONG fdwInitConvMode;
1211     INT fInitOpen;
1212     INT fLoadFlag;
1213     DWORD dwProdVersion;
1214     DWORD dwImeWinVersion;
1215     WCHAR wszImeDescription[50];
1216     WCHAR wszImeFile[80];
1217     struct
1218     {
1219         INT fSysWow64Only:1;
1220         INT fCUASLayer:1;
1221     };
1222 } IMEINFOEX, *PIMEINFOEX;
1223 
1224 typedef enum IMEINFOEXCLASS
1225 {
1226     ImeInfoExKeyboardLayout,
1227     ImeInfoExKeyboardLayoutTFS,
1228     ImeInfoExImeWindow,
1229     ImeInfoExImeFileName
1230 } IMEINFOEXCLASS;
1231 
1232 #define IS_IME_HKL(hkl) ((((ULONG_PTR)(hkl)) & 0xF0000000) == 0xE0000000)
1233 #define IS_IMM_MODE() (gpsi && (gpsi->dwSRVIFlags & SRVINFO_IMM32))
1234 #define IS_CICERO_MODE() (gpsi && (gpsi->dwSRVIFlags & SRVINFO_CICERO_ENABLED))
1235 #define IS_16BIT_MODE() (GetWin32ClientInfo()->dwTIFlags & TIF_16BIT)
1236 
1237 typedef struct tagIMEUI
1238 {
1239     PWND spwnd;
1240     HIMC hIMC;
1241     HWND hwndIMC;
1242     HKL hKL;
1243     HWND hwndUI;
1244     LONG nCntInIMEProc;
1245     struct {
1246         UINT fShowStatus:1;
1247         UINT fActivate:1;
1248         UINT fDestroy:1;
1249         UINT fDefault:1;
1250         UINT fChildThreadDef:1;
1251         UINT fCtrlShowStatus:1;
1252         UINT fFreeActiveEvent:1;
1253     };
1254     DWORD dwLastStatus;
1255 } IMEUI, *PIMEUI;
1256 
1257 /* Window Extra data container. */
1258 typedef struct _IMEWND
1259 {
1260     WND wnd;
1261     PIMEUI pimeui;
1262 } IMEWND, *PIMEWND;
1263 
1264 typedef struct tagTRANSMSG
1265 {
1266     UINT message;
1267     WPARAM wParam;
1268     LPARAM lParam;
1269 } TRANSMSG, *PTRANSMSG, *LPTRANSMSG;
1270 
1271 typedef struct tagTRANSMSGLIST
1272 {
1273     UINT     uMsgCount;
1274     TRANSMSG TransMsg[ANYSIZE_ARRAY];
1275 } TRANSMSGLIST, *PTRANSMSGLIST, *LPTRANSMSGLIST;
1276 
1277 #define DEFINE_IME_ENTRY(type, name, params, extended) typedef type (WINAPI *FN_##name) params;
1278 #include "imetable.h"
1279 #undef DEFINE_IME_ENTRY
1280 
1281 typedef struct IMEDPI
1282 {
1283     struct IMEDPI *pNext;
1284     HINSTANCE      hInst;
1285     HKL            hKL;
1286     IMEINFO        ImeInfo;
1287     UINT           uCodePage;
1288     WCHAR          szUIClass[16];
1289     DWORD          cLockObj;
1290     DWORD          dwFlags;
1291 #define DEFINE_IME_ENTRY(type, name, params, extended) FN_##name name;
1292 #include "imetable.h"
1293 #undef DEFINE_IME_ENTRY
1294 } IMEDPI, *PIMEDPI;
1295 
1296 #ifndef _WIN64
1297 C_ASSERT(offsetof(IMEDPI, pNext) == 0x0);
1298 C_ASSERT(offsetof(IMEDPI, hInst) == 0x4);
1299 C_ASSERT(offsetof(IMEDPI, hKL) == 0x8);
1300 C_ASSERT(offsetof(IMEDPI, ImeInfo) == 0xc);
1301 C_ASSERT(offsetof(IMEDPI, uCodePage) == 0x28);
1302 C_ASSERT(offsetof(IMEDPI, szUIClass) == 0x2c);
1303 C_ASSERT(offsetof(IMEDPI, cLockObj) == 0x4c);
1304 C_ASSERT(offsetof(IMEDPI, dwFlags) == 0x50);
1305 C_ASSERT(offsetof(IMEDPI, ImeInquire) == 0x54);
1306 C_ASSERT(offsetof(IMEDPI, ImeConversionList) == 0x58);
1307 C_ASSERT(offsetof(IMEDPI, ImeRegisterWord) == 0x5c);
1308 C_ASSERT(offsetof(IMEDPI, ImeUnregisterWord) == 0x60);
1309 C_ASSERT(offsetof(IMEDPI, ImeGetRegisterWordStyle) == 0x64);
1310 C_ASSERT(offsetof(IMEDPI, ImeEnumRegisterWord) == 0x68);
1311 C_ASSERT(offsetof(IMEDPI, ImeConfigure) == 0x6c);
1312 C_ASSERT(offsetof(IMEDPI, ImeDestroy) == 0x70);
1313 C_ASSERT(offsetof(IMEDPI, ImeEscape) == 0x74);
1314 C_ASSERT(offsetof(IMEDPI, ImeProcessKey) == 0x78);
1315 C_ASSERT(offsetof(IMEDPI, ImeSelect) == 0x7c);
1316 C_ASSERT(offsetof(IMEDPI, ImeSetActiveContext) == 0x80);
1317 C_ASSERT(offsetof(IMEDPI, ImeToAsciiEx) == 0x84);
1318 C_ASSERT(offsetof(IMEDPI, NotifyIME) == 0x88);
1319 C_ASSERT(offsetof(IMEDPI, ImeSetCompositionString) == 0x8c);
1320 C_ASSERT(offsetof(IMEDPI, ImeGetImeMenuItems) == 0x90);
1321 C_ASSERT(offsetof(IMEDPI, CtfImeInquireExW) == 0x94);
1322 C_ASSERT(offsetof(IMEDPI, CtfImeSelectEx) == 0x98);
1323 C_ASSERT(offsetof(IMEDPI, CtfImeEscapeEx) == 0x9c);
1324 C_ASSERT(offsetof(IMEDPI, CtfImeGetGuidAtom) == 0xa0);
1325 C_ASSERT(offsetof(IMEDPI, CtfImeIsGuidMapEnable) == 0xa4);
1326 C_ASSERT(sizeof(IMEDPI) == 0xa8);
1327 #endif
1328 
1329 /* flags for IMEDPI.dwFlags */
1330 #define IMEDPI_FLAG_UNLOADED 0x1
1331 #define IMEDPI_FLAG_LOCKED 0x2
1332 
1333 /* unconfirmed */
1334 typedef struct tagCLIENTIMC
1335 {
1336     HANDLE hInputContext;   /* LocalAlloc'ed LHND */
1337     LONG cLockObj;
1338     DWORD dwFlags;
1339     DWORD dwCompatFlags;
1340     RTL_CRITICAL_SECTION cs;
1341     UINT uCodePage;
1342     HKL hKL;
1343     BOOL bUnknown4;
1344 } CLIENTIMC, *PCLIENTIMC;
1345 
1346 #ifndef _WIN64
1347 C_ASSERT(offsetof(CLIENTIMC, hInputContext) == 0x0);
1348 C_ASSERT(offsetof(CLIENTIMC, cLockObj) == 0x4);
1349 C_ASSERT(offsetof(CLIENTIMC, dwFlags) == 0x8);
1350 C_ASSERT(offsetof(CLIENTIMC, dwCompatFlags) == 0xc);
1351 C_ASSERT(offsetof(CLIENTIMC, cs) == 0x10);
1352 C_ASSERT(offsetof(CLIENTIMC, uCodePage) == 0x28);
1353 C_ASSERT(offsetof(CLIENTIMC, hKL) == 0x2c);
1354 C_ASSERT(sizeof(CLIENTIMC) == 0x34);
1355 #endif
1356 
1357 /* flags for CLIENTIMC */
1358 #define CLIENTIMC_WIDE 0x1
1359 #define CLIENTIMC_ACTIVE 0x2
1360 #define CLIENTIMC_UNKNOWN4 0x20
1361 #define CLIENTIMC_DESTROY 0x40
1362 #define CLIENTIMC_DISABLEIME 0x80
1363 #define CLIENTIMC_UNKNOWN2 0x100
1364 
1365 DWORD
1366 NTAPI
1367 NtUserAssociateInputContext(HWND hWnd, HIMC hIMC, DWORD dwFlags);
1368 
1369 NTSTATUS
1370 NTAPI
1371 NtUserBuildHimcList(DWORD dwThreadId, DWORD dwCount, HIMC *phList, LPDWORD pdwCount);
1372 
1373 DWORD
1374 NTAPI
1375 NtUserCalcMenuBar(
1376     HWND   hwnd,
1377     DWORD  x,
1378     DWORD  width,
1379     DWORD  y,
1380     LPRECT prc);
1381 
1382 DWORD
1383 NTAPI
1384 NtUserCheckMenuItem(
1385     HMENU hmenu,
1386     UINT uIDCheckItem,
1387     UINT uCheck);
1388 
1389 DWORD
1390 NTAPI
1391 NtUserCtxDisplayIOCtl(
1392     DWORD dwUnknown1,
1393     DWORD dwUnknown2,
1394     DWORD dwUnknown3);
1395 
1396 DWORD
1397 APIENTRY
1398 NtUserDbgWin32HeapFail(
1399     DWORD Unknown0,
1400     DWORD Unknown1);
1401 
1402 DWORD
1403 APIENTRY
1404 NtUserDbgWin32HeapStat(
1405     DWORD Unknown0,
1406     DWORD Unknown1);
1407 
1408 BOOL
1409 NTAPI
1410 NtUserDeleteMenu(
1411     HMENU hMenu,
1412     UINT uPosition,
1413     UINT uFlags);
1414 
1415 BOOL
1416 NTAPI
1417 NtUserDestroyMenu(
1418     HMENU hMenu);
1419 
1420 DWORD
1421 NTAPI
1422 NtUserDrawMenuBarTemp(
1423     HWND hWnd,
1424     HDC hDC,
1425     PRECT hRect,
1426     HMENU hMenu,
1427     HFONT hFont);
1428 
1429 UINT
1430 NTAPI
1431 NtUserEnableMenuItem(
1432     HMENU hMenu,
1433     UINT uIDEnableItem,
1434     UINT uEnable);
1435 
1436 BOOL
1437 NTAPI
1438 NtUserEndMenu(VOID);
1439 
1440 BOOL
1441 NTAPI
1442 NtUserGetMenuBarInfo(
1443     HWND hwnd,
1444     LONG idObject,
1445     LONG idItem,
1446     PMENUBARINFO pmbi);
1447 
1448 UINT
1449 NTAPI
1450 NtUserGetMenuIndex(
1451     HMENU hMenu,
1452     HMENU hSubMenu);
1453 
1454 BOOL
1455 NTAPI
1456 NtUserGetMenuItemRect(
1457     HWND hWnd,
1458     HMENU hMenu,
1459     UINT uItem,
1460     LPRECT lprcItem);
1461 
1462 HMENU
1463 NTAPI
1464 NtUserGetSystemMenu(
1465     HWND hWnd,
1466     BOOL bRevert);
1467 
1468 BOOL
1469 NTAPI
1470 NtUserHiliteMenuItem(
1471     HWND hWnd,
1472     HMENU hMenu,
1473     UINT uItemHilite,
1474     UINT uHilite);
1475 
1476 int
1477 NTAPI
1478 NtUserMenuItemFromPoint(
1479     HWND hWnd,
1480     HMENU hMenu,
1481     DWORD X,
1482     DWORD Y);
1483 
1484 BOOL
1485 NTAPI
1486 NtUserRemoveMenu(
1487     HMENU hMenu,
1488     UINT uPosition,
1489     UINT uFlags);
1490 
1491 BOOL
1492 NTAPI
1493 NtUserSetMenu(
1494     HWND hWnd,
1495     HMENU hMenu,
1496     BOOL bRepaint);
1497 
1498 BOOL
1499 NTAPI
1500 NtUserSetMenuContextHelpId(
1501     HMENU hmenu,
1502     DWORD dwContextHelpId);
1503 
1504 BOOL
1505 NTAPI
1506 NtUserSetMenuDefaultItem(
1507     HMENU hMenu,
1508     UINT uItem,
1509     UINT fByPos);
1510 
1511 BOOL
1512 NTAPI
1513 NtUserSetMenuFlagRtoL(
1514     HMENU hMenu);
1515 
1516 BOOL
1517 NTAPI
1518 NtUserSetSystemMenu(
1519     HWND hWnd,
1520     HMENU hMenu);
1521 
1522 BOOL
1523 NTAPI
1524 NtUserThunkedMenuInfo(
1525     HMENU hMenu,
1526     LPCMENUINFO lpcmi);
1527 
1528 BOOL
1529 NTAPI
1530 NtUserThunkedMenuItemInfo(
1531     HMENU hMenu,
1532     UINT uItem,
1533     BOOL fByPosition,
1534     BOOL bInsert,
1535     LPMENUITEMINFOW lpmii,
1536     PUNICODE_STRING lpszCaption);
1537 
1538 BOOL
1539 NTAPI
1540 NtUserTrackPopupMenuEx(
1541     HMENU hmenu,
1542     UINT fuFlags,
1543     int x,
1544     int y,
1545     HWND hwnd,
1546     LPTPMPARAMS lptpm);
1547 
1548 HKL
1549 NTAPI
1550 NtUserActivateKeyboardLayout(
1551     HKL hKL,
1552     ULONG Flags);
1553 
1554 DWORD
1555 NTAPI
1556 NtUserAlterWindowStyle(
1557     HWND hWnd,
1558     DWORD Index,
1559     LONG NewValue);
1560 
1561 BOOL
1562 NTAPI
1563 NtUserAttachThreadInput(
1564     IN DWORD idAttach,
1565     IN DWORD idAttachTo,
1566     IN BOOL fAttach);
1567 
1568 HDC NTAPI
1569 NtUserBeginPaint(
1570     HWND hWnd,
1571     PAINTSTRUCT *lPs);
1572 
1573 BOOL
1574 NTAPI
1575 NtUserBitBltSysBmp(
1576     HDC hdc,
1577     INT nXDest,
1578     INT nYDest,
1579     INT nWidth,
1580     INT nHeight,
1581     INT nXSrc,
1582     INT nYSrc,
1583     DWORD dwRop);
1584 
1585 BOOL
1586 NTAPI
1587 NtUserBlockInput(
1588     BOOL BlockIt);
1589 
1590 NTSTATUS
1591 NTAPI
1592 NtUserBuildHwndList(
1593     HDESK hDesktop,
1594     HWND hwndParent,
1595     BOOLEAN bChildren,
1596     ULONG dwThreadId,
1597     ULONG cHwnd,
1598     HWND *phwndList,
1599     ULONG *pcHwndNeeded);
1600 
1601 NTSTATUS
1602 NTAPI
1603 NtUserBuildNameList(
1604     HWINSTA hWinSta,
1605     ULONG dwSize,
1606     PVOID lpBuffer,
1607     PULONG pRequiredSize);
1608 
1609 NTSTATUS
1610 NTAPI
1611 NtUserBuildPropList(
1612     HWND hWnd,
1613     LPVOID Buffer,
1614     DWORD BufferSize,
1615     DWORD *Count);
1616 
1617 /* apfnSimpleCall indices from Windows XP SP 2 */
1618 /* TODO: Check for differences in Windows 2000, 2003 and 2008 */
1619 #define WIN32K_VERSION NTDDI_WINXPSP2 /* FIXME: this should go somewhere else */
1620 
1621 enum SimpleCallRoutines
1622 {
1623     NOPARAM_ROUTINE_CREATEMENU,
1624     NOPARAM_ROUTINE_CREATEMENUPOPUP,
1625 #if (WIN32K_VERSION >= NTDDI_VISTA)
1626     NOPARAM_ROUTINE_ALLOWFOREGNDACTIVATION,
1627     NOPARAM_ROUTINE_MSQCLEARWAKEMASK,
1628     NOPARAM_ROUTINE_CREATESYSTEMTHREADS,
1629     NOPARAM_ROUTINE_DESTROY_CARET,
1630 #endif
1631     NOPARAM_ROUTINE_ENABLEPROCWNDGHSTING,
1632 #if (WIN32K_VERSION < NTDDI_VISTA)
1633     NOPARAM_ROUTINE_MSQCLEARWAKEMASK,
1634     NOPARAM_ROUTINE_ALLOWFOREGNDACTIVATION,
1635     NOPARAM_ROUTINE_DESTROY_CARET,
1636 #endif
1637     NOPARAM_ROUTINE_GETDEVICECHANGEINFO,
1638     NOPARAM_ROUTINE_GETIMESHOWSTATUS,
1639     NOPARAM_ROUTINE_GETINPUTDESKTOP,
1640     NOPARAM_ROUTINE_GETMSESSAGEPOS,
1641 #if (WIN32K_VERSION >= NTDDI_VISTA)
1642     NOPARAM_ROUTINE_HANDLESYSTHRDCREATFAIL,
1643 #else
1644     NOPARAM_ROUTINE_GETREMOTEPROCESSID,
1645 #endif
1646     NOPARAM_ROUTINE_HIDECURSORNOCAPTURE,
1647     NOPARAM_ROUTINE_LOADCURSANDICOS,
1648 #if (WIN32K_VERSION >= NTDDI_VISTA)
1649     NOPARAM_ROUTINE_LOADUSERAPIHOOK,
1650     NOPARAM_ROUTINE_PREPAREFORLOGOFF, /* 0x0f */
1651 #endif
1652     NOPARAM_ROUTINE_RELEASECAPTURE,
1653     NOPARAM_ROUTINE_RESETDBLCLICK,
1654     NOPARAM_ROUTINE_ZAPACTIVEANDFOUS,
1655     NOPARAM_ROUTINE_REMOTECONSHDWSTOP,
1656     NOPARAM_ROUTINE_REMOTEDISCONNECT,
1657     NOPARAM_ROUTINE_REMOTELOGOFF,
1658     NOPARAM_ROUTINE_REMOTENTSECURITY,
1659     NOPARAM_ROUTINE_REMOTESHDWSETUP,
1660     NOPARAM_ROUTINE_REMOTESHDWSTOP,
1661     NOPARAM_ROUTINE_REMOTEPASSTHRUENABLE,
1662     NOPARAM_ROUTINE_REMOTEPASSTHRUDISABLE,
1663     NOPARAM_ROUTINE_REMOTECONNECTSTATE,
1664     NOPARAM_ROUTINE_UPDATEPERUSERIMMENABLING,
1665     NOPARAM_ROUTINE_USERPWRCALLOUTWORKER,
1666 #if (WIN32K_VERSION >= NTDDI_VISTA)
1667     NOPARAM_ROUTINE_WAKERITFORSHTDWN,
1668 #endif
1669     NOPARAM_ROUTINE_INIT_MESSAGE_PUMP,
1670     NOPARAM_ROUTINE_UNINIT_MESSAGE_PUMP,
1671 #if (WIN32K_VERSION < NTDDI_VISTA)
1672     NOPARAM_ROUTINE_LOADUSERAPIHOOK,
1673 #endif
1674     ONEPARAM_ROUTINE_BEGINDEFERWNDPOS,
1675 #if (WIN32K_VERSION >= NTDDI_VISTA)
1676     ONEPARAM_ROUTINE_GETSENDMSGRECVR,
1677 #endif
1678     ONEPARAM_ROUTINE_WINDOWFROMDC,
1679     ONEPARAM_ROUTINE_ALLOWSETFOREGND,
1680     ONEPARAM_ROUTINE_CREATEEMPTYCUROBJECT,
1681 #if (WIN32K_VERSION < NTDDI_VISTA)
1682     ONEPARAM_ROUTINE_CREATESYSTEMTHREADS,
1683 #endif
1684     ONEPARAM_ROUTINE_CSDDEUNINITIALIZE,
1685     ONEPARAM_ROUTINE_DIRECTEDYIELD,
1686     ONEPARAM_ROUTINE_ENUMCLIPBOARDFORMATS,
1687 #if (WIN32K_VERSION < NTDDI_VISTA)
1688     ONEPARAM_ROUTINE_GETCURSORPOS,
1689 #endif
1690     ONEPARAM_ROUTINE_GETINPUTEVENT,
1691     ONEPARAM_ROUTINE_GETKEYBOARDLAYOUT,
1692     ONEPARAM_ROUTINE_GETKEYBOARDTYPE,
1693     ONEPARAM_ROUTINE_GETPROCDEFLAYOUT,
1694     ONEPARAM_ROUTINE_GETQUEUESTATUS,
1695     ONEPARAM_ROUTINE_GETWINSTAINFO,
1696 #if (WIN32K_VERSION < NTDDI_VISTA)
1697     ONEPARAM_ROUTINE_HANDLESYSTHRDCREATFAIL,
1698 #endif
1699     ONEPARAM_ROUTINE_LOCKFOREGNDWINDOW,
1700     ONEPARAM_ROUTINE_LOADFONTS,
1701     ONEPARAM_ROUTINE_MAPDEKTOPOBJECT,
1702     ONEPARAM_ROUTINE_MESSAGEBEEP,
1703     ONEPARAM_ROUTINE_PLAYEVENTSOUND,
1704     ONEPARAM_ROUTINE_POSTQUITMESSAGE,
1705 #if (WIN32K_VERSION < NTDDI_VISTA)
1706     ONEPARAM_ROUTINE_PREPAREFORLOGOFF,
1707 #endif
1708     ONEPARAM_ROUTINE_REALIZEPALETTE,
1709     ONEPARAM_ROUTINE_REGISTERLPK,
1710 #if (WIN32K_VERSION >= NTDDI_VISTA)
1711     ONEPARAM_ROUTINE_REGISTERSYSTEMTHREAD,
1712 #endif
1713     ONEPARAM_ROUTINE_REMOTERECONNECT,
1714     ONEPARAM_ROUTINE_REMOTETHINWIRESTATUS,
1715     ONEPARAM_ROUTINE_RELEASEDC,
1716 #if (WIN32K_VERSION >= NTDDI_VISTA)
1717     ONEPARAM_ROUTINE_REMOTENOTIFY,
1718 #endif
1719     ONEPARAM_ROUTINE_REPLYMESSAGE,
1720     ONEPARAM_ROUTINE_SETCARETBLINKTIME,
1721     ONEPARAM_ROUTINE_SETDBLCLICKTIME,
1722 #if (WIN32K_VERSION < NTDDI_VISTA)
1723     ONEPARAM_ROUTINE_SETIMESHOWSTATUS,
1724 #endif
1725     ONEPARAM_ROUTINE_SETMESSAGEEXTRAINFO,
1726     ONEPARAM_ROUTINE_SETPROCDEFLAYOUT,
1727 #if (WIN32K_VERSION >= NTDDI_VISTA)
1728     ONEPARAM_ROUTINE_SETWATERMARKSTRINGS,
1729 #endif
1730     ONEPARAM_ROUTINE_SHOWCURSOR,
1731     ONEPARAM_ROUTINE_SHOWSTARTGLASS,
1732     ONEPARAM_ROUTINE_SWAPMOUSEBUTTON,
1733     X_ROUTINE_WOWMODULEUNLOAD,
1734 #if (WIN32K_VERSION < NTDDI_VISTA)
1735     X_ROUTINE_REMOTENOTIFY,
1736 #endif
1737     HWND_ROUTINE_DEREGISTERSHELLHOOKWINDOW,
1738     HWND_ROUTINE_DWP_GETENABLEDPOPUP,
1739     HWND_ROUTINE_GETWNDCONTEXTHLPID,
1740     HWND_ROUTINE_REGISTERSHELLHOOKWINDOW,
1741     HWND_ROUTINE_SETMSGBOX,
1742     HWNDOPT_ROUTINE_SETPROGMANWINDOW,
1743     HWNDOPT_ROUTINE_SETTASKMANWINDOW,
1744     HWNDPARAM_ROUTINE_GETCLASSICOCUR,
1745     HWNDPARAM_ROUTINE_CLEARWINDOWSTATE,
1746     HWNDPARAM_ROUTINE_KILLSYSTEMTIMER,
1747     HWNDPARAM_ROUTINE_SETDIALOGPOINTER,
1748     HWNDPARAM_ROUTINE_SETVISIBLE,
1749     HWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID,
1750     HWNDPARAM_ROUTINE_SETWINDOWSTATE,
1751     HWNDLOCK_ROUTINE_WINDOWHASSHADOW, /* correct prefix ? */
1752     HWNDLOCK_ROUTINE_ARRANGEICONICWINDOWS,
1753     HWNDLOCK_ROUTINE_DRAWMENUBAR,
1754     HWNDLOCK_ROUTINE_CHECKIMESHOWSTATUSINTHRD,
1755     HWNDLOCK_ROUTINE_GETSYSMENUHANDLE,
1756     HWNDLOCK_ROUTINE_REDRAWFRAME,
1757     HWNDLOCK_ROUTINE_REDRAWFRAMEANDHOOK,
1758     HWNDLOCK_ROUTINE_SETDLGSYSMENU,
1759     HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOW,
1760     HWNDLOCK_ROUTINE_SETSYSMENU,
1761     HWNDLOCK_ROUTINE_UPDATECKIENTRECT,
1762     HWNDLOCK_ROUTINE_UPDATEWINDOW,
1763     TWOPARAM_ROUTINE_IMESHOWSTATUSCHANGE,
1764     TWOPARAM_ROUTINE_ENABLEWINDOW,
1765     TWOPARAM_ROUTINE_REDRAWTITLE,
1766     TWOPARAM_ROUTINE_SHOWOWNEDPOPUPS,
1767     TWOPARAM_ROUTINE_SWITCHTOTHISWINDOW,
1768     TWOPARAM_ROUTINE_UPDATEWINDOWS,
1769     TWOPARAM_ROUTINE_VALIDATERGN,
1770 #if (WIN32K_VERSION >= NTDDI_VISTA)
1771     TWOPARAM_ROUTINE_CHANGEWNDMSGFILTER,
1772     TWOPARAM_ROUTINE_GETCURSORPOS,
1773 #endif
1774     TWOPARAM_ROUTINE_GETHDEVNAME,
1775     TWOPARAM_ROUTINE_INITANSIOEM,
1776     TWOPARAM_ROUTINE_NLSSENDIMENOTIFY,
1777 #if (WIN32K_VERSION >= NTDDI_VISTA)
1778     TWOPARAM_ROUTINE_REGISTERGHSTWND,
1779 #endif
1780     TWOPARAM_ROUTINE_REGISTERLOGONPROCESS,
1781 #if (WIN32K_VERSION >= NTDDI_VISTA)
1782     TWOPARAM_ROUTINE_REGISTERSBLFROSTWND,
1783 #else
1784     TWOPARAM_ROUTINE_REGISTERSYSTEMTHREAD,
1785 #endif
1786     TWOPARAM_ROUTINE_REGISTERUSERHUNGAPPHANDLERS,
1787     TWOPARAM_ROUTINE_SHADOWCLEANUP,
1788     TWOPARAM_ROUTINE_REMOTESHADOWSTART,
1789     TWOPARAM_ROUTINE_SETCARETPOS,
1790     TWOPARAM_ROUTINE_SETCURSORPOS,
1791 #if (WIN32K_VERSION >= NTDDI_VISTA)
1792     TWOPARAM_ROUTINE_SETPHYSCURSORPOS,
1793 #endif
1794     TWOPARAM_ROUTINE_UNHOOKWINDOWSHOOK,
1795     TWOPARAM_ROUTINE_WOWCLEANUP
1796 };
1797 
1798 DWORD
1799 NTAPI
1800 NtUserCallHwnd(
1801     HWND hWnd,
1802     DWORD Routine);
1803 
1804 BOOL
1805 NTAPI
1806 NtUserCallHwndLock(
1807     HWND hWnd,
1808     DWORD Routine);
1809 
1810 HWND
1811 NTAPI
1812 NtUserCallHwndOpt(
1813     HWND hWnd,
1814     DWORD Routine);
1815 
1816 DWORD
1817 NTAPI
1818 NtUserCallHwndParam(
1819     HWND hWnd,
1820     DWORD_PTR Param,
1821     DWORD Routine);
1822 
1823 DWORD
1824 NTAPI
1825 NtUserCallHwndParamLock(
1826     HWND hWnd,
1827     DWORD_PTR Param,
1828     DWORD Routine);
1829 
1830 BOOL
1831 NTAPI
1832 NtUserCallMsgFilter(
1833     LPMSG msg,
1834     INT code);
1835 
1836 LRESULT
1837 NTAPI
1838 NtUserCallNextHookEx(
1839     int Code,
1840     WPARAM wParam,
1841     LPARAM lParam,
1842     BOOL Ansi);
1843 
1844 DWORD_PTR
1845 NTAPI
1846 NtUserCallNoParam(
1847     DWORD Routine);
1848 
1849 DWORD_PTR
1850 NTAPI
1851 NtUserCallOneParam(
1852     DWORD_PTR Param,
1853     DWORD Routine);
1854 
1855 DWORD_PTR
1856 NTAPI
1857 NtUserCallTwoParam(
1858     DWORD_PTR Param1,
1859     DWORD_PTR Param2,
1860     DWORD Routine);
1861 
1862 BOOL
1863 NTAPI
1864 NtUserChangeClipboardChain(
1865     HWND hWndRemove,
1866     HWND hWndNewNext);
1867 
1868 LONG
1869 NTAPI
1870 NtUserChangeDisplaySettings(
1871     PUNICODE_STRING lpszDeviceName,
1872     LPDEVMODEW lpDevMode,
1873     DWORD dwflags,
1874     LPVOID lParam);
1875 
1876 BOOL
1877 NTAPI
1878 NtUserCheckDesktopByThreadId(
1879     DWORD dwThreadId);
1880 
1881 BOOL
1882 NTAPI
1883 NtUserCheckWindowThreadDesktop(
1884     HWND hwnd,
1885     DWORD dwThreadId,
1886     ULONG ReturnValue);
1887 
1888 DWORD
1889 NTAPI
1890 NtUserCheckImeHotKey(
1891     UINT uVirtualKey,
1892     LPARAM lParam);
1893 
1894 HWND NTAPI
1895 NtUserChildWindowFromPointEx(
1896     HWND Parent,
1897     LONG x,
1898     LONG y,
1899     UINT Flags);
1900 
1901 BOOL
1902 NTAPI
1903 NtUserClipCursor(
1904     RECT *lpRect);
1905 
1906 BOOL
1907 NTAPI
1908 NtUserCloseClipboard(VOID);
1909 
1910 BOOL
1911 NTAPI
1912 NtUserCloseDesktop(
1913     HDESK hDesktop);
1914 
1915 BOOL
1916 NTAPI
1917 NtUserCloseWindowStation(
1918     HWINSTA hWinSta);
1919 
1920 /* Console commands for NtUserConsoleControl */
1921 typedef enum _CONSOLECONTROL
1922 {
1923     ConsoleCtrlDesktopConsoleThread = 0,
1924     GuiConsoleWndClassAtom = 1,
1925     ConsoleMakePalettePublic = 5,
1926     ConsoleAcquireDisplayOwnership,
1927 } CONSOLECONTROL, *PCONSOLECONTROL;
1928 
1929 typedef struct _DESKTOP_CONSOLE_THREAD
1930 {
1931     HDESK DesktopHandle;
1932     ULONG_PTR ThreadId;
1933 } DESKTOP_CONSOLE_THREAD, *PDESKTOP_CONSOLE_THREAD;
1934 
1935 NTSTATUS
1936 APIENTRY
1937 NtUserConsoleControl(
1938     IN CONSOLECONTROL ConsoleCtrl,
1939     IN PVOID ConsoleCtrlInfo,
1940     IN ULONG ConsoleCtrlInfoLength);
1941 
1942 HANDLE
1943 NTAPI
1944 NtUserConvertMemHandle(
1945     PVOID pData,
1946     DWORD cbData);
1947 
1948 ULONG
1949 NTAPI
1950 NtUserCopyAcceleratorTable(
1951     HACCEL Table,
1952     LPACCEL Entries,
1953     ULONG EntriesCount);
1954 
1955 DWORD
1956 NTAPI
1957 NtUserCountClipboardFormats(VOID);
1958 
1959 HACCEL
1960 NTAPI
1961 NtUserCreateAcceleratorTable(
1962     LPACCEL Entries,
1963     ULONG EntriesCount);
1964 
1965 BOOL
1966 NTAPI
1967 NtUserCreateCaret(
1968     HWND hWnd,
1969     HBITMAP hBitmap,
1970     int nWidth,
1971     int nHeight);
1972 
1973 HDESK
1974 NTAPI
1975 NtUserCreateDesktop(
1976     POBJECT_ATTRIBUTES poa,
1977     PUNICODE_STRING lpszDesktopDevice,
1978     LPDEVMODEW lpdmw,
1979     DWORD dwFlags,
1980     ACCESS_MASK dwDesiredAccess);
1981 
1982 HIMC
1983 NTAPI
1984 NtUserCreateInputContext(ULONG_PTR dwClientImcData);
1985 
1986 NTSTATUS
1987 NTAPI
1988 NtUserCreateLocalMemHandle(
1989     HANDLE hMem,
1990     PVOID pData,
1991     DWORD cbData,
1992     DWORD *pcbData);
1993 
1994 HWND
1995 NTAPI
1996 NtUserCreateWindowEx(
1997     DWORD dwExStyle,
1998     PLARGE_STRING plstrClassName,
1999     PLARGE_STRING plstrClsVersion,
2000     PLARGE_STRING plstrWindowName,
2001     DWORD dwStyle,
2002     int x,
2003     int y,
2004     int nWidth,
2005     int nHeight,
2006     HWND hWndParent,
2007     HMENU hMenu,
2008     HINSTANCE hInstance,
2009     LPVOID lpParam,
2010     DWORD dwFlags,
2011     PVOID acbiBuffer);
2012 
2013 HWINSTA
2014 NTAPI
2015 NtUserCreateWindowStation(
2016     POBJECT_ATTRIBUTES ObjectAttributes,
2017     ACCESS_MASK dwDesiredAccess,
2018     DWORD Unknown2,
2019     DWORD Unknown3,
2020     DWORD Unknown4,
2021     DWORD Unknown5,
2022     DWORD Unknown6);
2023 
2024 BOOL
2025 NTAPI
2026 NtUserDdeGetQualityOfService(
2027     IN HWND hwndClient,
2028     IN HWND hWndServer,
2029     OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev);
2030 
2031 DWORD
2032 NTAPI
2033 NtUserDdeInitialize(
2034     DWORD Unknown0,
2035     DWORD Unknown1,
2036     DWORD Unknown2,
2037     DWORD Unknown3,
2038     DWORD Unknown4);
2039 
2040 BOOL
2041 NTAPI
2042 NtUserDdeSetQualityOfService(
2043     IN HWND hwndClient,
2044     IN PSECURITY_QUALITY_OF_SERVICE pqosNew,
2045     OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev);
2046 
2047 HDWP
2048 NTAPI
2049 NtUserDeferWindowPos(
2050     HDWP WinPosInfo,
2051     HWND Wnd,
2052     HWND WndInsertAfter,
2053     int x,
2054     int y,
2055     int cx,
2056     int cy,
2057     UINT Flags);
2058 
2059 BOOL
2060 NTAPI
2061 NtUserDefSetText(
2062     HWND WindowHandle,
2063     PLARGE_STRING WindowText);
2064 
2065 BOOLEAN
2066 NTAPI
2067 NtUserDestroyAcceleratorTable(
2068     HACCEL Table);
2069 
2070 BOOL
2071 NTAPI
2072 NtUserDestroyCursor(
2073   _In_ HANDLE Handle,
2074   _In_ BOOL bForce);
2075 
2076 BOOL
2077 NTAPI
2078 NtUserDestroyInputContext(HIMC hIMC);
2079 
2080 BOOLEAN
2081 NTAPI
2082 NtUserDestroyWindow(
2083     HWND Wnd);
2084 
2085 BOOL
2086 NTAPI
2087 NtUserDisableThreadIme(
2088     DWORD dwThreadID);
2089 
2090 LRESULT
2091 NTAPI
2092 NtUserDispatchMessage(
2093     PMSG pMsg);
2094 
2095 BOOL
2096 NTAPI
2097 NtUserDragDetect(
2098     HWND hWnd,
2099     POINT pt);
2100 
2101 DWORD
2102 NTAPI
2103 NtUserDragObject(
2104     HWND hwnd1,
2105     HWND hwnd2,
2106     UINT u1,
2107     DWORD dw1,
2108     HCURSOR hc1);
2109 
2110 BOOL
2111 NTAPI
2112 NtUserDrawAnimatedRects(
2113     HWND hwnd,
2114     INT idAni,
2115     RECT *lprcFrom,
2116     RECT *lprcTo);
2117 
2118 BOOL
2119 NTAPI
2120 NtUserDrawCaption(
2121     HWND hWnd,
2122     HDC hDc,
2123     LPCRECT lpRc,
2124     UINT uFlags);
2125 
2126 BOOL
2127 NTAPI
2128 NtUserDrawCaptionTemp(
2129     HWND hWnd,
2130     HDC hDC,
2131     LPCRECT lpRc,
2132     HFONT hFont,
2133     HICON hIcon,
2134     const PUNICODE_STRING str,
2135     UINT uFlags);
2136 
2137 /* Used with NtUserDrawIconEx, last parameter. */
2138 typedef struct _DRAWICONEXDATA
2139 {
2140     HBITMAP hbmMask;
2141     HBITMAP hbmColor;
2142     int cx;
2143     int cy;
2144 } DRAWICONEXDATA, *PDRAWICONEXDATA;
2145 
2146 BOOL
2147 NTAPI
2148 NtUserDrawIconEx(
2149     HDC hdc,
2150     int xLeft,
2151     int yTop,
2152     HICON hIcon,
2153     int cxWidth,
2154     int cyWidth,
2155     UINT istepIfAniCur,
2156     HBRUSH hbrFlickerFreeDraw,
2157     UINT diFlags,
2158     BOOL bMetaHDC,
2159     PVOID pDIXData);
2160 
2161 BOOL
2162 NTAPI
2163 NtUserEmptyClipboard(VOID);
2164 
2165 BOOL
2166 NTAPI
2167 NtUserEnableScrollBar(
2168     HWND hWnd,
2169     UINT wSBflags,
2170     UINT wArrows);
2171 
2172 BOOL
2173 NTAPI
2174 NtUserEndDeferWindowPosEx(
2175     HDWP WinPosInfo,
2176     BOOL bAsync);
2177 
2178 BOOL
2179 NTAPI
2180 NtUserEndPaint(
2181     HWND hWnd,
2182     CONST PAINTSTRUCT *lPs);
2183 
2184 BOOL
2185 NTAPI
2186 NtUserEnumDisplayDevices(
2187     PUNICODE_STRING lpDevice, /* device name */
2188     DWORD iDevNum, /* display device */
2189     PDISPLAY_DEVICEW lpDisplayDevice, /* device information */
2190     DWORD dwFlags); /* reserved */
2191 
2192 /*
2193 BOOL
2194 NTAPI
2195 NtUserEnumDisplayMonitors(
2196     HDC hdc,
2197     LPCRECT lprcClip,
2198     MONITORENUMPROC lpfnEnum,
2199     LPARAM dwData);
2200 */
2201 /* FIXME:  The call below is ros-specific and should be rewritten to use the same params as the correct call above. */
2202 INT
2203 NTAPI
2204 NtUserEnumDisplayMonitors(
2205     OPTIONAL IN HDC hDC,
2206     OPTIONAL IN LPCRECT pRect,
2207     OPTIONAL OUT HMONITOR *hMonitorList,
2208     OPTIONAL OUT LPRECT monitorRectList,
2209     OPTIONAL IN DWORD listSize);
2210 
2211 
2212 NTSTATUS
2213 NTAPI
2214 NtUserEnumDisplaySettings(
2215     PUNICODE_STRING lpszDeviceName,
2216     DWORD iModeNum,
2217     LPDEVMODEW lpDevMode, /* FIXME is this correct? */
2218     DWORD dwFlags);
2219 
2220 DWORD
2221 NTAPI
2222 NtUserEvent(
2223     DWORD Unknown0);
2224 
2225 INT
2226 NTAPI
2227 NtUserExcludeUpdateRgn(
2228     HDC hDC,
2229     HWND hWnd);
2230 
2231 BOOL
2232 NTAPI
2233 NtUserFillWindow(
2234     HWND hWndPaint,
2235     HWND hWndPaint1,
2236     HDC hDC,
2237     HBRUSH hBrush);
2238 
2239 HWND
2240 NTAPI
2241 NtUserFindWindowEx(
2242     HWND hwndParent,
2243     HWND hwndChildAfter,
2244     PUNICODE_STRING ucClassName,
2245     PUNICODE_STRING ucWindowName,
2246     DWORD dwUnknown);
2247 
2248 BOOL
2249 NTAPI
2250 NtUserFlashWindowEx(
2251     IN PFLASHWINFO pfwi);
2252 
2253 BOOL
2254 NTAPI
2255 NtUserGetAltTabInfo(
2256     HWND hwnd,
2257     INT iItem,
2258     PALTTABINFO pati,
2259     LPWSTR pszItemText,
2260     UINT cchItemText,
2261     BOOL Ansi);
2262 
2263 HWND
2264 NTAPI
2265 NtUserGetAncestor(
2266     HWND hWnd,
2267     UINT Flags);
2268 
2269 DWORD
2270 NTAPI
2271 NtUserGetAppImeLevel(HWND hWnd);
2272 
2273 SHORT
2274 NTAPI
2275 NtUserGetAsyncKeyState(
2276     INT Key);
2277 
2278 _Success_(return != 0)
2279 _At_(pustrName->Buffer, _Out_z_bytecap_post_bytecount_(pustrName->MaximumLength, return * 2 + 2))
2280 ULONG
2281 APIENTRY
2282 NtUserGetAtomName(
2283     _In_ ATOM atom,
2284     _Inout_ PUNICODE_STRING pustrName);
2285 
2286 UINT
2287 NTAPI
2288 NtUserGetCaretBlinkTime(VOID);
2289 
2290 BOOL
2291 NTAPI
2292 NtUserGetCaretPos(
2293     LPPOINT lpPoint);
2294 
2295 BOOL
2296 NTAPI
2297 NtUserGetClassInfo(
2298     HINSTANCE hInstance,
2299     PUNICODE_STRING ClassName,
2300     LPWNDCLASSEXW wcex,
2301     LPWSTR *ppszMenuName,
2302     BOOL Ansi);
2303 
2304 INT
2305 NTAPI
2306 NtUserGetClassName(
2307     HWND hWnd,
2308     BOOL Real, /* 0 GetClassNameW, 1 RealGetWindowClassA/W */
2309     PUNICODE_STRING ClassName);
2310 
2311 HANDLE
2312 NTAPI
2313 NtUserGetClipboardData(
2314     UINT fmt,
2315     PGETCLIPBDATA pgcd);
2316 
2317 INT
2318 NTAPI
2319 NtUserGetClipboardFormatName(
2320     UINT uFormat,
2321     LPWSTR lpszFormatName,
2322     INT cchMaxCount);
2323 
2324 HWND
2325 NTAPI
2326 NtUserGetClipboardOwner(VOID);
2327 
2328 DWORD
2329 NTAPI
2330 NtUserGetClipboardSequenceNumber(VOID);
2331 
2332 HWND
2333 NTAPI
2334 NtUserGetClipboardViewer(VOID);
2335 
2336 BOOL
2337 NTAPI
2338 NtUserGetClipCursor(
2339     RECT *lpRect);
2340 
2341 BOOL
2342 NTAPI
2343 NtUserGetComboBoxInfo(
2344     HWND hWnd,
2345     PCOMBOBOXINFO pcbi);
2346 
2347 HBRUSH
2348 NTAPI
2349 NtUserGetControlBrush(
2350     HWND hwnd,
2351     HDC  hdc,
2352     UINT ctlType);
2353 
2354 HBRUSH
2355 NTAPI
2356 NtUserGetControlColor(
2357     HWND hwndParent,
2358     HWND hwnd,
2359     HDC hdc,
2360     UINT CtlMsg);
2361 
2362 ULONG_PTR
2363 NTAPI
2364 NtUserGetCPD(
2365     HWND hWnd,
2366     GETCPD Flags,
2367     ULONG_PTR Proc);
2368 
2369 HCURSOR
2370 NTAPI
2371 NtUserGetCursorFrameInfo(
2372     HCURSOR hCursor,
2373     DWORD istep,
2374     INT *rate_jiffies,
2375     DWORD *num_steps);
2376 
2377 BOOL
2378 NTAPI
2379 NtUserGetCursorInfo(
2380     PCURSORINFO pci);
2381 
2382 HDC
2383 NTAPI
2384 NtUserGetDC(
2385     HWND hWnd);
2386 
2387 HDC
2388 NTAPI
2389 NtUserGetDCEx(
2390     HWND hWnd,
2391     HANDLE hRegion,
2392     ULONG Flags);
2393 
2394 UINT
2395 NTAPI
2396 NtUserGetDoubleClickTime(VOID);
2397 
2398 HWND
2399 NTAPI
2400 NtUserGetForegroundWindow(VOID);
2401 
2402 DWORD
2403 NTAPI
2404 NtUserGetGuiResources(
2405     HANDLE hProcess,
2406     DWORD uiFlags);
2407 
2408 BOOL
2409 NTAPI
2410 NtUserGetGUIThreadInfo(
2411     DWORD idThread,
2412     LPGUITHREADINFO lpgui);
2413 
2414 _Success_(return != FALSE)
2415 BOOL
2416 NTAPI
2417 NtUserGetIconInfo(
2418     _In_ HANDLE hCurIcon,
2419     _Out_opt_ PICONINFO IconInfo,
2420     _Inout_opt_ PUNICODE_STRING lpInstName,
2421     _Inout_opt_ PUNICODE_STRING lpResName,
2422     _Out_opt_ LPDWORD pbpp,
2423     _In_ BOOL bInternal);
2424 
2425 BOOL
2426 NTAPI
2427 NtUserGetIconSize(
2428     HANDLE Handle,
2429     UINT istepIfAniCur,
2430     LONG *plcx,
2431     LONG *plcy);
2432 
2433 BOOL
2434 NTAPI
2435 NtUserGetImeHotKey(DWORD dwHotKeyId,
2436                    LPUINT lpuModifiers,
2437                    LPUINT lpuVirtualKey,
2438                    LPHKL lphKL);
2439 
2440 BOOL
2441 NTAPI
2442 NtUserGetImeInfoEx(
2443     PIMEINFOEX pImeInfoEx,
2444     IMEINFOEXCLASS SearchType);
2445 
2446 DWORD
2447 NTAPI
2448 NtUserGetInternalWindowPos(
2449     HWND hwnd,
2450     LPRECT rectWnd,
2451     LPPOINT ptIcon);
2452 
2453 HKL
2454 NTAPI
2455 NtUserGetKeyboardLayout(
2456     DWORD dwThreadid);
2457 
2458 UINT
2459 NTAPI
2460 NtUserGetKeyboardLayoutList(
2461     ULONG nItems,
2462     HKL *pHklBuff);
2463 
2464 BOOL
2465 NTAPI
2466 NtUserGetKeyboardLayoutName(
2467     _Inout_ PUNICODE_STRING pustrName);
2468 
2469 DWORD
2470 NTAPI
2471 NtUserGetKeyboardState(
2472     LPBYTE Unknown0);
2473 
2474 DWORD
2475 NTAPI
2476 NtUserGetKeyboardType(
2477     DWORD TypeFlag);
2478 
2479 DWORD
2480 NTAPI
2481 NtUserGetKeyNameText(
2482     LONG lParam,
2483     LPWSTR lpString,
2484     int nSize);
2485 
2486 SHORT
2487 NTAPI
2488 NtUserGetKeyState(
2489     INT VirtKey);
2490 
2491 BOOL
2492 NTAPI
2493 NtUserGetLayeredWindowAttributes(
2494     HWND hwnd,
2495     COLORREF *pcrKey,
2496     BYTE *pbAlpha,
2497     DWORD *pdwFlags);
2498 
2499 DWORD
2500 NTAPI
2501 NtUserGetListBoxInfo(
2502     HWND hWnd);
2503 
2504 BOOL
2505 APIENTRY
2506 NtUserGetMessage(
2507     PMSG pMsg,
2508     HWND hWnd,
2509     UINT MsgFilterMin,
2510     UINT MsgFilterMax);
2511 
2512 DWORD
2513 NTAPI
2514 NtUserGetMouseMovePointsEx(
2515     UINT cbSize,
2516     LPMOUSEMOVEPOINT lppt,
2517     LPMOUSEMOVEPOINT lpptBuf,
2518     int nBufPoints,
2519     DWORD resolution);
2520 
2521 BOOL
2522 NTAPI
2523 NtUserGetObjectInformation(
2524     HANDLE hObject,
2525     DWORD nIndex,
2526     PVOID pvInformation,
2527     DWORD nLength,
2528     PDWORD nLengthNeeded);
2529 
2530 HWND
2531 NTAPI
2532 NtUserGetOpenClipboardWindow(VOID);
2533 
2534 INT
2535 NTAPI
2536 NtUserGetPriorityClipboardFormat(
2537     UINT *paFormatPriorityList,
2538     INT cFormats);
2539 
2540 HWINSTA
2541 NTAPI
2542 NtUserGetProcessWindowStation(VOID);
2543 
2544 DWORD
2545 NTAPI
2546 NtUserGetRawInputBuffer(
2547     PRAWINPUT pData,
2548     PUINT pcbSize,
2549     UINT cbSizeHeader);
2550 
2551 DWORD
2552 NTAPI
2553 NtUserGetRawInputData(
2554     HRAWINPUT hRawInput,
2555     UINT uiCommand,
2556     LPVOID pData,
2557     PUINT pcbSize,
2558     UINT cbSizeHeader);
2559 
2560 DWORD
2561 NTAPI
2562 NtUserGetRawInputDeviceInfo(
2563     HANDLE hDevice,
2564     UINT uiCommand,
2565     LPVOID pData,
2566     PUINT pcbSize);
2567 
2568 DWORD
2569 NTAPI
2570 NtUserGetRawInputDeviceList(
2571     PRAWINPUTDEVICELIST pRawInputDeviceList,
2572     PUINT puiNumDevices,
2573     UINT cbSize);
2574 
2575 DWORD
2576 NTAPI
2577 NtUserGetRegisteredRawInputDevices(
2578     PRAWINPUTDEVICE pRawInputDevices,
2579     PUINT puiNumDevices,
2580     UINT cbSize);
2581 
2582 BOOL
2583 NTAPI
2584 NtUserGetScrollBarInfo(
2585     HWND hWnd,
2586     LONG idObject,
2587     PSCROLLBARINFO psbi);
2588 
2589 HDESK
2590 NTAPI
2591 NtUserGetThreadDesktop(
2592     DWORD dwThreadId,
2593     HDESK hConsoleDesktop);
2594 
2595 enum ThreadStateRoutines
2596 {
2597     THREADSTATE_FOCUSWINDOW = 0,
2598     THREADSTATE_ACTIVEWINDOW,
2599     THREADSTATE_CAPTUREWINDOW,
2600     THREADSTATE_DEFAULTIMEWINDOW,
2601     THREADSTATE_DEFAULTINPUTCONTEXT,
2602     THREADSTATE_GETINPUTSTATE,
2603     THREADSTATE_GETCURSOR,
2604     THREADSTATE_CHANGEBITS,
2605     THREADSTATE_UPTIMELASTREAD,
2606     THREADSTATE_GETMESSAGEEXTRAINFO,
2607     THREADSTATE_INSENDMESSAGE,
2608     THREADSTATE_GETMESSAGETIME,
2609     THREADSTATE_FOREGROUNDTHREAD,
2610     THREADSTATE_IMECOMPATFLAGS,
2611     THREADSTATE_OLDKEYBOARDLAYOUT,
2612     THREADSTATE_ISWINLOGON,
2613     THREADSTATE_ISWINLOGON2,
2614     THREADSTATE_CHECKCONIME,
2615     THREADSTATE_GETTHREADINFO,
2616     THREADSTATE_PROGMANWINDOW, /* FIXME: Delete this HACK */
2617     THREADSTATE_TASKMANWINDOW, /* FIXME: Delete this HACK */
2618 };
2619 
2620 DWORD_PTR
2621 NTAPI
2622 NtUserGetThreadState(
2623     DWORD Routine);
2624 
2625 BOOLEAN
2626 NTAPI
2627 NtUserGetTitleBarInfo(
2628     HWND hwnd,
2629     PTITLEBARINFO pti);
2630 
2631 BOOL
2632 NTAPI
2633 NtUserGetUpdateRect(
2634     HWND hWnd,
2635     LPRECT lpRect,
2636     BOOL fErase);
2637 
2638 INT
2639 NTAPI
2640 NtUserGetUpdateRgn(
2641     HWND hWnd,
2642     HRGN hRgn,
2643     BOOL bErase);
2644 
2645 HDC
2646 NTAPI
2647 NtUserGetWindowDC(
2648     HWND hWnd);
2649 
2650 BOOL
2651 NTAPI
2652 NtUserGetWindowPlacement(
2653     HWND hWnd,
2654     WINDOWPLACEMENT *lpwndpl);
2655 
2656 PCLS
2657 NTAPI
2658 NtUserGetWOWClass(
2659     HINSTANCE hInstance,
2660     PUNICODE_STRING ClassName);
2661 
2662 DWORD
2663 NTAPI
2664 NtUserHardErrorControl(
2665     DWORD dwUnknown1,
2666     DWORD dwUnknown2,
2667     DWORD dwUnknown3);
2668 
2669 BOOL
2670 NTAPI
2671 NtUserImpersonateDdeClientWindow(
2672     HWND hWndClient,
2673     HWND hWndServer);
2674 
2675 NTSTATUS
2676 NTAPI
2677 NtUserInitialize(
2678     DWORD dwWinVersion,
2679     HANDLE hPowerRequestEvent,
2680     HANDLE hMediaRequestEvent);
2681 
2682 NTSTATUS
2683 NTAPI
2684 NtUserInitializeClientPfnArrays(
2685     PPFNCLIENT pfnClientA,
2686     PPFNCLIENT pfnClientW,
2687     PPFNCLIENTWORKER pfnClientWorker,
2688     HINSTANCE hmodUser);
2689 
2690 DWORD
2691 NTAPI
2692 NtUserInitTask(
2693     DWORD Unknown0,
2694     DWORD Unknown1,
2695     DWORD Unknown2,
2696     DWORD Unknown3,
2697     DWORD Unknown4,
2698     DWORD Unknown5,
2699     DWORD Unknown6,
2700     DWORD Unknown7,
2701     DWORD Unknown8,
2702     DWORD Unknown9,
2703     DWORD Unknown10,
2704     DWORD Unknown11);
2705 
2706 INT
2707 NTAPI
2708 NtUserInternalGetWindowText(
2709     HWND hWnd,
2710     LPWSTR lpString,
2711     INT nMaxCount);
2712 
2713 BOOL
2714 NTAPI
2715 NtUserInvalidateRect(
2716     HWND hWnd,
2717     CONST RECT *lpRect,
2718     BOOL bErase);
2719 
2720 BOOL
2721 NTAPI
2722 NtUserInvalidateRgn(
2723     HWND hWnd,
2724     HRGN hRgn,
2725     BOOL bErase);
2726 
2727 BOOL
2728 NTAPI
2729 NtUserIsClipboardFormatAvailable(
2730     UINT format);
2731 
2732 BOOL
2733 NTAPI
2734 NtUserKillTimer(
2735     HWND hWnd,
2736     UINT_PTR uIDEvent);
2737 
2738 HKL
2739 NTAPI
2740 NtUserLoadKeyboardLayoutEx(
2741     IN HANDLE hFile,
2742     IN DWORD offTable,
2743     IN PVOID pTables,
2744     IN HKL hOldKL,
2745     IN PUNICODE_STRING puszKLID,
2746     IN DWORD dwNewKL,
2747     IN UINT Flags);
2748 
2749 BOOL
2750 NTAPI
2751 NtUserLockWindowStation(
2752     HWINSTA hWindowStation);
2753 
2754 BOOL
2755 NTAPI
2756 NtUserLockWindowUpdate(
2757     HWND hWnd);
2758 
2759 BOOL
2760 NTAPI
2761 NtUserLockWorkStation(VOID);
2762 
2763 UINT
2764 NTAPI
2765 NtUserMapVirtualKeyEx(
2766     UINT keyCode,
2767     UINT transType,
2768     DWORD keyboardId,
2769     HKL dwhkl);
2770 
2771 typedef struct tagDOSENDMESSAGE
2772 {
2773     UINT uFlags;
2774     UINT uTimeout;
2775     ULONG_PTR Result;
2776 }
2777 DOSENDMESSAGE, *PDOSENDMESSAGE;
2778 
2779 BOOL
2780 NTAPI
2781 NtUserMessageCall(
2782     HWND hWnd,
2783     UINT Msg,
2784     WPARAM wParam,
2785     LPARAM lParam,
2786     ULONG_PTR ResultInfo,
2787     DWORD dwType, /* FNID_XX types */
2788     BOOL Ansi);
2789 
2790 DWORD
2791 NTAPI
2792 NtUserMinMaximize(
2793     HWND hWnd,
2794     UINT cmd, /* Wine SW_ commands */
2795     BOOL Hide);
2796 
2797 DWORD
2798 NTAPI
2799 NtUserMNDragLeave(VOID);
2800 
2801 DWORD
2802 NTAPI
2803 NtUserMNDragOver(
2804     DWORD Unknown0,
2805     DWORD Unknown1);
2806 
2807 DWORD
2808 NTAPI
2809 NtUserModifyUserStartupInfoFlags(
2810     DWORD Unknown0,
2811     DWORD Unknown1);
2812 
2813 BOOL
2814 NTAPI
2815 NtUserMoveWindow(
2816     HWND hWnd,
2817     int X,
2818     int Y,
2819     int nWidth,
2820     int nHeight,
2821     BOOL bRepaint
2822 );
2823 
2824 DWORD
2825 NTAPI
2826 NtUserNotifyIMEStatus(HWND hwnd, BOOL fOpen, DWORD dwConversion);
2827 
2828 BOOL
2829 NTAPI
2830 NtUserNotifyProcessCreate(
2831     HANDLE NewProcessId,
2832     HANDLE ParentThreadId,
2833     ULONG dwUnknown,
2834     ULONG CreateFlags);
2835 
2836 VOID
2837 NTAPI
2838 NtUserNotifyWinEvent(
2839     DWORD Event,
2840     HWND hWnd,
2841     LONG idObject,
2842     LONG idChild);
2843 
2844 BOOL
2845 NTAPI
2846 NtUserOpenClipboard(
2847     HWND hWnd,
2848     DWORD Unknown1);
2849 
2850 HDESK
2851 NTAPI
2852 NtUserOpenDesktop(
2853     POBJECT_ATTRIBUTES ObjectAttributes,
2854     DWORD dwFlags,
2855     ACCESS_MASK dwDesiredAccess);
2856 
2857 HDESK
2858 NTAPI
2859 NtUserOpenInputDesktop(
2860     DWORD dwFlags,
2861     BOOL fInherit,
2862     ACCESS_MASK dwDesiredAccess);
2863 
2864 HWINSTA
2865 NTAPI
2866 NtUserOpenWindowStation(
2867     POBJECT_ATTRIBUTES ObjectAttributes,
2868     ACCESS_MASK dwDesiredAccess);
2869 
2870 BOOL
2871 NTAPI
2872 NtUserPaintDesktop(
2873     HDC hDC);
2874 
2875 DWORD
2876 NTAPI
2877 NtUserPaintMenuBar(
2878     HWND hWnd,
2879     HDC hDC,
2880     ULONG left,    // x,
2881     ULONG right,   // width, // Scale the edge thickness, offset?
2882     ULONG top,     // y,
2883     BOOL bActive); // DWORD Flags); DC_ACTIVE or WS_ACTIVECAPTION, by checking WNDS_ACTIVEFRAME and foreground.
2884 
2885 BOOL
2886 APIENTRY
2887 NtUserPeekMessage(
2888     PMSG pMsg,
2889     HWND hWnd,
2890     UINT MsgFilterMin,
2891     UINT MsgFilterMax,
2892     UINT RemoveMsg);
2893 
2894 BOOL
2895 NTAPI
2896 NtUserPostMessage(
2897     HWND hWnd,
2898     UINT Msg,
2899     WPARAM wParam,
2900     LPARAM lParam);
2901 
2902 BOOL
2903 NTAPI
2904 NtUserPostThreadMessage(
2905     DWORD idThread,
2906     UINT Msg,
2907     WPARAM wParam,
2908     LPARAM lParam);
2909 
2910 BOOL
2911 NTAPI
2912 NtUserPrintWindow(
2913     HWND hwnd,
2914     HDC hdcBlt,
2915     UINT nFlags);
2916 
2917 NTSTATUS
2918 NTAPI
2919 NtUserProcessConnect(
2920     IN HANDLE ProcessHandle,
2921     OUT PUSERCONNECT pUserConnect,
2922     IN ULONG Size); /* sizeof(USERCONNECT) */
2923 
2924 NTSTATUS
2925 NTAPI
2926 NtUserQueryInformationThread(
2927     IN HANDLE ThreadHandle,
2928     IN USERTHREADINFOCLASS ThreadInformationClass,
2929     OUT PVOID ThreadInformation,
2930     IN ULONG ThreadInformationLength);
2931 
2932 DWORD_PTR
2933 NTAPI
2934 NtUserQueryInputContext(
2935     HIMC hIMC,
2936     DWORD dwType);
2937 
2938 DWORD
2939 NTAPI
2940 NtUserQuerySendMessage(
2941     DWORD Unknown0);
2942 
2943 DWORD
2944 NTAPI
2945 NtUserQueryUserCounters(
2946     DWORD Unknown0,
2947     DWORD Unknown1,
2948     DWORD Unknown2,
2949     DWORD Unknown3,
2950     DWORD Unknown4);
2951 
2952 #define QUERY_WINDOW_UNIQUE_PROCESS_ID 0x00
2953 #define QUERY_WINDOW_UNIQUE_THREAD_ID  0x01
2954 #define QUERY_WINDOW_ACTIVE            0x02
2955 #define QUERY_WINDOW_FOCUS             0x03
2956 #define QUERY_WINDOW_ISHUNG            0x04
2957 #define QUERY_WINDOW_REAL_ID           0x05
2958 #define QUERY_WINDOW_FOREGROUND        0x06
2959 #define QUERY_WINDOW_DEFAULT_IME       0x07
2960 #define QUERY_WINDOW_DEFAULT_ICONTEXT  0x08
2961 #define QUERY_WINDOW_ACTIVE_IME        0x09
2962 
2963 DWORD_PTR
2964 NTAPI
2965 NtUserQueryWindow(
2966     HWND hWnd,
2967     DWORD Index);
2968 
2969 BOOL
2970 NTAPI
2971 NtUserRealInternalGetMessage(
2972     LPMSG lpMsg,
2973     HWND hWnd,
2974     UINT wMsgFilterMin,
2975     UINT wMsgFilterMax,
2976     UINT wRemoveMsg,
2977     BOOL bGMSG);
2978 
2979 HWND
2980 NTAPI
2981 NtUserRealChildWindowFromPoint(
2982     HWND Parent,
2983     LONG x,
2984     LONG y);
2985 
2986 BOOL
2987 NTAPI
2988 NtUserRealWaitMessageEx(
2989     DWORD dwWakeMask,
2990     UINT uTimeout);
2991 
2992 BOOL
2993 NTAPI
2994 NtUserRedrawWindow(
2995     HWND hWnd,
2996     CONST RECT *lprcUpdate,
2997     HRGN hrgnUpdate,
2998     UINT flags);
2999 
3000 RTL_ATOM
3001 NTAPI
3002 NtUserRegisterClassExWOW(
3003     WNDCLASSEXW* lpwcx,
3004     PUNICODE_STRING pustrClassName,
3005     PUNICODE_STRING pustrCVersion,
3006     PCLSMENUNAME pClassMenuName,
3007     DWORD fnID,
3008     DWORD Flags,
3009     LPDWORD pWow);
3010 
3011 BOOL
3012 NTAPI
3013 NtUserRegisterRawInputDevices(
3014     IN PCRAWINPUTDEVICE pRawInputDevices,
3015     IN UINT uiNumDevices,
3016     IN UINT cbSize);
3017 
3018 BOOL
3019 NTAPI
3020 NtUserRegisterUserApiHook(
3021     PUNICODE_STRING m_dllname1,
3022     PUNICODE_STRING m_funname1,
3023     DWORD dwUnknown3,
3024     DWORD dwUnknown4);
3025 
3026 BOOL
3027 NTAPI
3028 NtUserRegisterHotKey(
3029     HWND hWnd,
3030     int id,
3031     UINT fsModifiers,
3032     UINT vk);
3033 
3034 DWORD
3035 NTAPI
3036 NtUserRegisterTasklist(
3037     DWORD Unknown0);
3038 
3039 UINT
3040 NTAPI
3041 NtUserRegisterWindowMessage(
3042     PUNICODE_STRING MessageName);
3043 
3044 DWORD
3045 NTAPI
3046 NtUserRemoteConnect(
3047     DWORD dwUnknown1,
3048     DWORD dwUnknown2,
3049     DWORD dwUnknown3);
3050 
3051 DWORD
3052 NTAPI
3053 NtUserRemoteRedrawRectangle(
3054     DWORD dwUnknown1,
3055     DWORD dwUnknown2,
3056     DWORD dwUnknown3,
3057     DWORD dwUnknown4);
3058 
3059 DWORD
3060 NTAPI
3061 NtUserRemoteRedrawScreen(VOID);
3062 
3063 DWORD
3064 NTAPI
3065 NtUserRemoteStopScreenUpdates(VOID);
3066 
3067 HANDLE
3068 NTAPI
3069 NtUserRemoveProp(
3070     HWND hWnd,
3071     ATOM Atom);
3072 
3073 HDESK
3074 NTAPI
3075 NtUserResolveDesktop(
3076     IN HANDLE ProcessHandle,
3077     IN PUNICODE_STRING DesktopPath,
3078     IN BOOL bInherit,
3079     OUT HWINSTA* phWinSta);
3080 
3081 DWORD
3082 NTAPI
3083 NtUserResolveDesktopForWOW(
3084     DWORD Unknown0);
3085 
3086 BOOL
3087 NTAPI
3088 NtUserSBGetParms(
3089     HWND hwnd,
3090     int fnBar,
3091     PSBDATA pSBData,
3092     LPSCROLLINFO lpsi);
3093 
3094 BOOL
3095 NTAPI
3096 NtUserScrollDC(
3097     HDC hDC,
3098     int dx,
3099     int dy,
3100     CONST RECT *lprcScroll,
3101     CONST RECT *lprcClip ,
3102     HRGN hrgnUpdate,
3103     LPRECT lprcUpdate);
3104 
3105 DWORD
3106 NTAPI
3107 NtUserScrollWindowEx(
3108     HWND hWnd,
3109     INT dx,
3110     INT dy,
3111     const RECT *rect,
3112     const RECT *clipRect,
3113     HRGN hrgnUpdate,
3114     LPRECT rcUpdate,
3115     UINT flags);
3116 
3117 UINT
3118 NTAPI
3119 NtUserSendInput(
3120     UINT nInputs,
3121     LPINPUT pInput,
3122     INT cbSize);
3123 
3124 HWND
3125 NTAPI
3126 NtUserSetActiveWindow(
3127     HWND Wnd);
3128 
3129 BOOL
3130 NTAPI
3131 NtUserSetAppImeLevel(
3132     HWND hWnd,
3133     DWORD dwLevel);
3134 
3135 HWND
3136 NTAPI
3137 NtUserSetCapture(
3138     HWND Wnd);
3139 
3140 ULONG_PTR
3141 NTAPI
3142 NtUserSetClassLong(
3143     HWND hWnd,
3144     INT Offset,
3145     ULONG_PTR dwNewLong,
3146     BOOL Ansi);
3147 
3148 WORD
3149 NTAPI
3150 NtUserSetClassWord(
3151     HWND hWnd,
3152     INT nIndex,
3153     WORD wNewWord);
3154 
3155 HANDLE
3156 NTAPI
3157 NtUserSetClipboardData(
3158     UINT fmt,
3159     HANDLE hMem,
3160     PSETCLIPBDATA scd);
3161 
3162 HWND
3163 NTAPI
3164 NtUserSetClipboardViewer(
3165     HWND hWndNewViewer);
3166 
3167 HPALETTE
3168 NTAPI
3169 NtUserSelectPalette(
3170     HDC hDC,
3171     HPALETTE hpal,
3172     BOOL ForceBackground);
3173 
3174 DWORD
3175 NTAPI
3176 NtUserSetConsoleReserveKeys(
3177     DWORD Unknown0,
3178     DWORD Unknown1);
3179 
3180 HCURSOR
3181 NTAPI
3182 NtUserSetCursor(
3183     HCURSOR hCursor);
3184 
3185 BOOL
3186 NTAPI
3187 NtUserSetCursorContents(
3188     HANDLE Handle,
3189     PICONINFO IconInfo);
3190 
3191 BOOL
3192 NTAPI
3193 NtUserSetCursorIconData(
3194     _In_ HCURSOR hCursor,
3195     _In_opt_ PUNICODE_STRING pustrModule,
3196     _In_opt_ PUNICODE_STRING puSrcName,
3197     _In_ const CURSORDATA *pCursorData);
3198 
3199 typedef struct _tagFINDEXISTINGCURICONPARAM
3200 {
3201     BOOL bIcon;
3202     LONG cx;
3203     LONG cy;
3204 } FINDEXISTINGCURICONPARAM;
3205 
3206 HICON
3207 NTAPI
3208 NtUserFindExistingCursorIcon(
3209     _In_ PUNICODE_STRING pustrModule,
3210     _In_ PUNICODE_STRING pustrRsrc,
3211     _In_ FINDEXISTINGCURICONPARAM *param);
3212 
3213 LONG_PTR
3214 APIENTRY
3215 NtUserSetClassLongPtr(
3216     VOID);
3217 
3218 DWORD
3219 NTAPI
3220 NtUserSetDbgTag(
3221     DWORD Unknown0,
3222     DWORD Unknown1);
3223 
3224 DWORD
3225 APIENTRY
3226 NtUserSetDbgTagCount(
3227     DWORD Unknown0);
3228 
3229 HWND
3230 NTAPI
3231 NtUserSetFocus(
3232     HWND hWnd);
3233 
3234 BOOL
3235 NTAPI
3236 NtUserSetImeHotKey(
3237     DWORD dwHotKeyId,
3238     UINT uModifiers,
3239     UINT uVirtualKey,
3240     HKL hKL,
3241     DWORD dwAction);
3242 
3243 BOOL
3244 NTAPI
3245 NtUserSetImeInfoEx(
3246     PIMEINFOEX pImeInfoEx);
3247 
3248 BOOL
3249 NTAPI
3250 NtUserSetImeOwnerWindow(HWND hImeWnd, HWND hwndFocus);
3251 
3252 DWORD
3253 NTAPI
3254 NtUserSetInformationProcess(
3255     DWORD dwUnknown1,
3256     DWORD dwUnknown2,
3257     DWORD dwUnknown3,
3258     DWORD dwUnknown4);
3259 
3260 NTSTATUS
3261 NTAPI
3262 NtUserSetInformationThread(
3263     IN HANDLE ThreadHandle,
3264     IN USERTHREADINFOCLASS ThreadInformationClass,
3265     IN PVOID ThreadInformation,
3266     IN ULONG ThreadInformationLength);
3267 
3268 DWORD
3269 NTAPI
3270 NtUserSetInternalWindowPos(
3271     HWND hwnd,
3272     UINT showCmd,
3273     LPRECT rect,
3274     LPPOINT pt);
3275 
3276 BOOL
3277 NTAPI
3278 NtUserSetKeyboardState(
3279     LPBYTE lpKeyState);
3280 
3281 BOOL
3282 NTAPI
3283 NtUserSetLayeredWindowAttributes(
3284     HWND hwnd,
3285     COLORREF crKey,
3286     BYTE bAlpha,
3287     DWORD dwFlags);
3288 
3289 BOOL
3290 NTAPI
3291 NtUserSetLogonNotifyWindow(
3292     HWND hWnd);
3293 
3294 BOOL
3295 NTAPI
3296 NtUserSetObjectInformation(
3297     HANDLE hObject,
3298     DWORD nIndex,
3299     PVOID pvInformation,
3300     DWORD nLength);
3301 
3302 HWND
3303 NTAPI
3304 NtUserSetParent(
3305     HWND hWndChild,
3306     HWND hWndNewParent);
3307 
3308 BOOL
3309 NTAPI
3310 NtUserSetProcessWindowStation(
3311     HWINSTA hWindowStation);
3312 
3313 BOOL
3314 NTAPI
3315 NtUserSetProp(
3316     HWND hWnd,
3317     ATOM Atom,
3318     HANDLE Data);
3319 
3320 DWORD
3321 NTAPI
3322 NtUserSetRipFlags(
3323     DWORD Unknown0);
3324 
3325 DWORD
3326 NTAPI
3327 NtUserSetScrollInfo(
3328     HWND hwnd,
3329     int fnBar,
3330     LPCSCROLLINFO lpsi,
3331     BOOL bRedraw);
3332 
3333 BOOL
3334 NTAPI
3335 NtUserSetShellWindowEx(
3336     HWND hwndShell,
3337     HWND hwndShellListView);
3338 
3339 BOOL
3340 NTAPI
3341 NtUserSetSysColors(
3342     int cElements,
3343     IN CONST INT *lpaElements,
3344     IN CONST COLORREF *lpaRgbValues,
3345     FLONG Flags);
3346 
3347 BOOL
3348 NTAPI
3349 NtUserSetSystemCursor(
3350     HCURSOR hcur,
3351     DWORD id);
3352 
3353 BOOL
3354 NTAPI
3355 NtUserSetThreadDesktop(
3356     HDESK hDesktop);
3357 
3358 DWORD
3359 NTAPI
3360 NtUserSetThreadState(
3361     DWORD Unknown0,
3362     DWORD Unknown1);
3363 
3364 UINT_PTR
3365 NTAPI
3366 NtUserSetSystemTimer(
3367     HWND hWnd,
3368     UINT_PTR nIDEvent,
3369     UINT uElapse,
3370     TIMERPROC lpTimerFunc);
3371 
3372 DWORD
3373 NTAPI
3374 NtUserSetThreadLayoutHandles(HKL hNewKL, HKL hOldKL);
3375 
3376 UINT_PTR
3377 NTAPI
3378 NtUserSetTimer(
3379     HWND hWnd,
3380     UINT_PTR nIDEvent,
3381     UINT uElapse,
3382     TIMERPROC lpTimerFunc);
3383 
3384 BOOL
3385 NTAPI
3386 NtUserSetWindowFNID(
3387     HWND hWnd,
3388     WORD fnID);
3389 
3390 LONG
3391 NTAPI
3392 NtUserSetWindowLong(
3393     HWND hWnd,
3394     DWORD Index,
3395     LONG NewValue,
3396     BOOL Ansi);
3397 
3398 #ifdef _WIN64
3399 LONG_PTR
3400 NTAPI
3401 NtUserSetWindowLongPtr(
3402     HWND hWnd,
3403     DWORD Index,
3404     LONG_PTR NewValue,
3405     BOOL Ansi);
3406 #else
3407 #define NtUserSetWindowLongPtr NtUserSetWindowLong
3408 #endif // _WIN64
3409 
3410 BOOL
3411 NTAPI
3412 NtUserSetWindowPlacement(
3413     HWND hWnd,
3414     WINDOWPLACEMENT *lpwndpl);
3415 
3416 BOOL
3417 NTAPI
3418 NtUserSetWindowPos(
3419     HWND hWnd,
3420     HWND hWndInsertAfter,
3421     int X,
3422     int Y,
3423     int cx,
3424     int cy,
3425     UINT uFlags);
3426 
3427 INT
3428 NTAPI
3429 NtUserSetWindowRgn(
3430     HWND hWnd,
3431     HRGN hRgn,
3432     BOOL bRedraw);
3433 
3434 HHOOK
3435 NTAPI
3436 NtUserSetWindowsHookAW(
3437     int idHook,
3438     HOOKPROC lpfn,
3439     BOOL Ansi);
3440 
3441 HHOOK
3442 NTAPI
3443 NtUserSetWindowsHookEx(
3444     HINSTANCE Mod,
3445     PUNICODE_STRING ModuleName,
3446     DWORD ThreadId,
3447     int HookId,
3448     HOOKPROC HookProc,
3449     BOOL Ansi);
3450 
3451 BOOL
3452 NTAPI
3453 NtUserSetWindowStationUser(
3454     IN HWINSTA hWindowStation,
3455     IN PLUID pluid,
3456     IN PSID psid OPTIONAL,
3457     IN DWORD size);
3458 
3459 WORD
3460 NTAPI
3461 NtUserSetWindowWord(
3462     HWND hWnd,
3463     INT Index,
3464     WORD NewVal);
3465 
3466 HWINEVENTHOOK
3467 NTAPI
3468 NtUserSetWinEventHook(
3469     UINT eventMin,
3470     UINT eventMax,
3471     HMODULE hmodWinEventProc,
3472     PUNICODE_STRING puString,
3473     WINEVENTPROC lpfnWinEventProc,
3474     DWORD idProcess,
3475     DWORD idThread,
3476     UINT dwflags);
3477 
3478 BOOL
3479 NTAPI
3480 NtUserShowCaret(
3481     HWND hWnd);
3482 
3483 BOOL
3484 NTAPI
3485 NtUserHideCaret(
3486     HWND hWnd);
3487 
3488 DWORD
3489 NTAPI
3490 NtUserShowScrollBar(
3491     HWND hWnd,
3492     int wBar,
3493     DWORD bShow);
3494 
3495 BOOL
3496 NTAPI
3497 NtUserShowWindow(
3498     HWND hWnd,
3499     LONG nCmdShow);
3500 
3501 BOOL
3502 NTAPI
3503 NtUserShowWindowAsync(
3504     HWND hWnd,
3505     LONG nCmdShow);
3506 
3507 BOOL
3508 NTAPI
3509 NtUserSoundSentry(VOID);
3510 
3511 BOOL
3512 NTAPI
3513 NtUserSwitchDesktop(
3514     HDESK hDesktop);
3515 
3516 BOOL
3517 NTAPI
3518 NtUserSystemParametersInfo(
3519     UINT uiAction,
3520     UINT uiParam,
3521     PVOID pvParam,
3522     UINT fWinIni);
3523 
3524 DWORD
3525 NTAPI
3526 NtUserTestForInteractiveUser(
3527     DWORD dwUnknown1);
3528 
3529 INT
3530 NTAPI
3531 NtUserToUnicodeEx(
3532     UINT wVirtKey,
3533     UINT wScanCode,
3534     PBYTE lpKeyState,
3535     LPWSTR pwszBuff,
3536     int cchBuff,
3537     UINT wFlags,
3538     HKL dwhkl);
3539 
3540 BOOL
3541 NTAPI
3542 NtUserTrackMouseEvent(
3543     LPTRACKMOUSEEVENT lpEventTrack);
3544 
3545 int
3546 NTAPI
3547 NtUserTranslateAccelerator(
3548     HWND Window,
3549     HACCEL Table,
3550     LPMSG Message);
3551 
3552 BOOL
3553 NTAPI
3554 NtUserTranslateMessage(
3555     LPMSG lpMsg,
3556     UINT flags );
3557 
3558 BOOL
3559 NTAPI
3560 NtUserUnhookWindowsHookEx(
3561     HHOOK Hook);
3562 
3563 BOOL
3564 NTAPI
3565 NtUserUnhookWinEvent(
3566     HWINEVENTHOOK hWinEventHook);
3567 
3568 BOOL
3569 NTAPI
3570 NtUserUnloadKeyboardLayout(
3571     HKL hKl);
3572 
3573 BOOL
3574 NTAPI
3575 NtUserUnlockWindowStation(
3576     HWINSTA hWindowStation);
3577 
3578 BOOL
3579 NTAPI
3580 NtUserUnregisterClass(
3581     PUNICODE_STRING ClassNameOrAtom,
3582     HINSTANCE hInstance,
3583     PCLSMENUNAME pClassMenuName);
3584 
3585 BOOL
3586 NTAPI
3587 NtUserUnregisterHotKey(
3588     HWND hWnd,
3589     int id);
3590 
3591 BOOL
3592 NTAPI
3593 NtUserUnregisterUserApiHook(VOID);
3594 
3595 BOOL
3596 NTAPI
3597 NtUserUpdateInputContext(
3598     HIMC hIMC,
3599     DWORD dwType,
3600     DWORD_PTR dwValue);
3601 
3602 DWORD
3603 NTAPI
3604 NtUserUpdateInstance(
3605     DWORD Unknown0,
3606     DWORD Unknown1,
3607     DWORD Unknown2);
3608 
3609 BOOL
3610 NTAPI
3611 NtUserUpdateLayeredWindow(
3612     HWND hwnd,
3613     HDC hdcDst,
3614     POINT *pptDst,
3615     SIZE *psize,
3616     HDC hdcSrc,
3617     POINT *pptSrc,
3618     COLORREF crKey,
3619     BLENDFUNCTION *pblend,
3620     DWORD dwFlags,
3621     RECT *prcDirty);
3622 
3623 BOOL
3624 NTAPI
3625 NtUserUpdatePerUserSystemParameters(
3626     DWORD dwReserved,
3627     BOOL bEnable);
3628 
3629 BOOL
3630 NTAPI
3631 NtUserUserHandleGrantAccess(
3632     IN HANDLE hUserHandle,
3633     IN HANDLE hJob,
3634     IN BOOL bGrant);
3635 
3636 BOOL
3637 NTAPI
3638 NtUserValidateHandleSecure(
3639     HANDLE hHdl);
3640 
3641 BOOL
3642 NTAPI
3643 NtUserValidateRect(
3644     HWND hWnd,
3645     CONST RECT *lpRect);
3646 
3647 BOOL
3648 APIENTRY
3649 NtUserValidateTimerCallback(
3650     LPARAM lParam);
3651 
3652 DWORD
3653 NTAPI
3654 NtUserVkKeyScanEx(
3655     WCHAR wChar,
3656     HKL KeyboardLayout,
3657     BOOL bUsehHK);
3658 
3659 DWORD
3660 NTAPI
3661 NtUserWaitForInputIdle(
3662     IN HANDLE hProcess,
3663     IN DWORD dwMilliseconds,
3664     IN BOOL bSharedWow); /* Always FALSE */
3665 
3666 DWORD
3667 NTAPI
3668 NtUserWaitForMsgAndEvent(
3669     DWORD Unknown0);
3670 
3671 BOOL
3672 NTAPI
3673 NtUserWaitMessage(VOID);
3674 
3675 DWORD
3676 NTAPI
3677 NtUserWin32PoolAllocationStats(
3678     DWORD Unknown0,
3679     DWORD Unknown1,
3680     DWORD Unknown2,
3681     DWORD Unknown3,
3682     DWORD Unknown4,
3683     DWORD Unknown5);
3684 
3685 HWND
3686 NTAPI
3687 NtUserWindowFromPoint(
3688     LONG X,
3689     LONG Y);
3690 
3691 DWORD
3692 NTAPI
3693 NtUserYieldTask(VOID);
3694 
3695 /* NtUserBad
3696  * ReactOS-specific NtUser calls and their related structures, both which shouldn't exist.
3697  */
3698 
3699 #define NOPARAM_ROUTINE_ISCONSOLEMODE             0xffff0001
3700 #define ONEPARAM_ROUTINE_ENABLEPROCWNDGHSTING     0xfffe000d
3701 #define ONEPARAM_ROUTINE_GETDESKTOPMAPPING        0xfffe000e
3702 #define TWOPARAM_ROUTINE_SETMENUBARHEIGHT         0xfffd0050
3703 #define TWOPARAM_ROUTINE_SETGUITHRDHANDLE         0xfffd0051
3704 #define HWNDLOCK_ROUTINE_SETFOREGROUNDWINDOWMOUSE 0xfffd0052
3705 
3706 #define MSQ_STATE_CAPTURE   0x1
3707 #define MSQ_STATE_ACTIVE    0x2
3708 #define MSQ_STATE_FOCUS     0x3
3709 #define MSQ_STATE_MENUOWNER 0x4
3710 #define MSQ_STATE_MOVESIZE  0x5
3711 #define MSQ_STATE_CARET     0x6
3712 
3713 #define TWOPARAM_ROUTINE_ROS_UPDATEUISTATE   0x1004
3714 #define HWNDPARAM_ROUTINE_ROS_NOTIFYWINEVENT 0x1005
3715 
3716 BOOL
3717 NTAPI
3718 NtUserGetMonitorInfo(
3719     IN HMONITOR hMonitor,
3720     OUT LPMONITORINFO pMonitorInfo);
3721 
3722 /* Should be done in usermode */
3723 
3724 HMONITOR
3725 NTAPI
3726 NtUserMonitorFromPoint(
3727     IN POINT point,
3728     IN DWORD dwFlags);
3729 
3730 HMONITOR
3731 NTAPI
3732 NtUserMonitorFromRect(
3733     IN LPCRECT pRect,
3734     IN DWORD dwFlags);
3735 
3736 HMONITOR
3737 NTAPI
3738 NtUserMonitorFromWindow(
3739     IN HWND hWnd,
3740     IN DWORD dwFlags);
3741 
3742 typedef struct _SETSCROLLBARINFO
3743 {
3744     int nTrackPos;
3745     int reserved;
3746     DWORD rgstate[CCHILDREN_SCROLLBAR + 1];
3747 } SETSCROLLBARINFO, *PSETSCROLLBARINFO;
3748 
3749 BOOL
3750 NTAPI
3751 NtUserSetScrollBarInfo(
3752     HWND hwnd,
3753     LONG idObject,
3754     SETSCROLLBARINFO *info);
3755 
3756 #endif /* __WIN32K_NTUSER_H */
3757 
3758 /* EOF */
3759