Merge my current work done on the kd++ branch:
[reactos.git] / reactos / win32ss / user / ntuser / win32.h
1 #pragma once
2
3 /* W32PROCESS flags */
4 #define W32PF_CONSOLEAPPLICATION 0x00000001
5 #define W32PF_FORCEOFFFEEDBACK 0x00000002
6 #define W32PF_STARTGLASS 0x00000004
7 #define W32PF_WOW 0x00000008
8 #define W32PF_READSCREENACCESSGRANTED 0x00000010
9 #define W32PF_INITIALIZED 0x00000020
10 #define W32PF_APPSTARTING 0x00000040
11 #define W32PF_WOW64 0x00000080
12 #define W32PF_ALLOWFOREGROUNDACTIVATE 0x00000100
13 #define W32PF_OWNDCCLEANUP 0x00000200
14 #define W32PF_SHOWSTARTGLASSCALLED 0x00000400
15 #define W32PF_FORCEBACKGROUNDPRIORITY 0x00000800
16 #define W32PF_TERMINATED 0x00001000
17 #define W32PF_CLASSESREGISTERED 0x00002000
18 #define W32PF_THREADCONNECTED 0x00004000
19 #define W32PF_PROCESSCONNECTED 0x00008000
20 #define W32PF_SETFOREGROUNDALLOWED 0x00008000
21 #define W32PF_WAKEWOWEXEC 0x00010000
22 #define W32PF_WAITFORINPUTIDLE 0x00020000
23 #define W32PF_IOWINSTA 0x00040000
24 #define W32PF_CONSOLEFOREGROUND 0x00080000
25 #define W32PF_OLELOADED 0x00100000
26 #define W32PF_SCREENSAVER 0x00200000
27 #define W32PF_IDLESCREENSAVER 0x00400000
28 #define W32PF_ICONTITLEREGISTERED 0x10000000
29 #define W32PF_DPIAWARE 0x20000000
30 // ReactOS
31 #define W32PF_NOWINDOWGHOSTING (0x01000000)
32 #define W32PF_MANUALGUICHECK (0x02000000)
33 #define W32PF_CREATEDWINORDC (0x04000000)
34 #define W32PF_APIHOOKLOADED (0x08000000)
35 /*
36 #define QSIDCOUNTS 6
37
38 typedef enum _QS_ROS_TYPES
39 {
40 QSRosKey = 0,
41 QSRosMouseMove,
42 QSRosMouseButton,
43 QSRosPostMessage,
44 QSRosSendMessage,
45 QSRosHotKey,
46 }QS_ROS_TYPES,*PQS_ROS_TYPES;
47 */
48 extern BOOL ClientPfnInit;
49 extern HINSTANCE hModClient;
50 extern HANDLE hModuleWin; // This Win32k Instance.
51 extern PCLS SystemClassList;
52 extern BOOL RegisteredSysClasses;
53
54 typedef struct _WIN32HEAP WIN32HEAP, *PWIN32HEAP;
55
56 #include <pshpack1.h>
57 // FIXME: Move to ntuser.h
58 typedef struct _TL
59 {
60 struct _TL* next;
61 PVOID pobj;
62 PVOID pfnFree;
63 } TL, *PTL;
64
65 typedef struct _W32THREAD
66 {
67 PETHREAD pEThread;
68 ULONG RefCount;
69 PTL ptlW32;
70 PVOID pgdiDcattr;
71 PVOID pgdiBrushAttr;
72 PVOID pUMPDObjs;
73 PVOID pUMPDHeap;
74 DWORD dwEngAcquireCount;
75 PVOID pSemTable;
76 PVOID pUMPDObj;
77 } W32THREAD, *PW32THREAD;
78
79 typedef struct _THREADINFO
80 {
81 W32THREAD;
82 PTL ptl;
83 PPROCESSINFO ppi;
84 struct _USER_MESSAGE_QUEUE* MessageQueue;
85 struct tagKL* KeyboardLayout;
86 PCLIENTTHREADINFO pcti;
87 struct _DESKTOP* rpdesk;
88 PDESKTOPINFO pDeskInfo;
89 PCLIENTINFO pClientInfo;
90 FLONG TIF_flags;
91 PUNICODE_STRING pstrAppName;
92 LIST_ENTRY psmsSent; // DispatchingMessagesHead
93 struct _USER_SENT_MESSAGE *pusmCurrent;
94 LIST_ENTRY psmsReceiveList; // SentMessagesListHead
95 LONG timeLast;
96 ULONG_PTR idLast;
97 BOOLEAN QuitPosted;
98 INT exitCode; // QuitExitCode
99 HDESK hdesk;
100 UINT cPaintsReady; /* Count of paints pending. */
101 UINT cTimersReady; /* Count of timers pending. */
102 DWORD dwExpWinVer;
103 DWORD dwCompatFlags;
104 DWORD dwCompatFlags2;
105 struct _USER_MESSAGE_QUEUE* pqAttach;
106 PTHREADINFO ptiSibling;
107 ULONG fsHooks;
108 PHOOK sphkCurrent;
109 LPARAM lParamHkCurrent;
110 WPARAM wParamHkCurrent;
111 struct tagSBTRACK* pSBTrack;
112 HANDLE hEventQueueClient; // NewMessagesHandle
113 PKEVENT pEventQueueServer; // NewMessages
114 LIST_ENTRY PtiLink;
115 INT iCursorLevel;
116 POINT ptLast;
117
118 LIST_ENTRY mlPost; // PostedMessagesListHead
119
120 LIST_ENTRY aphkStart[NB_HOOKS];
121 CLIENTTHREADINFO cti; // Used only when no Desktop or pcti NULL.
122
123 /* ReactOS */
124
125 /* Queue state tracking */
126 // Send list QS_SENDMESSAGE
127 // Post list QS_POSTMESSAGE|QS_HOTKEY|QS_PAINT|QS_TIMER|QS_KEY
128 // Hard list QS_MOUSE|QS_KEY only
129 // Accounting of queue bit sets, the rest are flags. QS_TIMER QS_PAINT counts are handled in thread information.
130 //DWORD nCntsQBits[QSIDCOUNTS]; // QS_KEY QS_MOUSEMOVE QS_MOUSEBUTTON QS_POSTMESSAGE QS_SENDMESSAGE QS_HOTKEY
131
132 LIST_ENTRY LocalDispatchingMessagesHead;
133 LIST_ENTRY WindowListHead;
134 LIST_ENTRY W32CallbackListHead;
135 SINGLE_LIST_ENTRY ReferencesList;
136 ULONG cExclusiveLocks;
137 #if DBG
138 USHORT acExclusiveLockCount[GDIObjTypeTotal + 1];
139 #endif
140
141 } THREADINFO;
142
143 #include <poppack.h>
144
145 typedef struct _W32HEAP_USER_MAPPING
146 {
147 struct _W32HEAP_USER_MAPPING *Next;
148 PVOID KernelMapping;
149 PVOID UserMapping;
150 ULONG_PTR Limit;
151 ULONG Count;
152 } W32HEAP_USER_MAPPING, *PW32HEAP_USER_MAPPING;
153
154
155 /*
156 Information from STARTUPINFOW, psdk/winbase.h.
157 Set from PsGetCurrentProcess()->Peb->ProcessParameters.
158 */
159 typedef struct tagUSERSTARTUPINFO
160 {
161 ULONG cb;
162 DWORD dwX; // STARTF_USEPOSITION StartupInfo->dwX/Y
163 DWORD dwY;
164 DWORD dwXSize; // STARTF_USESIZE StartupInfo->dwX/YSize
165 DWORD dwYSize;
166 DWORD dwFlags; // STARTF_ StartupInfo->dwFlags
167 WORD wShowWindow; // StartupInfo->wShowWindow
168 USHORT cbReserved2;
169 } USERSTARTUPINFO, *PUSERSTARTUPINFO;
170
171 typedef struct _W32PROCESS
172 {
173 PEPROCESS peProcess;
174 DWORD RefCount;
175 ULONG W32PF_flags;
176 PKEVENT InputIdleEvent;
177 DWORD StartCursorHideTime;
178 struct _W32PROCESS * NextStart;
179 PVOID pDCAttrList;
180 PVOID pBrushAttrList;
181 DWORD W32Pid;
182 LONG GDIHandleCount;
183 LONG UserHandleCount;
184 PEX_PUSH_LOCK GDIPushLock; /* Locking Process during access to structure. */
185 RTL_AVL_TABLE GDIEngUserMemAllocTable; /* Process AVL Table. */
186 LIST_ENTRY GDIDcAttrFreeList;
187 LIST_ENTRY GDIBrushAttrFreeList;
188 } W32PROCESS, *PW32PROCESS;
189
190 #define CLIBS 32
191
192 typedef struct _PROCESSINFO
193 {
194 W32PROCESS;
195 PTHREADINFO ptiList;
196 PTHREADINFO ptiMainThread;
197 struct _DESKTOP* rpdeskStartup;
198 PPROCESSINFO ppiNext;
199 PCLS pclsPrivateList;
200 PCLS pclsPublicList;
201 INT cThreads;
202 HDESK hdeskStartup;
203 DWORD dwhmodLibLoadedMask;
204 HANDLE ahmodLibLoaded[CLIBS];
205 struct _WINSTATION_OBJECT *prpwinsta;
206 HWINSTA hwinsta;
207 ACCESS_MASK amwinsta;
208 DWORD dwHotkey;
209 HMONITOR hMonitor;
210 LUID luidSession;
211 USERSTARTUPINFO usi;
212 DWORD dwLayout;
213 DWORD dwRegisteredClasses;
214 /* ReactOS */
215 LIST_ENTRY MenuListHead;
216 FAST_MUTEX PrivateFontListLock;
217 LIST_ENTRY PrivateFontListHead;
218 FAST_MUTEX DriverObjListLock;
219 LIST_ENTRY DriverObjListHead;
220 struct tagKL* KeyboardLayout; // THREADINFO only
221 W32HEAP_USER_MAPPING HeapMappings;
222 struct _GDI_POOL *pPoolDcAttr;
223 struct _GDI_POOL *pPoolBrushAttr;
224 struct _GDI_POOL *pPoolRgnAttr;
225
226 #if DBG
227 BYTE DbgChannelLevel[DbgChCount];
228 DWORD DbgHandleCount[TYPE_CTYPES];
229 #endif
230 } PROCESSINFO;
231
232 #if DBG
233 void NTAPI UserDbgPreServiceHook(ULONG ulSyscallId, PULONG_PTR pulArguments);
234 ULONG_PTR NTAPI UserDbgPostServiceHook(ULONG ulSyscallId, ULONG_PTR ulResult);
235 #endif
236