3ec0f54adcbefc55dbab7aa5414b1edf8b001cf3
[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 extern BOOL ClientPfnInit;
37 extern HINSTANCE hModClient;
38 extern HANDLE hModuleWin; // This Win32k Instance.
39 extern PCLS SystemClassList;
40 extern BOOL RegisteredSysClasses;
41
42 typedef struct _WIN32HEAP WIN32HEAP, *PWIN32HEAP;
43
44 #include <pshpack1.h>
45 // FIXME: Move to ntuser.h
46 typedef struct _TL
47 {
48 struct _TL* next;
49 PVOID pobj;
50 PVOID pfnFree;
51 } TL, *PTL;
52
53 typedef struct _W32THREAD
54 {
55 PETHREAD pEThread;
56 ULONG RefCount;
57 PTL ptlW32;
58 PVOID pgdiDcattr;
59 PVOID pgdiBrushAttr;
60 PVOID pUMPDObjs;
61 PVOID pUMPDHeap;
62 DWORD dwEngAcquireCount;
63 PVOID pSemTable;
64 PVOID pUMPDObj;
65 } W32THREAD, *PW32THREAD;
66
67 typedef struct _THREADINFO
68 {
69 W32THREAD;
70 PTL ptl;
71 PPROCESSINFO ppi;
72 struct _USER_MESSAGE_QUEUE* MessageQueue;
73 struct tagKL* KeyboardLayout;
74 PCLIENTTHREADINFO pcti;
75 struct _DESKTOP* rpdesk;
76 PDESKTOPINFO pDeskInfo;
77 PCLIENTINFO pClientInfo;
78 FLONG TIF_flags;
79 PUNICODE_STRING pstrAppName;
80 struct _USER_SENT_MESSAGE *pusmCurrent;
81 LONG timeLast;
82 ULONG_PTR idLast;
83 INT exitCode;
84 HDESK hdesk;
85 UINT cPaintsReady; /* Count of paints pending. */
86 UINT cTimersReady; /* Count of timers pending. */
87 DWORD dwExpWinVer;
88 DWORD dwCompatFlags;
89 DWORD dwCompatFlags2;
90 struct _USER_MESSAGE_QUEUE* pqAttach;
91 PTHREADINFO ptiSibling;
92 ULONG fsHooks;
93 PHOOK sphkCurrent;
94 LPARAM lParamHkCurrent;
95 WPARAM wParamHkCurrent;
96 struct tagSBTRACK* pSBTrack;
97 HANDLE hEventQueueClient;
98 PKEVENT pEventQueueServer;
99 LIST_ENTRY PtiLink;
100 POINT ptLast;
101
102 LIST_ENTRY aphkStart[NB_HOOKS];
103 CLIENTTHREADINFO cti; // Used only when no Desktop or pcti NULL.
104
105 /* ReactOS */
106 LIST_ENTRY WindowListHead;
107 LIST_ENTRY W32CallbackListHead;
108 SINGLE_LIST_ENTRY ReferencesList;
109 ULONG cExclusiveLocks;
110 #if DBG
111 USHORT acExclusiveLockCount[GDIObjTypeTotal + 1];
112 #endif
113
114 } THREADINFO;
115
116 #include <poppack.h>
117
118 typedef struct _W32HEAP_USER_MAPPING
119 {
120 struct _W32HEAP_USER_MAPPING *Next;
121 PVOID KernelMapping;
122 PVOID UserMapping;
123 ULONG_PTR Limit;
124 ULONG Count;
125 } W32HEAP_USER_MAPPING, *PW32HEAP_USER_MAPPING;
126
127
128 /*
129 Information from STARTUPINFOW, psdk/winbase.h.
130 Set from PsGetCurrentProcess()->Peb->ProcessParameters.
131 */
132 typedef struct tagUSERSTARTUPINFO
133 {
134 ULONG cb;
135 DWORD dwX; // STARTF_USEPOSITION StartupInfo->dwX/Y
136 DWORD dwY;
137 DWORD dwXSize; // STARTF_USESIZE StartupInfo->dwX/YSize
138 DWORD dwYSize;
139 DWORD dwFlags; // STARTF_ StartupInfo->dwFlags
140 WORD wShowWindow; // StartupInfo->wShowWindow
141 USHORT cbReserved2;
142 } USERSTARTUPINFO, *PUSERSTARTUPINFO;
143
144 typedef struct _W32PROCESS
145 {
146 PEPROCESS peProcess;
147 DWORD RefCount;
148 ULONG W32PF_flags;
149 PKEVENT InputIdleEvent;
150 DWORD StartCursorHideTime;
151 struct _W32PROCESS * NextStart;
152 PVOID pDCAttrList;
153 PVOID pBrushAttrList;
154 DWORD W32Pid;
155 LONG GDIHandleCount;
156 LONG UserHandleCount;
157 PEX_PUSH_LOCK GDIPushLock; /* Locking Process during access to structure. */
158 RTL_AVL_TABLE GDIEngUserMemAllocTable; /* Process AVL Table. */
159 LIST_ENTRY GDIDcAttrFreeList;
160 LIST_ENTRY GDIBrushAttrFreeList;
161 } W32PROCESS, *PW32PROCESS;
162
163 #define CLIBS 32
164
165 typedef struct _PROCESSINFO
166 {
167 W32PROCESS;
168 PTHREADINFO ptiList;
169 PTHREADINFO ptiMainThread;
170 struct _DESKTOP* rpdeskStartup;
171 PCLS pclsPrivateList;
172 PCLS pclsPublicList;
173 INT cThreads;
174 HDESK hdeskStartup;
175 DWORD dwhmodLibLoadedMask;
176 HANDLE ahmodLibLoaded[CLIBS];
177 struct _WINSTATION_OBJECT *prpwinsta;
178 HWINSTA hwinsta;
179 ACCESS_MASK amwinsta;
180 DWORD dwHotkey;
181 HMONITOR hMonitor;
182 LUID luidSession;
183 USERSTARTUPINFO usi;
184 DWORD dwLayout;
185 DWORD dwRegisteredClasses;
186 /* ReactOS */
187 LIST_ENTRY MenuListHead;
188 FAST_MUTEX PrivateFontListLock;
189 LIST_ENTRY PrivateFontListHead;
190 FAST_MUTEX DriverObjListLock;
191 LIST_ENTRY DriverObjListHead;
192 struct tagKL* KeyboardLayout; // THREADINFO only
193 W32HEAP_USER_MAPPING HeapMappings;
194 struct _GDI_POOL *pPoolDcAttr;
195 struct _GDI_POOL *pPoolBrushAttr;
196 struct _GDI_POOL *pPoolRgnAttr;
197
198 #if DBG
199 BYTE DbgChannelLevel[DbgChCount];
200 #endif
201 } PROCESSINFO;
202
203 #if DBG
204 void NTAPI UserDbgPreServiceHook(ULONG ulSyscallId, PULONG_PTR pulArguments);
205 ULONG_PTR NTAPI UserDbgPostServiceHook(ULONG ulSyscallId, ULONG_PTR ulResult);
206 #endif
207