#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
{
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
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!
/* 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
#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. */
/* 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;
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
{
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
#define FNID_MENU 0x029C
#define FNID_DESKTOP 0x029D
#define FNID_DEFWINDOWPROC 0x029E
+#define FNID_MESSAGEWND 0x029F
#define FNID_SWITCH 0x02A0
#define FNID_BUTTON 0x02A1
#define FNID_COMBOBOX 0x02A2
#define FNID_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
#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
#define COLOR_LAST COLOR_MENUBAR
#define MAX_MB_STRINGS 11
+#define SRVINFO_APIHOOK 0x0010
#define SRVINFO_METRICS 0x0020
typedef struct tagOEMBITMAPINFO
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;
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
LUID luid;
} BROADCASTPARM, *PBROADCASTPARM;
-PW32THREADINFO GetW32ThreadInfo(VOID);
+PTHREADINFO GetW32ThreadInfo(VOID);
PPROCESSINFO GetW32ProcessInfo(VOID);
typedef struct _WNDMSG
//
#define DCX_USESTYLE 0x00010000
#define DCX_KEEPCLIPRGN 0x00040000
+#define DCX_KEEPLAYOUT 0x40000000
+#define DCX_PROCESSOWNED 0x80000000
//
// Non SDK Queue message types.
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
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,
LPVOID lpParam,
DWORD dwFlags,
PVOID acbiBuffer);
-#endif
HWINSTA
NTAPI
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);
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(
UINT istepIfAniCur,
HBRUSH hbrFlickerFreeDraw,
UINT diFlags,
- DWORD Unknown0,
- DWORD Unknown1);
+ BOOL bMetaHDC,
+ PVOID pDIXData);
DWORD
NTAPI
HDC hdc,
UINT CtlMsg);
-DWORD
+ULONG_PTR
NTAPI
NtUserGetCPD(
- DWORD Unknown0,
- DWORD Unknown1,
- DWORD Unknown2);
+ HWND hWnd,
+ GETCPD Flags,
+ ULONG_PTR Proc);
DWORD
NTAPI
THREADSTATE_GETINPUTSTATE
};
-DWORD
+DWORD_PTR
NTAPI
NtUserGetThreadState(
DWORD Routine);
HWND hWnd,
WINDOWPLACEMENT *lpwndpl);
-DWORD
+PCLS
NTAPI
NtUserGetWOWClass(
- DWORD Unknown0,
- DWORD Unknown1);
+ HINSTANCE hInstance,
+ PUNICODE_STRING ClassName);
DWORD
NTAPI
#define QUERY_WINDOW_ACTIVE 0x02
#define QUERY_WINDOW_FOCUS 0x03
#define QUERY_WINDOW_ISHUNG 0x04
+#define QUERY_WINDOW_REAL_ID 0x05
DWORD
NTAPI
NtUserQueryWindow(
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
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
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
NTAPI
NtUserTranslateMessage(
LPMSG lpMsg,
- HKL dwhkl );
+ UINT flags );
BOOL
NTAPI
NtUserUnregisterHotKey(HWND hWnd,
int id);
-DWORD
+BOOL
NTAPI
NtUserUnregisterUserApiHook(VOID);
{
struct
{
- UINT uiLo;
- UINT uiHi;
+ UINT_PTR uiLo;
+ UINT_PTR uiHi;
} Packed;
LPARAM Unpacked;
} Value;
#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
#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
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);
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
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
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;