ReactOS 0.4.17-dev-769-g1500a35
win32.h
Go to the documentation of this file.
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_DISABLEIME 0x00800000
29#define W32PF_ICONTITLEREGISTERED 0x10000000
30#define W32PF_DPIAWARE 0x20000000
31// ReactOS
32#define W32PF_NOWINDOWGHOSTING (0x01000000)
33#define W32PF_MANUALGUICHECK (0x02000000)
34#define W32PF_CREATEDWINORDC (0x04000000)
35#define W32PF_APIHOOKLOADED (0x08000000)
36#define W32PF_JOBRESTRICTED (0x40000000)
37
38#define QSIDCOUNTS 7
39
40typedef enum _QS_ROS_TYPES
41{
50
51extern BOOL ClientPfnInit;
53extern HANDLE hModuleWin; // This Win32k Instance.
54extern struct _CLS *SystemClassList;
56
57struct _TL;
58typedef struct _TL *PTL;
59
60typedef struct _W32THREAD
61{
73
74struct tagIMC;
75
76/*
77 * THREADINFO structure.
78 * See also: https://reactos.org/wiki/Techwiki:Win32k/THREADINFO
79 */
80#ifdef __cplusplus
81typedef struct _THREADINFO : _W32THREAD
82{
83#else
84typedef struct _THREADINFO
85{
87#endif
100 /* Queue of messages sent to the queue. */
102 /* Last message time and ID */
105 /* True if a WM_QUIT message is pending. */
107 /* The quit exit code. */
109 HDESK hdesk;
110 UINT cPaintsReady; /* Count of paints pending. */
111 UINT cTimersReady; /* Count of timers pending. */
123 /* Set if there are new messages specified by WakeMask in any of the queues. */
125 /* Handle for the above event (in the context of the process owning the queue). */
129 /* Last message cursor position */
131 /* Input context-related */
135
137 /* Queue of messages posted to the queue. */
143#ifndef __cplusplus
145 CLIENTTHREADINFO cti; // Used only when no Desktop or pcti NULL.
146
147 /* ReactOS */
148
149 /* Thread Queue state tracking */
150 // Send list QS_SENDMESSAGE
151 // Post list QS_POSTMESSAGE|QS_HOTKEY|QS_PAINT|QS_TIMER|QS_KEY
152 // Hard list QS_MOUSE|QS_KEY only
153 // Accounting of queue bit sets, the rest are flags. QS_TIMER QS_PAINT counts are handled in thread information.
154 DWORD nCntsQBits[QSIDCOUNTS]; // QS_KEY QS_MOUSEMOVE QS_MOUSEBUTTON QS_POSTMESSAGE QS_SENDMESSAGE QS_HOTKEY
155
160#if DBG
161 USHORT acExclusiveLockCount[GDIObjTypeTotal + 1];
162 UINT cRefObjectCo;
163#endif
164#endif // __cplusplus
166
167
168#define IntReferenceThreadInfo(pti) \
169 InterlockedIncrement(&(pti)->RefCount)
170
172
173#define IntDereferenceThreadInfo(pti) \
174do { \
175 if (InterlockedDecrement(&(pti)->RefCount) == 0) \
176 { \
177 ASSERT(((pti)->TIF_flags & (TIF_INCLEANUP|TIF_DONTATTACHQUEUE)) == (TIF_INCLEANUP|TIF_DONTATTACHQUEUE)); \
178 UserDeleteW32Thread(pti); \
179 } \
180} while(0)
181
182
183#define IntReferenceProcessInfo(ppi) \
184 InterlockedIncrement((volatile LONG*)(&(ppi)->RefCount))
185
187
188#define IntDereferenceProcessInfo(ppi) \
189do { \
190 if (InterlockedDecrement((volatile LONG*)(&(ppi)->RefCount)) == 0) \
191 { \
192 ASSERT(((ppi)->W32PF_flags & W32PF_TERMINATED) != 0); \
193 UserDeleteW32Process(ppi); \
194 } \
195} while(0)
196
197
199{
206
207
208/*
209 * Information from STARTUPINFOW, psdk/winbase.h.
210 * Set from PsGetCurrentProcess()->Peb->ProcessParameters.
211 * See also: https://reactos.org/wiki/Techwiki:Win32k/PROCESSINFO
212*/
213typedef struct tagUSERSTARTUPINFO
214{
216 DWORD dwX; // STARTF_USEPOSITION StartupInfo->dwX/Y
218 DWORD dwXSize; // STARTF_USESIZE StartupInfo->dwX/YSize
220 DWORD dwFlags; // STARTF_ StartupInfo->dwFlags
221 WORD wShowWindow; // StartupInfo->wShowWindow
224
225typedef struct _W32PROCESS
226{
238 PEX_PUSH_LOCK GDIPushLock; /* Locking Process during access to structure. */
239 RTL_AVL_TABLE GDIEngUserMemAllocTable; /* Process AVL Table. */
243
244#define CLIBS 32
245
246/*
247 * PROCESSINFO structure.
248 * See also: https://reactos.org/wiki/Techwiki:Win32k/PROCESSINFO
249 */
250#ifdef __cplusplus
251typedef struct _PROCESSINFO : _W32PROCESS
252{
253#else
254typedef struct _PROCESSINFO
255{
257#endif
267 HANDLE ahmodLibLoaded[CLIBS];
269 HWINSTA hwinsta;
283
284 /* ReactOS */
289
296
297#if DBG
298 BYTE DbgChannelLevel[DbgChCount];
299#ifndef __cplusplus
300 DWORD DbgHandleCount[TYPE_CTYPES];
301#endif // __cplusplus
302#endif // DBG
304
305#if DBG
306void NTAPI UserDbgPreServiceHook(ULONG ulSyscallId, PULONG_PTR pulArguments);
308#endif
309
310/* Helper function used by some wine code */
311
312__forceinline
313int
315 _In_ LPCWSTR lpString)
316{
317 size_t size = wcslen(lpString);
319 return (int)size;
320}
321
322#define strlenW lstrlenW
unsigned char BOOLEAN
Definition: actypes.h:127
#define lstrlenW
Definition: compat.h:750
_ACRTIMP size_t __cdecl wcslen(const wchar_t *)
Definition: wcs.c:2988
#define ULONG_MAX
Definition: limits.h:31
#define __drv_freesMem(kind)
Definition: driverspecs.h:272
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
GLsizeiptr size
Definition: glext.h:5919
unsigned int UINT
Definition: sysinfo.c:13
@ TYPE_CTYPES
Definition: ntuser.h:65
#define NB_HOOKS
Definition: ntuser.h:130
__fastfail(FAST_FAIL_INVALID_ARG)
LONG_PTR LPARAM
Definition: minwindef.h:175
UINT_PTR WPARAM
Definition: minwindef.h:174
UINT_PTR HKL
Definition: msctf.idl:125
#define _Pre_notnull_
Definition: no_sal2.h:516
#define _In_
Definition: no_sal2.h:158
ULONG ACCESS_MASK
Definition: nt_native.h:40
unsigned long FLONG
Definition: ntbasedef.h:378
@ GDIObjTypeTotal
Definition: ntgdityp.h:152
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
unsigned short USHORT
Definition: pedump.c:61
Definition: ntuser.h:570
Definition: job.h:12
Definition: typedefs.h:120
INT cThreads
Definition: win32.h:264
UINT iClipSerialNumber
Definition: win32.h:273
PPROCESSINFO ppiNext
Definition: win32.h:263
PVOID pClientBase
Definition: win32.h:275
HWINSTA hwinsta
Definition: win32.h:269
struct _JOBINFO * pW32Job
Definition: win32.h:277
USERSTARTUPINFO usi
Definition: win32.h:280
HDESK hdeskStartup
Definition: win32.h:265
LIST_ENTRY PrivateMemFontListHead
Definition: win32.h:287
W32HEAP_USER_MAPPING HeapMappings
Definition: win32.h:292
DWORD dwhmodLibLoadedMask
Definition: win32.h:266
LUID luidSession
Definition: win32.h:279
DWORD dwRegisteredClasses
Definition: win32.h:282
HMONITOR hMonitor
Definition: win32.h:272
FAST_MUTEX PrivateFontListLock
Definition: win32.h:285
struct _CLS * pclsPrivateList
Definition: win32.h:261
struct _GDI_POOL * pPoolRgnAttr
Definition: win32.h:295
struct _CURICON_OBJECT * pCursorCache
Definition: win32.h:274
DWORD dwLpkEntryPoints
Definition: win32.h:276
struct _GDI_POOL * pPoolBrushAttr
Definition: win32.h:294
DWORD dwImeCompatFlags
Definition: win32.h:278
LIST_ENTRY DriverObjListHead
Definition: win32.h:291
PTHREADINFO ptiList
Definition: win32.h:258
struct _CLS * pclsPublicList
Definition: win32.h:262
struct _DESKTOP * rpdeskStartup
Definition: win32.h:260
FAST_MUTEX DriverObjListLock
Definition: win32.h:290
DWORD dwHotkey
Definition: win32.h:271
UINT PrivateMemFontHandleCount
Definition: win32.h:288
DWORD dwLayout
Definition: win32.h:281
LIST_ENTRY PrivateFontListHead
Definition: win32.h:286
ACCESS_MASK amwinsta
Definition: win32.h:270
struct _GDI_POOL * pPoolDcAttr
Definition: win32.h:293
PTHREADINFO ptiMainThread
Definition: win32.h:259
struct _WINSTATION_OBJECT * prpwinsta
Definition: win32.h:268
Definition: ntbasedef.h:640
struct _USER_MESSAGE_QUEUE * pqAttach
Definition: win32.h:116
struct _USER_SENT_MESSAGE * pusmCurrent
Definition: win32.h:99
PPROCESSINFO ppi
Definition: win32.h:89
struct _DESKTOPINFO * pDeskInfo
Definition: win32.h:94
struct tagMENUSTATE * pMenuState
Definition: win32.h:112
ULONG_PTR idLast
Definition: win32.h:104
DWORD dwExpWinVer
Definition: win32.h:113
INT cEnterCount
Definition: win32.h:136
UINT cVisWindows
Definition: win32.h:142
PTHREADINFO ptiSibling
Definition: win32.h:117
WPARAM wParamHkCurrent
Definition: win32.h:121
INT exitCode
Definition: win32.h:108
struct tagHOOK * sphkCurrent
Definition: win32.h:119
ULONG fsHooks
Definition: win32.h:118
LIST_ENTRY PostedMessagesListHead
Definition: win32.h:138
LPARAM lParamHkCurrent
Definition: win32.h:120
POINT ptLast
Definition: win32.h:130
CLIENTTHREADINFO cti
Definition: win32.h:145
ULONG cExclusiveLocks
Definition: win32.h:159
UINT cWindows
Definition: win32.h:141
DWORD nCntsQBits[QSIDCOUNTS]
Definition: win32.h:154
struct _USER_SENT_MESSAGE * pusmSent
Definition: win32.h:98
struct _CLIENTINFO * pClientInfo
Definition: win32.h:95
WORD fsChangeBitsRemoved
Definition: win32.h:139
HDESK hdesk
Definition: win32.h:109
PKEVENT pEventQueueServer
Definition: win32.h:126
LIST_ENTRY W32CallbackListHead
Definition: win32.h:157
DWORD dwCompatFlags
Definition: win32.h:114
BOOLEAN QuitPosted
Definition: win32.h:106
INT iCursorLevel
Definition: win32.h:128
struct tagIMC * spDefaultImc
Definition: win32.h:133
HKL hklPrev
Definition: win32.h:134
struct tagKL * KeyboardLayout
Definition: win32.h:91
LONG timeLast
Definition: win32.h:103
LIST_ENTRY aphkStart[NB_HOOKS]
FIXME!
Definition: win32.h:144
struct _CLIENTTHREADINFO * pcti
Definition: win32.h:92
UINT cTimersReady
Definition: win32.h:111
HANDLE hEventQueueClient
Definition: win32.h:124
PUNICODE_STRING pstrAppName
Definition: win32.h:97
FLONG TIF_flags
Definition: win32.h:96
SINGLE_LIST_ENTRY ReferencesList
Definition: win32.h:158
PTL ptl
Definition: win32.h:88
LIST_ENTRY SentMessagesListHead
Definition: win32.h:101
DWORD dwCompatFlags2
Definition: win32.h:115
struct _DESKTOP * rpdesk
Definition: win32.h:93
WCHAR wchInjected
Definition: win32.h:140
UINT cPaintsReady
Definition: win32.h:110
struct tagSBTRACK * pSBTrack
Definition: win32.h:122
struct _WND * spwndDefaultIme
Definition: win32.h:132
LIST_ENTRY WindowListHead
Definition: win32.h:156
struct _USER_MESSAGE_QUEUE * MessageQueue
Definition: win32.h:90
LIST_ENTRY PtiLink
Definition: win32.h:127
Definition: ntuser.h:10
struct _W32HEAP_USER_MAPPING * Next
Definition: win32.h:200
ULONG_PTR Limit
Definition: win32.h:203
DWORD RefCount
Definition: win32.h:228
PVOID pDCAttrList
Definition: win32.h:233
DWORD W32Pid
Definition: win32.h:235
PKEVENT InputIdleEvent
Definition: win32.h:230
struct _W32PROCESS * NextStart
Definition: win32.h:232
PEPROCESS peProcess
Definition: win32.h:227
ULONG W32PF_flags
Definition: win32.h:229
LONG GDIHandleCount
Definition: win32.h:236
LIST_ENTRY GDIDcAttrFreeList
Definition: win32.h:240
LONG UserHandleCount
Definition: win32.h:237
RTL_AVL_TABLE GDIEngUserMemAllocTable
Definition: win32.h:239
LIST_ENTRY GDIBrushAttrFreeList
Definition: win32.h:241
DWORD StartCursorHideTime
Definition: win32.h:231
PVOID pBrushAttrList
Definition: win32.h:234
PEX_PUSH_LOCK GDIPushLock
Definition: win32.h:238
PVOID pUMPDObjs
Definition: win32.h:67
PVOID pgdiDcattr
Definition: win32.h:65
PTL ptlW32
Definition: win32.h:64
PVOID pUMPDObj
Definition: win32.h:71
PVOID pUMPDHeap
Definition: win32.h:68
PETHREAD pEThread
Definition: win32.h:62
PVOID pSemTable
Definition: win32.h:70
DWORD dwEngAcquireCount
Definition: win32.h:69
LONG RefCount
Definition: win32.h:63
PVOID pgdiBrushAttr
Definition: win32.h:66
Definition: ntuser.h:698
Definition: ntuser.h:202
Definition: input.h:27
WORD wShowWindow
Definition: win32.h:221
USHORT cbReserved2
Definition: win32.h:222
uint32_t * PULONG_PTR
Definition: typedefs.h:65
const uint16_t * LPCWSTR
Definition: typedefs.h:57
#define NTAPI
Definition: typedefs.h:36
int32_t INT
Definition: typedefs.h:58
uint32_t ULONG_PTR
Definition: typedefs.h:65
uint32_t ULONG
Definition: typedefs.h:59
VOID UserDeleteW32Thread(PTHREADINFO)
Definition: main.c:425
struct _W32THREAD W32THREAD
BOOL RegisteredSysClasses
struct _W32HEAP_USER_MAPPING * PW32HEAP_USER_MAPPING
HINSTANCE hModClient
Definition: ntuser.c:25
VOID UserDeleteW32Process(_Pre_notnull_ __drv_freesMem(Mem) PPROCESSINFO)
Definition: main.c:96
struct _TL * PTL
Definition: win32.h:58
struct tagUSERSTARTUPINFO * PUSERSTARTUPINFO
HANDLE hModuleWin
Definition: main.c:17
struct _CLS * SystemClassList
#define CLIBS
Definition: win32.h:244
struct _W32PROCESS * PW32PROCESS
struct tagUSERSTARTUPINFO USERSTARTUPINFO
enum _QS_ROS_TYPES * PQS_ROS_TYPES
BOOL ClientPfnInit
Definition: ntuser.c:26
_QS_ROS_TYPES
Definition: win32.h:41
@ QSRosMouseMove
Definition: win32.h:43
@ QSRosKey
Definition: win32.h:42
@ QSRosEvent
Definition: win32.h:48
@ QSRosHotKey
Definition: win32.h:47
@ QSRosSendMessage
Definition: win32.h:46
@ QSRosPostMessage
Definition: win32.h:45
@ QSRosMouseButton
Definition: win32.h:44
struct _THREADINFO THREADINFO
enum _QS_ROS_TYPES QS_ROS_TYPES
struct _W32HEAP_USER_MAPPING W32HEAP_USER_MAPPING
struct _PROCESSINFO PROCESSINFO
struct _W32PROCESS W32PROCESS
struct _W32THREAD * PW32THREAD
#define QSIDCOUNTS
Definition: win32.h:38
void NTAPI UserDbgPreServiceHook(ULONG ulSyscallId, PULONG_PTR pulArguments)
Definition: misc.c:780
ULONG_PTR NTAPI UserDbgPostServiceHook(ULONG ulSyscallId, ULONG_PTR ulResult)
Definition: misc.c:787
FAST_MUTEX
Definition: extypes.h:17
#define FAST_FAIL_RANGE_CHECK_FAILURE
unsigned char BYTE
Definition: xxhash.c:193