2010-02-26 11:43:19 +00:00
|
|
|
#pragma once
|
2002-09-08 10:47:47 +00:00
|
|
|
|
2009-08-12 06:54:31 +00:00
|
|
|
/* W32PROCESS flags */
|
|
|
|
#define W32PF_CONSOLEAPPLICATION 0x00000001
|
|
|
|
#define W32PF_FORCEOFFFEEDBACK 0x00000002
|
|
|
|
#define W32PF_STARTGLASS 0x00000004
|
|
|
|
#define W32PF_WOW 0x00000008
|
|
|
|
#define W32PF_READSCREENACCESSGRANTED 0x00000010
|
|
|
|
#define W32PF_INITIALIZED 0x00000020
|
|
|
|
#define W32PF_APPSTARTING 0x00000040
|
|
|
|
#define W32PF_WOW64 0x00000080
|
|
|
|
#define W32PF_ALLOWFOREGROUNDACTIVATE 0x00000100
|
|
|
|
#define W32PF_OWNDCCLEANUP 0x00000200
|
|
|
|
#define W32PF_SHOWSTARTGLASSCALLED 0x00000400
|
|
|
|
#define W32PF_FORCEBACKGROUNDPRIORITY 0x00000800
|
|
|
|
#define W32PF_TERMINATED 0x00001000
|
|
|
|
#define W32PF_CLASSESREGISTERED 0x00002000
|
|
|
|
#define W32PF_THREADCONNECTED 0x00004000
|
|
|
|
#define W32PF_PROCESSCONNECTED 0x00008000
|
2012-04-23 18:51:48 +00:00
|
|
|
#define W32PF_SETFOREGROUNDALLOWED 0x00008000
|
2009-08-12 06:54:31 +00:00
|
|
|
#define W32PF_WAKEWOWEXEC 0x00010000
|
|
|
|
#define W32PF_WAITFORINPUTIDLE 0x00020000
|
|
|
|
#define W32PF_IOWINSTA 0x00040000
|
|
|
|
#define W32PF_CONSOLEFOREGROUND 0x00080000
|
|
|
|
#define W32PF_OLELOADED 0x00100000
|
|
|
|
#define W32PF_SCREENSAVER 0x00200000
|
|
|
|
#define W32PF_IDLESCREENSAVER 0x00400000
|
2021-12-31 01:20:53 +00:00
|
|
|
#define W32PF_DISABLEIME 0x00800000
|
2009-08-12 06:54:31 +00:00
|
|
|
#define W32PF_ICONTITLEREGISTERED 0x10000000
|
2010-10-03 19:18:19 +00:00
|
|
|
#define W32PF_DPIAWARE 0x20000000
|
2009-08-12 06:54:31 +00:00
|
|
|
// ReactOS
|
|
|
|
#define W32PF_NOWINDOWGHOSTING (0x01000000)
|
|
|
|
#define W32PF_MANUALGUICHECK (0x02000000)
|
|
|
|
#define W32PF_CREATEDWINORDC (0x04000000)
|
2011-09-19 08:32:38 +00:00
|
|
|
#define W32PF_APIHOOKLOADED (0x08000000)
|
2013-05-10 22:28:18 +00:00
|
|
|
|
|
|
|
#define QSIDCOUNTS 7
|
2009-08-12 06:54:31 +00:00
|
|
|
|
2012-08-20 00:26:08 +00:00
|
|
|
typedef enum _QS_ROS_TYPES
|
|
|
|
{
|
|
|
|
QSRosKey = 0,
|
|
|
|
QSRosMouseMove,
|
|
|
|
QSRosMouseButton,
|
|
|
|
QSRosPostMessage,
|
|
|
|
QSRosSendMessage,
|
|
|
|
QSRosHotKey,
|
2013-05-10 22:28:18 +00:00
|
|
|
QSRosEvent,
|
2014-12-26 20:55:30 +00:00
|
|
|
} QS_ROS_TYPES, *PQS_ROS_TYPES;
|
2013-05-10 22:28:18 +00:00
|
|
|
|
2009-07-23 01:34:31 +00:00
|
|
|
extern BOOL ClientPfnInit;
|
|
|
|
extern HINSTANCE hModClient;
|
|
|
|
extern HANDLE hModuleWin; // This Win32k Instance.
|
2015-03-25 22:32:35 +00:00
|
|
|
extern struct _CLS *SystemClassList;
|
2009-07-23 01:34:31 +00:00
|
|
|
extern BOOL RegisteredSysClasses;
|
2009-07-13 03:55:03 +00:00
|
|
|
|
2011-12-14 04:07:06 +00:00
|
|
|
// FIXME: Move to ntuser.h
|
2008-10-16 17:52:38 +00:00
|
|
|
typedef struct _TL
|
|
|
|
{
|
|
|
|
struct _TL* next;
|
|
|
|
PVOID pobj;
|
|
|
|
PVOID pfnFree;
|
|
|
|
} TL, *PTL;
|
|
|
|
|
2002-09-08 10:47:47 +00:00
|
|
|
typedef struct _W32THREAD
|
|
|
|
{
|
2008-10-16 17:52:38 +00:00
|
|
|
PETHREAD pEThread;
|
2013-05-10 22:28:18 +00:00
|
|
|
LONG RefCount;
|
2008-10-16 17:52:38 +00:00
|
|
|
PTL ptlW32;
|
|
|
|
PVOID pgdiDcattr;
|
|
|
|
PVOID pgdiBrushAttr;
|
|
|
|
PVOID pUMPDObjs;
|
|
|
|
PVOID pUMPDHeap;
|
|
|
|
DWORD dwEngAcquireCount;
|
|
|
|
PVOID pSemTable;
|
|
|
|
PVOID pUMPDObj;
|
|
|
|
} W32THREAD, *PW32THREAD;
|
|
|
|
|
2021-08-20 22:31:10 +00:00
|
|
|
struct tagIMC;
|
|
|
|
|
2015-03-25 22:32:35 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
typedef struct _THREADINFO : _W32THREAD
|
|
|
|
{
|
|
|
|
#else
|
2008-10-16 17:52:38 +00:00
|
|
|
typedef struct _THREADINFO
|
|
|
|
{
|
2009-07-26 16:17:50 +00:00
|
|
|
W32THREAD;
|
2015-03-25 22:32:35 +00:00
|
|
|
#endif
|
2009-01-17 21:14:52 +00:00
|
|
|
PTL ptl;
|
2009-08-12 06:41:20 +00:00
|
|
|
PPROCESSINFO ppi;
|
2009-01-17 21:14:52 +00:00
|
|
|
struct _USER_MESSAGE_QUEUE* MessageQueue;
|
2011-10-19 20:08:25 +00:00
|
|
|
struct tagKL* KeyboardLayout;
|
2015-03-25 22:32:35 +00:00
|
|
|
struct _CLIENTTHREADINFO * pcti;
|
2010-01-14 02:52:12 +00:00
|
|
|
struct _DESKTOP* rpdesk;
|
2015-03-25 22:32:35 +00:00
|
|
|
struct _DESKTOPINFO * pDeskInfo;
|
|
|
|
struct _CLIENTINFO * pClientInfo;
|
2009-01-18 04:36:43 +00:00
|
|
|
FLONG TIF_flags;
|
2009-10-10 04:40:36 +00:00
|
|
|
PUNICODE_STRING pstrAppName;
|
2015-11-03 15:18:51 +00:00
|
|
|
struct _USER_SENT_MESSAGE *pusmSent;
|
2010-12-03 18:02:02 +00:00
|
|
|
struct _USER_SENT_MESSAGE *pusmCurrent;
|
2013-05-10 22:28:18 +00:00
|
|
|
/* Queue of messages sent to the queue. */
|
|
|
|
LIST_ENTRY SentMessagesListHead; // psmsReceiveList
|
2019-12-29 14:10:19 +00:00
|
|
|
/* Last message time and ID */
|
2009-05-06 18:49:53 +00:00
|
|
|
LONG timeLast;
|
2009-10-10 04:40:36 +00:00
|
|
|
ULONG_PTR idLast;
|
2013-05-10 22:28:18 +00:00
|
|
|
/* True if a WM_QUIT message is pending. */
|
2012-08-20 00:26:08 +00:00
|
|
|
BOOLEAN QuitPosted;
|
2013-05-10 22:28:18 +00:00
|
|
|
/* The quit exit code. */
|
|
|
|
INT exitCode;
|
2010-01-14 02:52:12 +00:00
|
|
|
HDESK hdesk;
|
2009-02-28 04:41:52 +00:00
|
|
|
UINT cPaintsReady; /* Count of paints pending. */
|
|
|
|
UINT cTimersReady; /* Count of timers pending. */
|
2015-09-01 22:10:13 +00:00
|
|
|
struct tagMENUSTATE* pMenuState;
|
2009-10-10 04:40:36 +00:00
|
|
|
DWORD dwExpWinVer;
|
|
|
|
DWORD dwCompatFlags;
|
|
|
|
DWORD dwCompatFlags2;
|
|
|
|
struct _USER_MESSAGE_QUEUE* pqAttach;
|
|
|
|
PTHREADINFO ptiSibling;
|
2009-05-12 01:31:07 +00:00
|
|
|
ULONG fsHooks;
|
2015-03-25 22:32:35 +00:00
|
|
|
struct tagHOOK * sphkCurrent;
|
2010-01-11 07:36:48 +00:00
|
|
|
LPARAM lParamHkCurrent;
|
|
|
|
WPARAM wParamHkCurrent;
|
|
|
|
struct tagSBTRACK* pSBTrack;
|
2013-05-10 22:28:18 +00:00
|
|
|
/* Set if there are new messages specified by WakeMask in any of the queues. */
|
|
|
|
HANDLE hEventQueueClient;
|
|
|
|
/* Handle for the above event (in the context of the process owning the queue). */
|
|
|
|
PKEVENT pEventQueueServer;
|
2009-01-17 21:14:52 +00:00
|
|
|
LIST_ENTRY PtiLink;
|
2012-06-07 12:05:17 +00:00
|
|
|
INT iCursorLevel;
|
2019-12-29 14:10:19 +00:00
|
|
|
/* Last message cursor position */
|
2010-10-03 19:18:19 +00:00
|
|
|
POINT ptLast;
|
2021-08-20 22:31:10 +00:00
|
|
|
/* Input context-related */
|
|
|
|
struct _WND* spwndDefaultIme;
|
|
|
|
struct tagIMC* spDefaultImc;
|
|
|
|
HKL hklPrev;
|
2008-10-16 17:52:38 +00:00
|
|
|
|
2015-11-03 15:18:51 +00:00
|
|
|
INT cEnterCount;
|
2013-05-10 22:28:18 +00:00
|
|
|
/* Queue of messages posted to the queue. */
|
|
|
|
LIST_ENTRY PostedMessagesListHead; // mlPost
|
2014-12-27 06:59:29 +00:00
|
|
|
WORD fsChangeBitsRemoved;
|
|
|
|
WCHAR wchInjected;
|
2013-05-10 22:28:18 +00:00
|
|
|
UINT cWindows;
|
|
|
|
UINT cVisWindows;
|
2015-03-25 22:32:35 +00:00
|
|
|
#ifndef __cplusplus /// FIXME!
|
2010-10-23 05:36:12 +00:00
|
|
|
LIST_ENTRY aphkStart[NB_HOOKS];
|
2009-05-12 01:56:39 +00:00
|
|
|
CLIENTTHREADINFO cti; // Used only when no Desktop or pcti NULL.
|
2011-02-19 21:56:43 +00:00
|
|
|
|
|
|
|
/* ReactOS */
|
2012-08-20 00:26:08 +00:00
|
|
|
|
2013-05-10 22:28:18 +00:00
|
|
|
/* Thread Queue state tracking */
|
2012-08-20 00:26:08 +00:00
|
|
|
// Send list QS_SENDMESSAGE
|
|
|
|
// Post list QS_POSTMESSAGE|QS_HOTKEY|QS_PAINT|QS_TIMER|QS_KEY
|
|
|
|
// Hard list QS_MOUSE|QS_KEY only
|
|
|
|
// Accounting of queue bit sets, the rest are flags. QS_TIMER QS_PAINT counts are handled in thread information.
|
2013-05-10 22:28:18 +00:00
|
|
|
DWORD nCntsQBits[QSIDCOUNTS]; // QS_KEY QS_MOUSEMOVE QS_MOUSEBUTTON QS_POSTMESSAGE QS_SENDMESSAGE QS_HOTKEY
|
2012-08-20 00:26:08 +00:00
|
|
|
|
2011-02-19 21:56:43 +00:00
|
|
|
LIST_ENTRY WindowListHead;
|
|
|
|
LIST_ENTRY W32CallbackListHead;
|
|
|
|
SINGLE_LIST_ENTRY ReferencesList;
|
|
|
|
ULONG cExclusiveLocks;
|
[WIN32K]
Rewrite of the GDI handle manager
- The old handle manager used a completely retarded spinlock in combination with KeDelayExecutionThread() for both exclusive
and shared locks. This is probably the most uneffective algorithm possible. It was also duplicating code everywhere and it was a overall mess It
is now replaced with a lock-free reference counter for shared locks and a pushlock for exclusive locks. -> Better performance and scalability.
- Allocate user mode object attributes from the new gdi pool. This way, we don't need any caching, since the pool serves as a cache. Its also
much faster and uses much less memory.
- Allow object allocations of different size, instead of fixed size from a table. This way a single allocation can take care of actual needs.
- Allow allcoating objects without a handle and insert them into the handle table later
- Properly synchronize the process GDIHandleCount. Now gdiview and taskmanager show the correct number of gdi handles.
- Implement a new event tracking system, that is capable of tracking all reverences and locks of objects and pool allocations to help track
possible leaks
- Make sure that all objects of a process are deleted in cleanup
- Make sure all usermode memory allocations are freed, when cleaning up the process pool.
- Make sure that each object type is using the correct type of lock (either shared or exclusive, not a mixture)
- Fix some object / reference leaks
- Lots of inferface improvements
- Use global variables for certain things instead of members in the mapped gdi handle table
- Make IntSysCreateRectpRgn create a region without a handle
- Fix detection od source and mask use in GreStretchBltMask
- Use GDIOBJ_bLockMultipleObjects in NtGdiCombineRegion to avoid possible deadlocks
- Fix NtGdiAbortPath to reset DCPATH_ACTIVE flag in the dc and only bail out on error, instead of always
- Replace DC_AllocateDcAttr and DC_AllocDcAttr with DC_bAllocDcAttr using the new user mode pool
- Remove DCU_SyncDcAttrtoUser and DCU_SynchDcAttrtoUser. Those functions were unused and didn't do anything useful anyway,
- Replace IntGdiSetDCOwnerEx and DC_SetOwnership with GreSetDCOwner, remove unused NoSetBrush parameter
- Replace GDIOBJ_bValidateHandle and IsObjectDead with GreIsHandleValid
- Chage GDIOBJ_bLockMultipleObjects: pass object type, return a BOOL, whether all objects could be locked, cleanup on failure
svn path=/trunk/; revision=51470
2011-04-28 08:26:46 +00:00
|
|
|
#if DBG
|
2012-04-26 21:48:06 +00:00
|
|
|
USHORT acExclusiveLockCount[GDIObjTypeTotal + 1];
|
[WIN32K]
Rewrite of the GDI handle manager
- The old handle manager used a completely retarded spinlock in combination with KeDelayExecutionThread() for both exclusive
and shared locks. This is probably the most uneffective algorithm possible. It was also duplicating code everywhere and it was a overall mess It
is now replaced with a lock-free reference counter for shared locks and a pushlock for exclusive locks. -> Better performance and scalability.
- Allocate user mode object attributes from the new gdi pool. This way, we don't need any caching, since the pool serves as a cache. Its also
much faster and uses much less memory.
- Allow object allocations of different size, instead of fixed size from a table. This way a single allocation can take care of actual needs.
- Allow allcoating objects without a handle and insert them into the handle table later
- Properly synchronize the process GDIHandleCount. Now gdiview and taskmanager show the correct number of gdi handles.
- Implement a new event tracking system, that is capable of tracking all reverences and locks of objects and pool allocations to help track
possible leaks
- Make sure that all objects of a process are deleted in cleanup
- Make sure all usermode memory allocations are freed, when cleaning up the process pool.
- Make sure that each object type is using the correct type of lock (either shared or exclusive, not a mixture)
- Fix some object / reference leaks
- Lots of inferface improvements
- Use global variables for certain things instead of members in the mapped gdi handle table
- Make IntSysCreateRectpRgn create a region without a handle
- Fix detection od source and mask use in GreStretchBltMask
- Use GDIOBJ_bLockMultipleObjects in NtGdiCombineRegion to avoid possible deadlocks
- Fix NtGdiAbortPath to reset DCPATH_ACTIVE flag in the dc and only bail out on error, instead of always
- Replace DC_AllocateDcAttr and DC_AllocDcAttr with DC_bAllocDcAttr using the new user mode pool
- Remove DCU_SyncDcAttrtoUser and DCU_SynchDcAttrtoUser. Those functions were unused and didn't do anything useful anyway,
- Replace IntGdiSetDCOwnerEx and DC_SetOwnership with GreSetDCOwner, remove unused NoSetBrush parameter
- Replace GDIOBJ_bValidateHandle and IsObjectDead with GreIsHandleValid
- Chage GDIOBJ_bLockMultipleObjects: pass object type, return a BOOL, whether all objects could be locked, cleanup on failure
svn path=/trunk/; revision=51470
2011-04-28 08:26:46 +00:00
|
|
|
#endif
|
2015-03-25 22:32:35 +00:00
|
|
|
#endif // __cplusplus
|
2009-08-16 21:44:59 +00:00
|
|
|
} THREADINFO;
|
2004-01-05 14:28:21 +00:00
|
|
|
|
2013-05-10 22:28:18 +00:00
|
|
|
|
|
|
|
#define IntReferenceThreadInfo(pti) \
|
2014-12-26 20:55:30 +00:00
|
|
|
InterlockedIncrement(&(pti)->RefCount)
|
2013-05-10 22:28:18 +00:00
|
|
|
|
2014-09-21 17:44:40 +00:00
|
|
|
VOID UserDeleteW32Thread(PTHREADINFO);
|
2013-05-10 22:28:18 +00:00
|
|
|
|
|
|
|
#define IntDereferenceThreadInfo(pti) \
|
2014-12-26 20:55:30 +00:00
|
|
|
do { \
|
|
|
|
if (InterlockedDecrement(&(pti)->RefCount) == 0) \
|
2013-05-10 22:28:18 +00:00
|
|
|
{ \
|
2014-12-26 20:55:30 +00:00
|
|
|
ASSERT(((pti)->TIF_flags & (TIF_INCLEANUP|TIF_DONTATTACHQUEUE)) == (TIF_INCLEANUP|TIF_DONTATTACHQUEUE)); \
|
|
|
|
UserDeleteW32Thread(pti); \
|
2013-05-10 22:28:18 +00:00
|
|
|
} \
|
2014-12-26 20:55:30 +00:00
|
|
|
} while(0)
|
2013-05-10 22:28:18 +00:00
|
|
|
|
2014-12-28 20:50:35 +00:00
|
|
|
|
2014-09-21 17:44:40 +00:00
|
|
|
#define IntReferenceProcessInfo(ppi) \
|
2014-12-26 20:55:30 +00:00
|
|
|
InterlockedIncrement((volatile LONG*)(&(ppi)->RefCount))
|
2014-09-21 17:44:40 +00:00
|
|
|
|
2015-03-10 00:12:41 +00:00
|
|
|
VOID UserDeleteW32Process(_Pre_notnull_ __drv_freesMem(Mem) PPROCESSINFO);
|
2014-09-21 17:44:40 +00:00
|
|
|
|
|
|
|
#define IntDereferenceProcessInfo(ppi) \
|
2014-12-26 20:55:30 +00:00
|
|
|
do { \
|
|
|
|
if (InterlockedDecrement((volatile LONG*)(&(ppi)->RefCount)) == 0) \
|
2014-09-21 17:44:40 +00:00
|
|
|
{ \
|
2014-12-26 20:55:30 +00:00
|
|
|
ASSERT(((ppi)->W32PF_flags & W32PF_TERMINATED) != 0); \
|
|
|
|
UserDeleteW32Process(ppi); \
|
2014-09-21 17:44:40 +00:00
|
|
|
} \
|
2014-12-26 20:55:30 +00:00
|
|
|
} while(0)
|
2014-09-21 17:44:40 +00:00
|
|
|
|
2013-05-10 22:28:18 +00:00
|
|
|
|
2006-04-05 08:05:55 +00:00
|
|
|
typedef struct _W32HEAP_USER_MAPPING
|
|
|
|
{
|
2014-12-26 20:55:30 +00:00
|
|
|
struct _W32HEAP_USER_MAPPING* Next;
|
2006-04-05 08:05:55 +00:00
|
|
|
PVOID KernelMapping;
|
|
|
|
PVOID UserMapping;
|
2007-11-15 19:42:41 +00:00
|
|
|
ULONG_PTR Limit;
|
2006-04-05 08:05:55 +00:00
|
|
|
ULONG Count;
|
|
|
|
} W32HEAP_USER_MAPPING, *PW32HEAP_USER_MAPPING;
|
2002-09-08 10:47:47 +00:00
|
|
|
|
2010-01-11 07:36:48 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
Information from STARTUPINFOW, psdk/winbase.h.
|
|
|
|
Set from PsGetCurrentProcess()->Peb->ProcessParameters.
|
|
|
|
*/
|
|
|
|
typedef struct tagUSERSTARTUPINFO
|
|
|
|
{
|
|
|
|
ULONG cb;
|
|
|
|
DWORD dwX; // STARTF_USEPOSITION StartupInfo->dwX/Y
|
|
|
|
DWORD dwY;
|
|
|
|
DWORD dwXSize; // STARTF_USESIZE StartupInfo->dwX/YSize
|
|
|
|
DWORD dwYSize;
|
|
|
|
DWORD dwFlags; // STARTF_ StartupInfo->dwFlags
|
|
|
|
WORD wShowWindow; // StartupInfo->wShowWindow
|
|
|
|
USHORT cbReserved2;
|
|
|
|
} USERSTARTUPINFO, *PUSERSTARTUPINFO;
|
|
|
|
|
2002-09-08 10:47:47 +00:00
|
|
|
typedef struct _W32PROCESS
|
|
|
|
{
|
2014-12-26 20:55:30 +00:00
|
|
|
PEPROCESS peProcess;
|
|
|
|
DWORD RefCount;
|
|
|
|
ULONG W32PF_flags;
|
|
|
|
PKEVENT InputIdleEvent;
|
|
|
|
DWORD StartCursorHideTime;
|
|
|
|
struct _W32PROCESS* NextStart;
|
|
|
|
PVOID pDCAttrList;
|
|
|
|
PVOID pBrushAttrList;
|
|
|
|
DWORD W32Pid;
|
|
|
|
LONG GDIHandleCount;
|
|
|
|
LONG UserHandleCount;
|
|
|
|
PEX_PUSH_LOCK GDIPushLock; /* Locking Process during access to structure. */
|
|
|
|
RTL_AVL_TABLE GDIEngUserMemAllocTable; /* Process AVL Table. */
|
|
|
|
LIST_ENTRY GDIDcAttrFreeList;
|
|
|
|
LIST_ENTRY GDIBrushAttrFreeList;
|
2009-07-26 16:17:50 +00:00
|
|
|
} W32PROCESS, *PW32PROCESS;
|
|
|
|
|
2010-10-23 05:36:12 +00:00
|
|
|
#define CLIBS 32
|
|
|
|
|
2015-03-25 22:32:35 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
typedef struct _PROCESSINFO : _W32PROCESS
|
|
|
|
{
|
|
|
|
#else
|
2009-07-26 16:17:50 +00:00
|
|
|
typedef struct _PROCESSINFO
|
|
|
|
{
|
2014-12-26 20:55:30 +00:00
|
|
|
W32PROCESS;
|
2015-03-25 22:32:35 +00:00
|
|
|
#endif
|
2014-12-26 20:55:30 +00:00
|
|
|
PTHREADINFO ptiList;
|
|
|
|
PTHREADINFO ptiMainThread;
|
|
|
|
struct _DESKTOP* rpdeskStartup;
|
2015-03-25 22:32:35 +00:00
|
|
|
struct _CLS *pclsPrivateList;
|
|
|
|
struct _CLS *pclsPublicList;
|
2014-12-26 20:55:30 +00:00
|
|
|
PPROCESSINFO ppiNext;
|
|
|
|
INT cThreads;
|
|
|
|
HDESK hdeskStartup;
|
|
|
|
DWORD dwhmodLibLoadedMask;
|
|
|
|
HANDLE ahmodLibLoaded[CLIBS];
|
|
|
|
struct _WINSTATION_OBJECT* prpwinsta;
|
|
|
|
HWINSTA hwinsta;
|
|
|
|
ACCESS_MASK amwinsta;
|
|
|
|
DWORD dwHotkey;
|
|
|
|
HMONITOR hMonitor;
|
2015-02-05 00:11:35 +00:00
|
|
|
UINT iClipSerialNumber;
|
2014-12-26 20:55:30 +00:00
|
|
|
struct _CURICON_OBJECT* pCursorCache;
|
2015-02-05 00:11:35 +00:00
|
|
|
PVOID pClientBase;
|
|
|
|
DWORD dwLpkEntryPoints;
|
|
|
|
PVOID pW32Job;
|
|
|
|
DWORD dwImeCompatFlags;
|
2014-12-26 20:55:30 +00:00
|
|
|
LUID luidSession;
|
|
|
|
USERSTARTUPINFO usi;
|
|
|
|
DWORD dwLayout;
|
|
|
|
DWORD dwRegisteredClasses;
|
|
|
|
|
|
|
|
/* ReactOS */
|
|
|
|
FAST_MUTEX PrivateFontListLock;
|
|
|
|
LIST_ENTRY PrivateFontListHead;
|
2017-04-08 17:32:45 +00:00
|
|
|
LIST_ENTRY PrivateMemFontListHead;
|
|
|
|
UINT PrivateMemFontHandleCount;
|
|
|
|
|
2014-12-26 20:55:30 +00:00
|
|
|
FAST_MUTEX DriverObjListLock;
|
|
|
|
LIST_ENTRY DriverObjListHead;
|
|
|
|
W32HEAP_USER_MAPPING HeapMappings;
|
|
|
|
struct _GDI_POOL* pPoolDcAttr;
|
|
|
|
struct _GDI_POOL* pPoolBrushAttr;
|
|
|
|
struct _GDI_POOL* pPoolRgnAttr;
|
2011-07-25 21:45:47 +00:00
|
|
|
|
2012-03-08 09:18:28 +00:00
|
|
|
#if DBG
|
2014-12-26 20:55:30 +00:00
|
|
|
BYTE DbgChannelLevel[DbgChCount];
|
2015-03-25 22:32:35 +00:00
|
|
|
#ifndef __cplusplus
|
2014-12-26 20:55:30 +00:00
|
|
|
DWORD DbgHandleCount[TYPE_CTYPES];
|
2015-03-25 22:32:35 +00:00
|
|
|
#endif // __cplusplus
|
|
|
|
#endif // DBG
|
2009-05-23 00:57:51 +00:00
|
|
|
} PROCESSINFO;
|
2012-02-06 12:30:59 +00:00
|
|
|
|
2012-03-08 09:18:28 +00:00
|
|
|
#if DBG
|
2012-02-06 12:30:59 +00:00
|
|
|
void NTAPI UserDbgPreServiceHook(ULONG ulSyscallId, PULONG_PTR pulArguments);
|
|
|
|
ULONG_PTR NTAPI UserDbgPostServiceHook(ULONG ulSyscallId, ULONG_PTR ulResult);
|
|
|
|
#endif
|
2018-03-18 14:53:52 +00:00
|
|
|
|
|
|
|
/* Helper function used by some wine code */
|
|
|
|
|
|
|
|
__forceinline
|
|
|
|
int
|
|
|
|
lstrlenW(
|
|
|
|
_In_ LPCWSTR lpString)
|
|
|
|
{
|
|
|
|
size_t size = wcslen(lpString);
|
|
|
|
if (size > ULONG_MAX) __fastfail(FAST_FAIL_RANGE_CHECK_FAILURE);
|
|
|
|
return (int)size;
|
|
|
|
}
|
|
|
|
|
|
|
|
#define strlenW lstrlenW
|