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