X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=reactos%2Finclude%2Freactos%2Fwin32k%2Fntuser.h;h=f07263a6f1d244f3a97673c06691dc7ff256a8d8;hp=2bf1bf24cfe521fead663140242d85c2ea2fbd83;hb=d61b5efe6c6da325ae79fdf6995e761395af6d52;hpb=928ed84e9fa8862ba28ea007f92fbb3d5c9265f4 diff --git a/reactos/include/reactos/win32k/ntuser.h b/reactos/include/reactos/win32k/ntuser.h index 2bf1bf24cfe..f07263a6f1d 100644 --- a/reactos/include/reactos/win32k/ntuser.h +++ b/reactos/include/reactos/win32k/ntuser.h @@ -2,8 +2,24 @@ #define __WIN32K_NTUSER_H typedef struct _PROCESSINFO *PPROCESSINFO; -struct _W32THREADINFO; -struct _WINDOW; +typedef struct _THREADINFO *PTHREADINFO; +struct _DESKTOP; +struct _WND; + +typedef enum _USERTHREADINFOCLASS +{ + UserThreadShutdownInformation, + UserThreadFlags, + UserThreadTaskName, + UserThreadWOWInformation, + UserThreadHungStatus, + UserThreadInitiateShutdown, + UserThreadEndShutdown, + UserThreadUseActiveDesktop, + UserThreadUseDesktop, + UserThreadRestoreDesktop, + UserThreadCsrApiPort, +} USERTHREADINFOCLASS; typedef struct _LARGE_UNICODE_STRING { @@ -35,21 +51,251 @@ VOID NTAPI RtlInitLargeAnsiString(IN OUT PLARGE_ANSI_STRING,IN PCSZ,IN INT); VOID NTAPI RtlInitLargeUnicodeString(IN OUT PLARGE_UNICODE_STRING,IN PCWSTR,IN INT); BOOL NTAPI RtlLargeStringToUnicodeString( PUNICODE_STRING, PLARGE_STRING); -/* FIXME: UserHMGetHandle needs to be updated once the new handle manager is implemented */ -#define UserHMGetHandle(obj) ((obj)->hdr.Handle) +typedef struct _DESKTOPINFO +{ + PVOID pvDesktopBase; + PVOID pvDesktopLimit; + struct _WND *spwnd; + DWORD fsHooks; + struct tagHOOK * aphkStart[16]; + + HWND hTaskManWindow; + HWND hProgmanWindow; + HWND hShellWindow; + + union + { + UINT Dummy; + struct + { + UINT LastInputWasKbd : 1; + }; + }; + + WCHAR szDesktopName[1]; +} DESKTOPINFO, *PDESKTOPINFO; + +#define CTI_INSENDMESSAGE 0x0002 + +typedef struct _CLIENTTHREADINFO +{ + DWORD CTI_flags; + WORD fsChangeBits; + WORD fsWakeBits; + WORD fsWakeBitsJournal; + WORD fsWakeMask; + ULONG tickLastMsgChecked; + DWORD dwcPumpHook; +} CLIENTTHREADINFO, *PCLIENTTHREADINFO; + +typedef struct _HEAD +{ + HANDLE h; + DWORD cLockObj; +} HEAD, *PHEAD; + +typedef struct _THROBJHEAD +{ + HEAD; + PTHREADINFO pti; +} THROBJHEAD, *PTHROBJHEAD; + +typedef struct _THRDESKHEAD +{ + THROBJHEAD; + struct _DESKTOP *rpdesk; + PVOID pSelf; +} THRDESKHEAD, *PTHRDESKHEAD; + +typedef struct _PROCDESKHEAD +{ + HEAD; + DWORD hTaskWow; + struct _DESKTOP *rpdesk; + PVOID pSelf; +} PROCDESKHEAD, *PPROCDESKHEAD; + +typedef struct _PROCMARKHEAD +{ + HEAD; + ULONG hTaskWow; + PPROCESSINFO ppi; +} PROCMARKHEAD, *PPROCMARKHEAD; + +#define UserHMGetHandle(obj) ((obj)->head.h) + +/* Window Client Information structure */ +struct _ETHREAD; + +typedef struct tagHOOK +{ + THRDESKHEAD head; + LIST_ENTRY Chain; /* Hook chain entry */ + struct _ETHREAD* Thread; /* Thread owning the hook */ + int HookId; /* Hook table index */ + HOOKPROC Proc; /* Hook function */ + BOOLEAN Ansi; /* Is it an Ansi hook? */ + ULONG Flags; /* Some internal flags */ + UNICODE_STRING ModuleName; /* Module name for global hooks */ +} HOOK, *PHOOK; + +/* THREADINFO Flags */ +#define TIF_INCLEANUP 0x00000001 +#define TIF_16BIT 0x00000002 +#define TIF_SYSTEMTHREAD 0x00000004 +#define TIF_CSRSSTHREAD 0x00000008 +#define TIF_TRACKRECTVISIBLE 0x00000010 +#define TIF_ALLOWFOREGROUNDACTIVATE 0x00000020 +#define TIF_DONTATTACHQUEUE 0x00000040 +#define TIF_DONTJOURNALATTACH 0x00000080 +#define TIF_WOW64 0x00000100 +#define TIF_INACTIVATEAPPMSG 0x00000200 +#define TIF_SPINNING 0x00000400 +#define TIF_PALETTEAWARE 0x00000800 +#define TIF_SHAREDWOW 0x00001000 +#define TIF_FIRSTIDLE 0x00002000 +#define TIF_WAITFORINPUTIDLE 0x00004000 +#define TIF_MOVESIZETRACKING 0x00008000 +#define TIF_VDMAPP 0x00010000 +#define TIF_DOSEMULATOR 0x00020000 +#define TIF_GLOBALHOOKER 0x00040000 +#define TIF_DELAYEDEVENT 0x00080000 +#define TIF_MSGPOSCHANGED 0x00100000 +#define TIF_SHUTDOWNCOMPLETE 0x00200000 +#define TIF_IGNOREPLAYBACKDELAY 0x00400000 +#define TIF_ALLOWOTHERACCOUNTHOOK 0x00800000 +#define TIF_GUITHREADINITIALIZED 0x02000000 +#define TIF_DISABLEIME 0x04000000 +#define TIF_INGETTEXTLENGTH 0x08000000 +#define TIF_ANSILENGTH 0x10000000 +#define TIF_DISABLEHOOKS 0x20000000 + +typedef struct _CALLBACKWND +{ + HWND hWnd; + PVOID pvWnd; +} CALLBACKWND, *PCALLBACKWND; + +#define CI_TRANSACTION 0x00000001 +#define CI_QUEUEMSG 0x00000002 +#define CI_WOW 0x00000004 +#define CI_INITTHREAD 0x00000008 +#define CI_CURTHPRHOOK 0x00000010 +#define CI_CLASSESREGISTERED 0x00000020 +#define CI_IMMACTIVATE 0x00000040 + +typedef struct _CLIENTINFO +{ + ULONG_PTR CI_flags; + ULONG_PTR cSpins; + DWORD dwExpWinVer; + DWORD dwCompatFlags; + DWORD dwCompatFlags2; + DWORD dwTIFlags; // ThreadInfo TIF_Xxx flags for User space. + PDESKTOPINFO pDeskInfo; + ULONG_PTR ulClientDelta; + PHOOK phkCurrent; + ULONG fsHooks; + CALLBACKWND CallbackWnd; + DWORD dwHookCurrent; + INT cInDDEMLCallback; + PCLIENTTHREADINFO pClientThreadInfo; + ULONG_PTR dwHookData; + DWORD dwKeyCache; + BYTE afKeyState[8]; + DWORD dwAsyncKeyCache; + BYTE afAsyncKeyState[8]; + BYTE afAsyncKeyStateRecentDow[8]; + HKL hKL; + USHORT CodePage; + UCHAR achDbcsCF[2]; + MSG msgDbcsCB; + LPDWORD lpdwRegisteredClasses; + ULONG Win32ClientInfo3[27]; +/* It's just a pointer reference not to be used w the structure in user space. */ + PPROCESSINFO ppi; +} CLIENTINFO, *PCLIENTINFO; + +/* Make sure it fits into the TEB */ +C_ASSERT(sizeof(CLIENTINFO) <= sizeof(((PTEB)0)->Win32ClientInfo)); + +#define GetWin32ClientInfo() ((PCLIENTINFO)(NtCurrentTeb()->Win32ClientInfo)) + +/* Menu Item fType. */ +#define MFT_RTOL 0x6000 + +typedef struct tagITEM +{ + UINT fType; + UINT fState; + UINT wID; + struct tagMENU* spSubMenu; /* Pop-up menu. */ + HANDLE hbmpChecked; + HANDLE hbmpUnchecked; + USHORT* lpstr; /* Item text pointer. */ + ULONG cch; + DWORD_PTR dwItemData; + ULONG xItem; /* Item position. left */ + ULONG yItem; /* " top */ + ULONG cxItem; /* Item Size Width */ + ULONG cyItem; /* " Height */ + ULONG dxTab; /* X position of text after Tab */ + ULONG ulX; /* underline.. start position */ + ULONG ulWidth; /* underline.. width */ + HBITMAP hbmp; /* bitmap */ + INT cxBmp; /* Width Maximum size of the bitmap items in MIIM_BITMAP state */ + INT cyBmp; /* Height " */ +} ITEM, *PITEM; + +typedef struct tagMENULIST +{ + struct tagMENULIST* pNext; + struct tagMENU* pMenu; +} MENULIST, *PMENULIST; + +/* Menu fFlags, upper byte is MNS_X style flags. */ +#define MNF_POPUP 0x0001 +#define MNF_UNDERLINE 0x0004 +#define MNF_INACTIVE 0x0010 +#define MNF_RTOL 0x0020 +#define MNF_DESKTOPMN 0x0040 +#define MNF_SYSDESKMN 0x0080 +#define MNF_SYSSUBMENU 0x0100 + +typedef struct tagMENU +{ + PROCDESKHEAD head; + ULONG fFlags; /* [Style flags | Menu flags] */ + INT iItem; /* nPos of selected item, if -1 not selected. */ + UINT cAlloced; /* Number of allocated items. Inc's of 8 */ + UINT cItems; /* Number of items in the menu */ + ULONG cxMenu; /* Width of the whole menu */ + ULONG cyMenu; /* Height of the whole menu */ + ULONG cxTextAlign; /* Offset of text when items have both bitmaps and text */ + struct _WND *spwndNotify; /* window receiving the messages for ownerdraw */ + PITEM rgItems; /* Array of menu items */ + struct tagMENULIST* pParentMenus; /* If this is SubMenu, list of parents. */ + DWORD dwContextHelpId; + ULONG cyMax; /* max height of the whole menu, 0 is screen height */ + DWORD_PTR dwMenuData; /* application defined value */ + HBRUSH hbrBack; /* brush for menu background */ + INT iTop; /* Current scroll position Top */ + INT iMaxTop; /* Current scroll position Max Top */ + DWORD dwArrowsOn:2; /* Arrows: 0 off, 1 on, 2 to the top, 3 to the bottom. */ +} MENU, *PMENU; typedef struct _REGISTER_SYSCLASS { /* This is a reactos specific class used to initialize the system window classes during user32 initialization */ - UNICODE_STRING ClassName; + PWSTR ClassName; UINT Style; WNDPROC ProcW; - WNDPROC ProcA; UINT ExtraBytes; HICON hCursor; HBRUSH hBrush; - UINT ClassId; + WORD fiId; + WORD iCls; } REGISTER_SYSCLASS, *PREGISTER_SYSCLASS; typedef struct _CLSMENUNAME @@ -59,82 +305,83 @@ typedef struct _CLSMENUNAME PUNICODE_STRING pusMenuName; } CLSMENUNAME, *PCLSMENUNAME; -typedef struct _USER_OBJHDR +typedef struct tagSBDATA { - /* This is the common header for all user handle objects */ - HANDLE Handle; -} USER_OBJHDR, PUSER_OBJHDR; + INT posMin; + INT posMax; + INT page; + INT pos; +} SBDATA, *PSBDATA; -typedef struct _DESKTOPINFO +typedef struct tagSBINFO { - PVOID pvDesktopBase; - PVOID pvDesktopLimit; - - HANDLE hKernelHeap; - ULONG_PTR HeapLimit; - HWND hTaskManWindow; - HWND hProgmanWindow; - HWND hShellWindow; - struct _WINDOW *Wnd; + INT WSBflags; + SBDATA Horz; + SBDATA Vert; +} SBINFO, *PSBINFO; - union - { - UINT Dummy; - struct - { - UINT LastInputWasKbd : 1; - }; - }; - - WCHAR szDesktopName[1]; -} DESKTOPINFO, *PDESKTOPINFO; - -typedef struct _CALLPROC +typedef enum _GETCPD { - USER_OBJHDR hdr; /* FIXME: Move out of the structure once new handle manager is implemented */ - struct _PROCESSINFO *pi; - WNDPROC WndProc; - struct _CALLPROC *Next; - UINT Unicode : 1; -} CALLPROC, *PCALLPROC; - -typedef struct _WINDOWCLASS + UserGetCPDA2U = 0x01, // " Unicode " + UserGetCPDU2A = 0X02, // " Ansi " + UserGetCPDClass = 0X10, + UserGetCPDWindow = 0X20, + UserGetCPDDialog = 0X40, + UserGetCPDWndtoCls = 0X80 +} GETCPD, *PGETCPD; + +typedef struct _CALLPROCDATA { - struct _WINDOWCLASS *Next; - struct _WINDOWCLASS *Clone; - struct _WINDOWCLASS *Base; + PROCDESKHEAD head; + struct _CALLPROCDATA *spcpdNext; + WNDPROC pfnClientPrevious; + GETCPD wType; +} CALLPROCDATA, *PCALLPROCDATA; + +#define CSF_SERVERSIDEPROC 0x0001 +#define CSF_ANSIPROC 0x0002 +#define CSF_WOWDEFERDESTROY 0x0004 +#define CSF_SYSTEMCLASS 0x0008 +#define CSF_WOWCLASS 0x0010 +#define CSF_WOWEXTRA 0x0020 +#define CSF_CACHEDSMICON 0x0040 +#define CSF_WIN40COMPAT 0x0080 + +typedef struct _CLS +{ + struct _CLS *pclsNext; + RTL_ATOM atomClassName; + ATOM atomNVClassName; + DWORD fnid; struct _DESKTOP *rpdeskParent; - RTL_ATOM Atom; - ULONG Windows; - - UINT Style; - WNDPROC WndProc; - union - { - WNDPROC WndProcExtra; - PCALLPROC CallProc; - }; - PCALLPROC CallProcList; - INT ClsExtra; - INT WndExtra; - PVOID Dce; - DWORD fnID; // New ClassId - HINSTANCE hInstance; + PVOID pdce; + DWORD CSF_flags; + PSTR lpszClientAnsiMenuName; // For client use + PWSTR lpszClientUnicodeMenuName; // " " " + PCALLPROCDATA spcpdFirst; + struct _CLS *pclsBase; + struct _CLS *pclsClone; + ULONG cWndReferenceCount; + UINT style; + WNDPROC lpfnWndProc; + INT cbclsExtra; + INT cbwndExtra; + HINSTANCE hModule; HANDLE hIcon; /* FIXME - Use pointer! */ - HANDLE hIconSm; /* FIXME - Use pointer! */ + //PCURSOR spicn; HANDLE hCursor; /* FIXME - Use pointer! */ + //PCURSOR spcur; HBRUSH hbrBackground; - HANDLE hMenu; /* FIXME - Use pointer! */ - PWSTR MenuName; - PSTR AnsiMenuName; - - UINT Destroying : 1; - UINT Unicode : 1; - UINT System : 1; - UINT Global : 1; + PWSTR lpszMenuName; // kernel use + PSTR lpszAnsiClassName; // " + HANDLE hIconSm; /* FIXME - Use pointer! */ + //PCURSOR spicnSm; + + UINT Unicode : 1; // !CSF_ANSIPROC + UINT Global : 1; // CS_GLOBALCLASS or CSF_SERVERSIDEPROC UINT MenuNameIsString : 1; - UINT NotUsed : 27; -} WINDOWCLASS, *PWINDOWCLASS; + UINT NotUsed : 29; +} CLS, *PCLS; // State Flags !Not Implemented! @@ -205,14 +452,16 @@ typedef struct _WINDOWCLASS /* Non SDK ExStyles */ #define WS_EX_MAKEVISIBLEWHENUNGHOSTED 0x00000800 +#define WS_EX_FORCELEGACYRESIZENCMETR 0x00800000 #define WS_EX_UISTATEACTIVE 0x04000000 #define WS_EX_REDIRECTED 0X20000000 #define WS_EX_UISTATEKBACCELHIDDEN 0X40000000 #define WS_EX_UISTATEFOCUSRECTHIDDEN 0X80000000 +#define WS_EX_SETANSICREATOR 0x80000000 // For WNDS_ANSICREATOR /* Non SDK Styles */ -#define WS_MAXIMIZED 0X01000000 -#define WS_MINIMIZED 0X20000000 +#define WS_MAXIMIZED WS_MAXIMIZE +#define WS_MINIMIZED WS_MINIMIZE /* ExStyles2 */ #define WS_EX2_CLIPBOARDLISTENER 0X00000001 @@ -228,17 +477,9 @@ typedef struct _WINDOWCLASS #define WS_EX2_CONSOLEWINDOW 0X00000400 #define WS_EX2_CHILDNOACTIVATE 0X00000800 -typedef struct _WINDOW +typedef struct _WND { - USER_OBJHDR hdr; /* FIXME: Move out of the structure once new handle manager is implemented */ - /* NOTE: This structure is located in the desktop heap and will - eventually replace WINDOW_OBJECT. Right now WINDOW_OBJECT - keeps a reference to this structure until all the information - is moved to this structure */ - struct _PROCESSINFO *pi; /* FIXME: Move to object header some day */ - struct _W32THREADINFO *ti; - struct _DESKTOP *pdesktop; - + THRDESKHEAD head; DWORD state; DWORD state2; /* Extended style. */ @@ -248,49 +489,43 @@ typedef struct _WINDOW /* Handle of the module that created the window. */ HINSTANCE hModule; DWORD fnid; - struct _WINDOW *spwndNext; - struct _WINDOW *spwndPrev; - struct _WINDOW *spwndParent; - struct _WINDOW *spwndChild; - struct _WINDOW *spwndOwner; + struct _WND *spwndNext; + struct _WND *spwndPrev; + struct _WND *spwndParent; + struct _WND *spwndChild; + struct _WND *spwndOwner; RECT rcWindow; RECT rcClient; WNDPROC lpfnWndProc; - union - { - /* Pointer to a call procedure handle */ - PCALLPROC CallProc; - /* Extra Wnd proc (windows of system classes) */ - WNDPROC WndProcExtra; - }; - /* Pointer to the window class. */ - PWINDOWCLASS pcls; + PCLS pcls; HRGN hrgnUpdate; /* Property list head.*/ LIST_ENTRY PropListHead; ULONG PropListItems; - /* Window menu handle or window id */ - UINT IDMenu; + /* Scrollbar info */ + PSBINFO pSBInfo; + /* system menu handle. */ + HMENU SystemMenu; //PMENU spmenuSys; + /* Window menu handle or window id */ + UINT IDMenu; // Use spmenu //PMENU spmenu; - HRGN hrgnClip; + HRGN hrgnClip; + HRGN hrgnNewFrame; /* Window name. */ - UNICODE_STRING strName; + LARGE_UNICODE_STRING strName; /* Size of the extra data associated with the window. */ ULONG cbwndExtra; HWND hWndLastActive; - struct _WINDOW *spwndLastActive; + struct _WND *spwndLastActive; //HIMC hImc; // Input context associated with this window. LONG dwUserData; //PACTIVATION_CONTEXT pActCtx; //PD3DMATRIX pTransForm; - struct _WINDOW *spwndClipboardListener; + struct _WND *spwndClipboardListener; DWORD ExStyle2; - /* Context help id */ - DWORD ContextHelpId; - struct { RECT NormalRect; @@ -298,13 +533,12 @@ typedef struct _WINDOW POINT MaxPos; } InternalPos; - UINT Unicode : 1; // !WNDS_ANSICREATOR ? + UINT Unicode : 1; // !(WNDS_ANSICREATOR|WNDS_ANSIWINDOWPROC) ? /* Indicates whether the window is derived from a system class */ - UINT IsSystem : 1; // System class ? UINT InternalPosInitialized : 1; UINT HideFocus : 1; // WS_EX_UISTATEFOCUSRECTHIDDEN ? UINT HideAccel : 1; // WS_EX_UISTATEKBACCELHIDDEN ? -} WINDOW, *PWINDOW; +} WND, *PWND; typedef struct _PFNCLIENT { @@ -355,8 +589,7 @@ typedef struct _PFNCLIENTWORKER WNDPROC_EX pfnCtfHookProc; } PFNCLIENTWORKER, *PPFNCLIENTWORKER; -struct _WND; -typedef LONG_PTR (NTAPI *PFN_FNID)(struct _WND*, UINT, WPARAM, LPARAM, ULONG_PTR); +typedef LONG_PTR (NTAPI *PFN_FNID)(PWND, UINT, WPARAM, LPARAM, ULONG_PTR); // FNID's for NtUserSetWindowFNID, NtUserMessageCall #define FNID_FIRST 0x029A @@ -365,6 +598,7 @@ typedef LONG_PTR (NTAPI *PFN_FNID)(struct _WND*, UINT, WPARAM, LPARAM, ULONG_PTR #define FNID_MENU 0x029C #define FNID_DESKTOP 0x029D #define FNID_DEFWINDOWPROC 0x029E +#define FNID_MESSAGEWND 0x029F #define FNID_SWITCH 0x02A0 #define FNID_BUTTON 0x02A1 #define FNID_COMBOBOX 0x02A2 @@ -375,26 +609,40 @@ typedef LONG_PTR (NTAPI *PFN_FNID)(struct _WND*, UINT, WPARAM, LPARAM, ULONG_PTR #define FNID_MDICLIENT 0x02A7 #define FNID_STATIC 0x02A8 #define FNID_IME 0x02A9 -#define FNID_CALLWNDPROC 0x02AA -#define FNID_CALLWNDPROCRET 0x02AB -#define FNID_HKINLPCWPEXSTRUCT 0x02AC -#define FNID_HKINLPCWPRETEXSTRUCT 0x02AD -#define FNID_SENDMESSAGE 0x02B0 +#define FNID_GHOST 0x02AA +#define FNID_CALLWNDPROC 0x02AB +#define FNID_CALLWNDPROCRET 0x02AC +#define FNID_HKINLPCWPEXSTRUCT 0x02AD +#define FNID_HKINLPCWPRETEXSTRUCT 0x02AE +#define FNID_MB_DLGPROC 0x02AF +#define FNID_MDIACTIVATEDLGPROC 0x02B0 +#define FNID_SENDMESSAGE 0x02B1 +#define FNID_SENDMESSAGEFF 0x02B2 // Kernel has option to use TimeOut or normal msg send, based on type of msg. -#define FNID_SENDMESSAGEWTOOPTION 0x02B1 -#define FNID_SENDMESSAGETIMEOUT 0x02B2 -#define FNID_BROADCASTSYSTEMMESSAGE 0x02B4 -#define FNID_TOOLTIPS 0x02B5 -#define FNID_UNKNOWN 0x02B6 +#define FNID_SENDMESSAGEWTOOPTION 0x02B3 +#define FNID_SENDMESSAGETIMEOUT 0x02B4 +#define FNID_BROADCASTSYSTEMMESSAGE 0x02B5 +#define FNID_TOOLTIPS 0x02B6 #define FNID_SENDNOTIFYMESSAGE 0x02B7 #define FNID_SENDMESSAGECALLBACK 0x02B8 #define FNID_LAST 0x02B9 #define FNID_NUM FNID_LAST - FNID_FIRST + 1 +#define FNID_NUMSERVERPROC FNID_SWITCH - FNID_FIRST + 1 #define FNID_DDEML 0x2000 // Registers DDEML #define FNID_DESTROY 0x4000 // This is sent when WM_NCDESTROY or in the support routine. // Seen during WM_CREATE on error exit too. +#define FNID_FREED 0x8000 // Window being Freed... + +#define ICLASS_TO_MASK(iCls) (1 << ((iCls))) + +#define GETPFNCLIENTA(fnid)\ + (WNDPROC)(*(((ULONG_PTR *)&gpsi->apfnClientA) + (fnid - FNID_FIRST))) +#define GETPFNCLIENTW(fnid)\ + (WNDPROC)(*(((ULONG_PTR *)&gpsi->apfnClientW) + (fnid - FNID_FIRST))) + +#define GETPFNSERVER(fnid) gpsi->aStoCidPfn[fnid - FNID_FIRST] // ICLS's for NtUserGetClassName FNID to ICLS, NtUserInitializeClientPfnArrays #define ICLS_BUTTON 0 @@ -413,19 +661,19 @@ typedef LONG_PTR (NTAPI *PFN_FNID)(struct _WND*, UINT, WPARAM, LPARAM, ULONG_PTR #define ICLS_DDEMLSERVERA 13 #define ICLS_DDEMLSERVERW 14 #define ICLS_IME 15 -#define ICLS_DESKTOP 16 -#define ICLS_DIALOG 17 -#define ICLS_MENU 18 -#define ICLS_SWITCH 19 -#define ICLS_ICONTITLE 20 -#define ICLS_TOOLTIPS 21 +#define ICLS_GHOST 16 +#define ICLS_DESKTOP 17 +#define ICLS_DIALOG 18 +#define ICLS_MENU 19 +#define ICLS_SWITCH 20 +#define ICLS_ICONTITLE 21 +#define ICLS_TOOLTIPS 22 #if (_WIN32_WINNT <= 0x0501) #define ICLS_UNKNOWN 22 #define ICLS_NOTUSED 23 #else -#define ICLS_SYSSHADOW 22 -#define ICLS_HWNDMESSAGE 23 -#define ICLS_UNKNOWN 24 +#define ICLS_SYSSHADOW 23 +#define ICLS_HWNDMESSAGE 24 #define ICLS_NOTUSED 25 #endif #define ICLS_END 31 @@ -433,6 +681,7 @@ typedef LONG_PTR (NTAPI *PFN_FNID)(struct _WND*, UINT, WPARAM, LPARAM, ULONG_PTR #define COLOR_LAST COLOR_MENUBAR #define MAX_MB_STRINGS 11 +#define SRVINFO_APIHOOK 0x0010 #define SRVINFO_METRICS 0x0020 typedef struct tagOEMBITMAPINFO @@ -507,7 +756,7 @@ typedef struct tagSERVERINFO DWORD dwSRVIFlags; ULONG_PTR cHandleEntries; PFN_FNID mpFnidPfn[FNID_NUM]; - WNDPROC aStoCidPfn[7]; + WNDPROC aStoCidPfn[FNID_NUMSERVERPROC]; USHORT mpFnid_serverCBWndProc[FNID_NUM]; PFNCLIENT apfnClientA; PFNCLIENT apfnClientW; @@ -528,85 +777,6 @@ typedef struct tagSERVERINFO PERUSERSERVERINFO; } SERVERINFO, *PSERVERINFO; -#define CTI_INSENDMESSAGE 0x0002 - -typedef struct _CLIENTTHREADINFO -{ - DWORD CTI_flags; - WORD fsChangeBits; - WORD fsWakeBits; - WORD fsWakeBitsJournal; - WORD fsWakeMask; - LONG timeLastRead; - DWORD dwcPumpHook; -} CLIENTTHREADINFO, *PCLIENTTHREADINFO; - -typedef struct _W32THREADINFO -{ - PPROCESSINFO ppi; /* [KERNEL] */ - PDESKTOPINFO pDeskInfo; - ULONG fsHooks; -} W32THREADINFO, *PW32THREADINFO; - -/* Window Client Information structure */ -struct _ETHREAD; - - -typedef struct tagHOOK -{ - LIST_ENTRY Chain; /* Hook chain entry */ - HHOOK Self; /* user handle for this hook */ - struct _ETHREAD* Thread; /* Thread owning the hook */ - int HookId; /* Hook table index */ - HOOKPROC Proc; /* Hook function */ - BOOLEAN Ansi; /* Is it an Ansi hook? */ - ULONG Flags; /* Some internal flags */ - UNICODE_STRING ModuleName; /* Module name for global hooks */ -} HOOK, *PHOOK; - -typedef struct _CALLBACKWND -{ - HWND hWnd; - PVOID pvWnd; -} CALLBACKWND, *PCALLBACKWND; - -#define CI_CURTHPRHOOK 0x00000010 - -typedef struct _CLIENTINFO -{ - ULONG CI_flags; - ULONG cSpins; - DWORD dwExpWinVer; - DWORD dwCompatFlags; - DWORD dwCompatFlags2; - DWORD dwTIFlags; - PDESKTOPINFO pDeskInfo; - ULONG_PTR ulClientDelta; - PHOOK phkCurrent; - ULONG fsHooks; - CALLBACKWND CallbackWnd; - DWORD dwHookCurrent; - INT cInDDEMLCallback; - PCLIENTTHREADINFO pClientThreadInfo; - ULONG_PTR dwHookData; - DWORD dwKeyCache; - DWORD afKeyState[2]; - DWORD dwAsyncKeyCache; - DWORD afAsyncKeyState[2]; - DWORD afAsyncKeyStateRecentDow[2]; - HKL hKL; - USHORT CodePage; - USHORT achDbcsCF; - MSG msgDbcsCB; - ULONG Win32ClientInfo3[28]; -/* It's just a pointer reference not to be used w the structure in user space. */ - PPROCESSINFO ppi; -} CLIENTINFO, *PCLIENTINFO; - -/* Make sure it fits exactly into the TEB */ -C_ASSERT(sizeof(CLIENTINFO) == FIELD_OFFSET(TEB, glDispatchTable) - FIELD_OFFSET(TEB, Win32ClientInfo)); - -#define GetWin32ClientInfo() ((PCLIENTINFO)(NtCurrentTeb()->Win32ClientInfo)) // Server event activity bits. #define SRV_EVENT_MENU 0x0001 @@ -640,7 +810,7 @@ typedef struct _BROADCASTPARM LUID luid; } BROADCASTPARM, *PBROADCASTPARM; -PW32THREADINFO GetW32ThreadInfo(VOID); +PTHREADINFO GetW32ThreadInfo(VOID); PPROCESSINFO GetW32ProcessInfo(VOID); typedef struct _WNDMSG @@ -683,6 +853,8 @@ typedef struct _USERCONNECT // #define DCX_USESTYLE 0x00010000 #define DCX_KEEPCLIPRGN 0x00040000 +#define DCX_KEEPLAYOUT 0x40000000 +#define DCX_PROCESSOWNED 0x80000000 // // Non SDK Queue message types. @@ -1160,22 +1332,22 @@ NtUserCallNextHookEx( LPARAM lParam, BOOL Ansi); -DWORD +DWORD_PTR NTAPI NtUserCallNoParam( DWORD Routine); -DWORD +DWORD_PTR NTAPI NtUserCallOneParam( - DWORD Param, + DWORD_PTR Param, DWORD Routine); -DWORD +DWORD_PTR NTAPI NtUserCallTwoParam( - DWORD Param1, - DWORD Param2, + DWORD_PTR Param1, + DWORD_PTR Param2, DWORD Routine); BOOL @@ -1300,28 +1472,9 @@ NtUserCreateLocalMemHandle( HWND NTAPI NtUserCreateWindowEx( - DWORD dwExStyle, - PUNICODE_STRING lpClassName, - PUNICODE_STRING lpWindowName, - DWORD dwStyle, - LONG x, - LONG y, - LONG nWidth, - LONG nHeight, - HWND hWndParent, - HMENU hMenu, - HINSTANCE hInstance, - LPVOID lpParam, - DWORD dwShowMode, - BOOL bUnicodeWindow, - DWORD dwUnknown); -#if 0 -HWND -NTAPI -NtUserCreateWindowEx( - DWORD dwExStyle, + DWORD dwExStyle, // |= 0x80000000 == Ansi used to set WNDS_ANSICREATOR PLARGE_STRING plstrClassName, - PLARGE_STRING plstrClsVesrion, + PLARGE_STRING plstrClsVersion, PLARGE_STRING plstrWindowName, DWORD dwStyle, int x, @@ -1334,7 +1487,6 @@ NtUserCreateWindowEx( LPVOID lpParam, DWORD dwFlags, PVOID acbiBuffer); -#endif HWINSTA NTAPI @@ -1371,14 +1523,16 @@ NtUserDdeSetQualityOfService( OUT PSECURITY_QUALITY_OF_SERVICE pqosPrev); HDWP NTAPI -NtUserDeferWindowPos(HDWP WinPosInfo, - HWND Wnd, - HWND WndInsertAfter, - int x, - int y, - int cx, - int cy, - UINT Flags); +NtUserDeferWindowPos( + HDWP WinPosInfo, + HWND Wnd, + HWND WndInsertAfter, + int x, + int y, + int cx, + int cy, + UINT Flags); + BOOL NTAPI NtUserDefSetText(HWND WindowHandle, PLARGE_STRING WindowText); @@ -1452,6 +1606,15 @@ NtUserDrawCaptionTemp( const PUNICODE_STRING str, UINT uFlags); +// Used with NtUserDrawIconEx, last parameter. +typedef struct _DRAWICONEXDATA +{ + HBITMAP hbmMask; + HBITMAP hbmColor; + int cx; + int cy; +} DRAWICONEXDATA, *PDRAWICONEXDATA; + BOOL NTAPI NtUserDrawIconEx( @@ -1464,8 +1627,8 @@ NtUserDrawIconEx( UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags, - DWORD Unknown0, - DWORD Unknown1); + BOOL bMetaHDC, + PVOID pDIXData); DWORD NTAPI @@ -1672,12 +1835,12 @@ NtUserGetControlColor( HDC hdc, UINT CtlMsg); -DWORD +ULONG_PTR NTAPI NtUserGetCPD( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2); + HWND hWnd, + GETCPD Flags, + ULONG_PTR Proc); DWORD NTAPI @@ -1922,7 +2085,7 @@ enum ThreadStateRoutines THREADSTATE_GETINPUTSTATE }; -DWORD +DWORD_PTR NTAPI NtUserGetThreadState( DWORD Routine); @@ -1954,11 +2117,11 @@ NtUserGetWindowPlacement( HWND hWnd, WINDOWPLACEMENT *lpwndpl); -DWORD +PCLS NTAPI NtUserGetWOWClass( - DWORD Unknown0, - DWORD Unknown1); + HINSTANCE hInstance, + PUNICODE_STRING ClassName); DWORD NTAPI @@ -2251,6 +2414,7 @@ NtUserQueryUserCounters( #define QUERY_WINDOW_ACTIVE 0x02 #define QUERY_WINDOW_FOCUS 0x03 #define QUERY_WINDOW_ISHUNG 0x04 +#define QUERY_WINDOW_REAL_ID 0x05 DWORD NTAPI NtUserQueryWindow( @@ -2308,11 +2472,13 @@ NtUserRegisterRawInputDevices( IN UINT uiNumDevices, IN UINT cbSize); -DWORD +BOOL NTAPI NtUserRegisterUserApiHook( - DWORD dwUnknown1, - DWORD dwUnknown2); + PUNICODE_STRING m_dllname1, + PUNICODE_STRING m_funname1, + DWORD dwUnknown3, + DWORD dwUnknown4); BOOL NTAPI @@ -2368,13 +2534,13 @@ NTAPI NtUserResolveDesktopForWOW( DWORD Unknown0); -DWORD +BOOL NTAPI NtUserSBGetParms( - DWORD Unknown0, - DWORD Unknown1, - DWORD Unknown2, - DWORD Unknown3); + HWND hwnd, + int fnBar, + PSBDATA pSBData, + LPSCROLLINFO lpsi); BOOL NTAPI @@ -2510,13 +2676,14 @@ NtUserSetInformationProcess( DWORD dwUnknown3, DWORD dwUnknown4); -DWORD +NTSTATUS NTAPI NtUserSetInformationThread( - DWORD dwUnknown1, - DWORD dwUnknown2, - DWORD dwUnknown3, - DWORD dwUnknown4); + IN HANDLE ThreadHandle, + IN USERTHREADINFOCLASS ThreadInformationClass, + IN PVOID ThreadInformation, + IN ULONG ThreadInformationLength +); DWORD NTAPI @@ -2790,7 +2957,7 @@ BOOL NTAPI NtUserTranslateMessage( LPMSG lpMsg, - HKL dwhkl ); + UINT flags ); BOOL NTAPI @@ -2824,7 +2991,7 @@ NTAPI NtUserUnregisterHotKey(HWND hWnd, int id); -DWORD +BOOL NTAPI NtUserUnregisterUserApiHook(VOID); @@ -2951,8 +3118,8 @@ typedef struct tagKMDDELPARAM { struct { - UINT uiLo; - UINT uiHi; + UINT_PTR uiLo; + UINT_PTR uiHi; } Packed; LPARAM Unpacked; } Value; @@ -2968,25 +3135,16 @@ typedef struct tagKMDDELPARAM #define NOPARAM_ROUTINE_GETMESSAGEEXTRAINFO 0xffff0005 #define NOPARAM_ROUTINE_ANYPOPUP 0xffff0006 -#define NOPARAM_ROUTINE_CSRSS_INITIALIZED 0xffff0007 #define ONEPARAM_ROUTINE_CSRSS_GUICHECK 0xffff0008 -#define ONEPARAM_ROUTINE_GETMENU 0xfffe0001 // usermode -#define ONEPARAM_ROUTINE_ISWINDOWUNICODE 0xfffe0002 -#define ONEPARAM_ROUTINE_GETCARETINFO 0xfffe0007 #define ONEPARAM_ROUTINE_SWITCHCARETSHOWING 0xfffe0008 #define ONEPARAM_ROUTINE_ISWINDOWINDESTROY 0xfffe000c #define ONEPARAM_ROUTINE_ENABLEPROCWNDGHSTING 0xfffe000d #define ONEPARAM_ROUTINE_GETDESKTOPMAPPING 0xfffe000e -#define ONEPARAM_ROUTINE_GETWINDOWINSTANCE 0xfffe0010 -#define ONEPARAM_ROUTINE_CREATECURICONHANDLE 0xfffe0025 // CREATE_EMPTY_CURSOR_OBJECT ? #define ONEPARAM_ROUTINE_MSQSETWAKEMASK 0xfffe0027 -#define ONEPARAM_ROUTINE_REGISTERUSERMODULE 0xfffe0031 -#define ONEPARAM_ROUTINE_GETWNDCONTEXTHLPID 0xfffe0047 // use HWND_ROUTINE_GETWNDCONTEXTHLPID #define ONEPARAM_ROUTINE_GETCURSORPOSITION 0xfffe0048 // use ONEPARAM_ or TWOPARAM routine ? #define TWOPARAM_ROUTINE_GETWINDOWRGNBOX 0xfffd0048 // user mode #define TWOPARAM_ROUTINE_GETWINDOWRGN 0xfffd0049 // user mode #define TWOPARAM_ROUTINE_SETMENUBARHEIGHT 0xfffd0050 -#define TWOPARAM_ROUTINE_SETMENUITEMRECT 0xfffd0051 #define TWOPARAM_ROUTINE_SETGUITHRDHANDLE 0xfffd0052 #define MSQ_STATE_CAPTURE 0x1 #define MSQ_STATE_ACTIVE 0x2 @@ -2994,13 +3152,8 @@ typedef struct tagKMDDELPARAM #define MSQ_STATE_MENUOWNER 0x4 #define MSQ_STATE_MOVESIZE 0x5 #define MSQ_STATE_CARET 0x6 -#define TWOPARAM_ROUTINE_SETWNDCONTEXTHLPID 0xfffd0058 // use HWNDPARAM_ROUTINE_SETWNDCONTEXTHLPID #define TWOPARAM_ROUTINE_SETCARETPOS 0xfffd0060 -#define TWOPARAM_ROUTINE_GETWINDOWINFO 0xfffd0061 #define TWOPARAM_ROUTINE_REGISTERLOGONPROC 0xfffd0062 -#define TWOPARAM_ROUTINE_ROS_ISACTIVEICON 0x1001 -#define TWOPARAM_ROUTINE_ROS_NCDESTROY 0x1002 -#define TWOPARAM_ROUTINE_ROS_REGSYSCLASSES 0x1003 #define TWOPARAM_ROUTINE_ROS_UPDATEUISTATE 0x1004 DWORD @@ -3011,15 +3164,8 @@ NtUserBuildMenuItemList( ULONG nBufSize, DWORD Reserved); -/* Use ONEPARAM_ROUTINE_CREATEEMPTYCURSOROBJECT (0x21) ? */ -HANDLE -NTAPI -NtUserCreateCursorIconHandle( - PICONINFO IconInfo, - BOOL Indirect); - -/* Should be done in usermode */ +/* Should be done in usermode and use NtUserGetCPD. */ ULONG_PTR NTAPI NtUserGetClassLong(HWND hWnd, INT Offset, BOOL Ansi); @@ -3050,22 +3196,6 @@ NtUserGetMonitorInfo( OUT LPMONITORINFO pMonitorInfo); /* Should be done in usermode */ -BOOL -NTAPI -NtUserGetScrollInfo( - HWND hwnd, - int fnBar, - LPSCROLLINFO lpsi); - -HWND -NTAPI -NtUserGetWindow(HWND hWnd, UINT Relationship); - -/* Should be done in usermode */ -LONG -NTAPI -NtUserGetWindowLong(HWND hWnd, DWORD Index, BOOL Ansi); - /* (other FocusedItem values give the position of the focused item) */ #define NO_SELECTED_ITEM 0xffff @@ -3120,8 +3250,8 @@ typedef struct tagROSMENUITEMINFO HBITMAP hbmpItem; /* ----------- Extra ----------- */ RECT Rect; /* Item area (relative to menu window) */ - UINT XTab; /* X position of text after Tab */ - LPWSTR Text; /* Copy of the text pointer in MenuItem->Text */ + UINT dxTab; /* X position of text after Tab */ + LPWSTR lpstr; /* Copy of the text pointer in MenuItem->Text */ } ROSMENUITEMINFO, *PROSMENUITEMINFO; BOOL @@ -3153,22 +3283,6 @@ NtUserMonitorFromWindow( IN DWORD dwFlags); -/* FIXME: These flag constans aren't what Windows uses. */ -#define REGISTERCLASS_ANSI 2 -#define REGISTERCLASS_ALL (REGISTERCLASS_ANSI) - -RTL_ATOM -NTAPI -NtUserRegisterClassEx( // Need to use NtUserRegisterClassExWOW. - CONST WNDCLASSEXW* lpwcx, - PUNICODE_STRING ClassName, - PUNICODE_STRING MenuName, - WNDPROC wpExtra, - DWORD Flags, - HMENU hMenu); - - - typedef struct tagNTUSERSENDMESSAGEINFO { BOOL HandledByKernel;