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