ReactOS  0.4.15-dev-3187-ge372f2b
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_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 7
37 
38 typedef enum _QS_ROS_TYPES
39 {
40  QSRosKey = 0,
48 
49 extern BOOL ClientPfnInit;
50 extern HINSTANCE hModClient;
51 extern HANDLE hModuleWin; // This Win32k Instance.
52 extern struct _CLS *SystemClassList;
54 
55 #include <pshpack1.h>
56 // FIXME: Move to ntuser.h
57 typedef struct _TL
58 {
59  struct _TL* next;
62 } TL, *PTL;
63 
64 typedef struct _W32THREAD
65 {
77 
78 struct tagIMC;
79 
80 #ifdef __cplusplus
81 typedef struct _THREADINFO : _W32THREAD
82 {
83 #else
84 typedef struct _THREADINFO
85 {
87 #endif
93  struct _DESKTOP* rpdesk;
100  /* Queue of messages sent to the queue. */
101  LIST_ENTRY SentMessagesListHead; // psmsReceiveList
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
144  LIST_ENTRY aphkStart[NB_HOOKS];
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 #endif
163 #endif // __cplusplus
164 } THREADINFO;
165 
166 #include <poppack.h>
167 
168 
169 #define IntReferenceThreadInfo(pti) \
170  InterlockedIncrement(&(pti)->RefCount)
171 
173 
174 #define IntDereferenceThreadInfo(pti) \
175 do { \
176  if (InterlockedDecrement(&(pti)->RefCount) == 0) \
177  { \
178  ASSERT(((pti)->TIF_flags & (TIF_INCLEANUP|TIF_DONTATTACHQUEUE)) == (TIF_INCLEANUP|TIF_DONTATTACHQUEUE)); \
179  UserDeleteW32Thread(pti); \
180  } \
181 } while(0)
182 
183 
184 #define IntReferenceProcessInfo(ppi) \
185  InterlockedIncrement((volatile LONG*)(&(ppi)->RefCount))
186 
188 
189 #define IntDereferenceProcessInfo(ppi) \
190 do { \
191  if (InterlockedDecrement((volatile LONG*)(&(ppi)->RefCount)) == 0) \
192  { \
193  ASSERT(((ppi)->W32PF_flags & W32PF_TERMINATED) != 0); \
194  UserDeleteW32Process(ppi); \
195  } \
196 } while(0)
197 
198 
199 typedef struct _W32HEAP_USER_MAPPING
200 {
207 
208 
209 /*
210  Information from STARTUPINFOW, psdk/winbase.h.
211  Set from PsGetCurrentProcess()->Peb->ProcessParameters.
212 */
213 typedef 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 
225 typedef 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 #ifdef __cplusplus
247 typedef struct _PROCESSINFO : _W32PROCESS
248 {
249 #else
250 typedef struct _PROCESSINFO
251 {
253 #endif
263  HANDLE ahmodLibLoaded[CLIBS];
265  HWINSTA hwinsta;
279 
280  /* ReactOS */
285 
292 
293 #if DBG
294  BYTE DbgChannelLevel[DbgChCount];
295 #ifndef __cplusplus
296  DWORD DbgHandleCount[TYPE_CTYPES];
297 #endif // __cplusplus
298 #endif // DBG
299 } PROCESSINFO;
300 
301 #if DBG
302 void NTAPI UserDbgPreServiceHook(ULONG ulSyscallId, PULONG_PTR pulArguments);
303 ULONG_PTR NTAPI UserDbgPostServiceHook(ULONG ulSyscallId, ULONG_PTR ulResult);
304 #endif
305 
306 /* Helper function used by some wine code */
307 
308 __forceinline
309 int
311  _In_ LPCWSTR lpString)
312 {
313  size_t size = wcslen(lpString);
314  if (size > ULONG_MAX) __fastfail(FAST_FAIL_RANGE_CHECK_FAILURE);
315  return (int)size;
316 }
317 
318 #define strlenW lstrlenW
PTL ptlW32
Definition: win32.h:68
PVOID pgdiBrushAttr
Definition: win32.h:70
LPARAM lParamHkCurrent
Definition: win32.h:120
USERSTARTUPINFO usi
Definition: win32.h:276
struct _GDI_POOL * pPoolBrushAttr
Definition: win32.h:290
struct _USER_SENT_MESSAGE * pusmSent
Definition: win32.h:98
UINT PrivateMemFontHandleCount
Definition: win32.h:284
DWORD dwEngAcquireCount
Definition: win32.h:73
DWORD dwCompatFlags2
Definition: win32.h:115
struct tagIMC * spDefaultImc
Definition: win32.h:133
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185
DWORD dwRegisteredClasses
Definition: win32.h:278
PPROCESSINFO ppiNext
Definition: win32.h:259
Definition: ntbasedef.h:628
ULONG_PTR idLast
Definition: win32.h:104
DWORD StartCursorHideTime
Definition: win32.h:231
LIST_ENTRY WindowListHead
Definition: win32.h:156
PTHREADINFO ptiSibling
Definition: win32.h:117
enum _QS_ROS_TYPES * PQS_ROS_TYPES
PKEVENT InputIdleEvent
Definition: win32.h:230
Definition: win32.h:57
PVOID pClientBase
Definition: win32.h:271
struct _W32PROCESS * PW32PROCESS
DWORD W32Pid
Definition: win32.h:235
FLONG TIF_flags
Definition: win32.h:96
UINT cPaintsReady
Definition: win32.h:110
Definition: ntuser.h:190
_QS_ROS_TYPES
Definition: win32.h:38
BOOLEAN QuitPosted
Definition: win32.h:106
Definition: win32.h:40
LIST_ENTRY PtiLink
Definition: win32.h:127
struct _TL * PTL
UINT_PTR WPARAM
Definition: windef.h:207
struct _W32PROCESS W32PROCESS
struct _W32THREAD * PW32THREAD
PVOID pobj
Definition: win32.h:60
HINSTANCE hModClient
Definition: ntuser.c:25
struct _W32THREAD W32THREAD
struct _WINSTATION_OBJECT * prpwinsta
Definition: win32.h:264
struct _USER_SENT_MESSAGE * pusmCurrent
Definition: win32.h:99
VOID UserDeleteW32Process(_Pre_notnull_ __drv_freesMem(Mem) PPROCESSINFO)
Definition: main.c:96
struct _DESKTOP * rpdesk
Definition: win32.h:93
int32_t INT
Definition: typedefs.h:58
PUNICODE_STRING pstrAppName
Definition: win32.h:97
PVOID pDCAttrList
Definition: win32.h:233
struct _CLS * pclsPrivateList
Definition: win32.h:257
struct _CURICON_OBJECT * pCursorCache
Definition: win32.h:270
DWORD dwLayout
Definition: win32.h:277
UINT cTimersReady
Definition: win32.h:111
PPROCESSINFO ppi
Definition: win32.h:89
uint32_t ULONG_PTR
Definition: typedefs.h:65
WPARAM wParamHkCurrent
Definition: win32.h:121
DWORD dwImeCompatFlags
Definition: win32.h:274
struct _W32PROCESS * NextStart
Definition: win32.h:232
HDESK hdesk
Definition: win32.h:109
ULONG cExclusiveLocks
Definition: win32.h:159
struct _USER_MESSAGE_QUEUE * pqAttach
Definition: win32.h:116
HDESK hdeskStartup
Definition: win32.h:261
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
Definition: IoEaTest.cpp:117
UINT cWindows
Definition: win32.h:141
struct _GDI_POOL * pPoolDcAttr
Definition: win32.h:289
unsigned int BOOL
Definition: ntddk_ex.h:94
FAST_MUTEX PrivateFontListLock
Definition: win32.h:281
DWORD dwhmodLibLoadedMask
Definition: win32.h:262
long LONG
Definition: pedump.c:60
LIST_ENTRY SentMessagesListHead
Definition: win32.h:101
PVOID pgdiDcattr
Definition: win32.h:69
PTHREADINFO ptiMainThread
Definition: win32.h:255
HKL hklPrev
Definition: win32.h:134
unsigned char BOOLEAN
INT exitCode
Definition: win32.h:108
Definition: input.h:26
LIST_ENTRY W32CallbackListHead
Definition: win32.h:157
#define _In_
Definition: ms_sal.h:308
Definition: ntuser.h:539
LONG_PTR LPARAM
Definition: windef.h:208
struct _WND * spwndDefaultIme
Definition: win32.h:132
W32HEAP_USER_MAPPING HeapMappings
Definition: win32.h:288
struct tagSBTRACK * pSBTrack
Definition: win32.h:122
LIST_ENTRY GDIDcAttrFreeList
Definition: win32.h:240
RTL_AVL_TABLE GDIEngUserMemAllocTable
Definition: win32.h:239
struct _CLIENTTHREADINFO * pcti
Definition: win32.h:92
PVOID pBrushAttrList
Definition: win32.h:234
ULONG W32PF_flags
Definition: win32.h:229
unsigned long FLONG
Definition: ntbasedef.h:366
PEPROCESS peProcess
Definition: win32.h:227
DWORD dwLpkEntryPoints
Definition: win32.h:272
INT cThreads
Definition: win32.h:260
DWORD dwCompatFlags
Definition: win32.h:114
DWORD dwExpWinVer
Definition: win32.h:113
struct _TL TL
void NTAPI UserDbgPreServiceHook(ULONG ulSyscallId, PULONG_PTR pulArguments)
Definition: misc.c:756
WORD fsChangeBitsRemoved
Definition: win32.h:139
FAST_MUTEX
Definition: extypes.h:17
ULONG_PTR Limit
Definition: win32.h:204
#define FAST_FAIL_RANGE_CHECK_FAILURE
VOID UserDeleteW32Thread(PTHREADINFO)
Definition: main.c:404
ULONG fsHooks
Definition: win32.h:118
GLsizeiptr size
Definition: glext.h:5919
struct _CLS * pclsPublicList
Definition: win32.h:258
__wchar_t WCHAR
Definition: xmlstorage.h:180
HMONITOR hMonitor
Definition: win32.h:268
struct _DESKTOP * rpdeskStartup
Definition: win32.h:256
LIST_ENTRY PrivateMemFontListHead
Definition: win32.h:283
PKEVENT pEventQueueServer
Definition: win32.h:126
DWORD nCntsQBits[QSIDCOUNTS]
Definition: win32.h:154
LUID luidSession
Definition: win32.h:275
#define CLIBS
Definition: win32.h:244
unsigned short WORD
Definition: ntddk_ex.h:93
unsigned long DWORD
Definition: ntddk_ex.h:95
LONG GDIHandleCount
Definition: win32.h:236
struct _CLIENTINFO * pClientInfo
Definition: win32.h:95
#define QSIDCOUNTS
Definition: win32.h:36
enum _QS_ROS_TYPES QS_ROS_TYPES
LONG timeLast
Definition: win32.h:103
struct _THREADINFO THREADINFO
ULONG_PTR NTAPI UserDbgPostServiceHook(ULONG ulSyscallId, ULONG_PTR ulResult)
Definition: misc.c:763
#define _Pre_notnull_
Definition: ms_sal.h:680
DWORD RefCount
Definition: win32.h:228
UINT iClipSerialNumber
Definition: win32.h:269
Definition: typedefs.h:119
CLIENTTHREADINFO cti
Definition: win32.h:145
struct tagHOOK * sphkCurrent
Definition: win32.h:119
UINT_PTR HKL
Definition: msctf.idl:101
HANDLE hModuleWin
Definition: main.c:16
struct tagKL * KeyboardLayout
Definition: win32.h:91
PTL ptl
Definition: win32.h:88
unsigned char BYTE
Definition: xxhash.c:193
struct _PROCESSINFO PROCESSINFO
PVOID pW32Job
Definition: win32.h:273
PVOID pUMPDHeap
Definition: win32.h:72
LIST_ENTRY DriverObjListHead
Definition: win32.h:287
POINT ptLast
Definition: win32.h:130
HANDLE hEventQueueClient
Definition: win32.h:124
Definition: ntuser.h:663
struct _USER_MESSAGE_QUEUE * MessageQueue
Definition: win32.h:90
struct _GDI_POOL * pPoolRgnAttr
Definition: win32.h:291
LIST_ENTRY GDIBrushAttrFreeList
Definition: win32.h:241
BOOL RegisteredSysClasses
HWINSTA hwinsta
Definition: win32.h:265
LIST_ENTRY PostedMessagesListHead
Definition: win32.h:138
struct tagMENUSTATE * pMenuState
Definition: win32.h:112
unsigned short USHORT
Definition: pedump.c:61
LONG RefCount
Definition: win32.h:67
WCHAR wchInjected
Definition: win32.h:140
struct tagUSERSTARTUPINFO USERSTARTUPINFO
struct _W32HEAP_USER_MAPPING * PW32HEAP_USER_MAPPING
unsigned int UINT
Definition: ndis.h:50
#define __drv_freesMem(kind)
Definition: driverspecs.h:271
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
DWORD dwHotkey
Definition: win32.h:267
struct _CLS * SystemClassList
WORD wShowWindow
Definition: win32.h:221
struct _W32HEAP_USER_MAPPING W32HEAP_USER_MAPPING
PVOID pUMPDObj
Definition: win32.h:75
UINT cVisWindows
Definition: win32.h:142
SINGLE_LIST_ENTRY ReferencesList
Definition: win32.h:158
struct _TL * next
Definition: win32.h:59
USHORT cbReserved2
Definition: win32.h:222
unsigned int ULONG
Definition: retypes.h:1
struct tagUSERSTARTUPINFO * PUSERSTARTUPINFO
uint32_t * PULONG_PTR
Definition: typedefs.h:65
PTHREADINFO ptiList
Definition: win32.h:254
INT iCursorLevel
Definition: win32.h:128
FAST_MUTEX DriverObjListLock
Definition: win32.h:286
struct _DESKTOPINFO * pDeskInfo
Definition: win32.h:94
PEX_PUSH_LOCK GDIPushLock
Definition: win32.h:238
ACCESS_MASK amwinsta
Definition: win32.h:266
BOOL ClientPfnInit
Definition: ntuser.c:26
INT cEnterCount
Definition: win32.h:136
LONG UserHandleCount
Definition: win32.h:237
struct _W32HEAP_USER_MAPPING * Next
Definition: win32.h:201
ULONG ACCESS_MASK
Definition: nt_native.h:40
PVOID pSemTable
Definition: win32.h:74
PVOID pUMPDObjs
Definition: win32.h:71
#define ULONG_MAX
Definition: limits.h:44
LIST_ENTRY PrivateFontListHead
Definition: win32.h:282
PVOID pfnFree
Definition: win32.h:61
PETHREAD pEThread
Definition: win32.h:66
__forceinline int lstrlenW(_In_ LPCWSTR lpString)
Definition: win32.h:310