3 #define WINSTA_OBJ_DIR L"\\Windows\\WindowStations"
4 #define SESSION_DIR L"\\Sessions"
6 /* Window Station Status Flags */
8 #define WSS_NOINTERACTIVE (2)
10 #define WSS_SHUTDOWN (8)
11 #define WSS_DYING (16)
12 #define WSS_REALSHUTDOWN (32)
14 // See also: https://reactos.org/wiki/Techwiki:Win32k/WINDOWSTATION
15 typedef struct _WINSTATION_OBJECT
19 LIST_ENTRY DesktopListHead
;
20 PRTL_ATOM_TABLE AtomTable
;
23 struct tagKL
* spklList
;
24 PTHREADINFO ptiClipLock
;
25 PTHREADINFO ptiDrawingClipboard
;
29 PCLIP pClipBase
; // Not a clip object.
30 DWORD cNumClipFormats
;
31 INT iClipSerialNumber
;
32 INT iClipSequenceNumber
;
33 INT fClipboardChanged
: 1;
34 INT fInDelayedRendering
: 1;
36 PWND spwndClipboardListener
;
41 /* ReactOS-specific */
42 struct _DESKTOP
* ActiveDesktop
;
45 } WINSTATION_OBJECT
, *PWINSTATION_OBJECT
;
48 C_ASSERT(offsetof(WINSTATION_OBJECT
, Flags
) == 0x10);
49 C_ASSERT(offsetof(WINSTATION_OBJECT
, spklList
) == 0x14);
50 C_ASSERT(offsetof(WINSTATION_OBJECT
, ptiClipLock
) == 0x18);
51 C_ASSERT(offsetof(WINSTATION_OBJECT
, ptiDrawingClipboard
) == 0x1c);
52 C_ASSERT(offsetof(WINSTATION_OBJECT
, spwndClipOpen
) == 0x20);
53 C_ASSERT(offsetof(WINSTATION_OBJECT
, spwndClipViewer
) == 0x24);
54 C_ASSERT(offsetof(WINSTATION_OBJECT
, spwndClipOwner
) == 0x28);
57 extern WINSTATION_OBJECT
*InputWindowStation
;
58 extern HANDLE gpidLogon
;
60 extern UNICODE_STRING gustrWindowStationsDir
;
65 InitWindowStationImpl(VOID
);
69 UserCreateWinstaDirectory(VOID
);
73 IntWinStaObjectDelete(
74 _In_ PVOID Parameters
);
79 _In_ PVOID Parameters
);
84 _In_ PVOID Parameters
);
88 IntValidateWindowStationHandle(
89 HWINSTA WindowStation
,
90 KPROCESSOR_MODE AccessMode
,
91 ACCESS_MASK DesiredAccess
,
92 PWINSTATION_OBJECT
*Object
,
93 POBJECT_HANDLE_INFORMATION pObjectHandleInfo
);
97 IntCreateWindowStation(
98 OUT HWINSTA
* phWinSta
,
99 IN POBJECT_ATTRIBUTES ObjectAttributes
,
100 IN KPROCESSOR_MODE AccessMode
,
101 IN KPROCESSOR_MODE OwnerMode
,
102 IN ACCESS_MASK dwDesiredAccess
,
109 PWINSTATION_OBJECT FASTCALL
IntGetProcessWindowStation(HWINSTA
*phWinSta OPTIONAL
);
110 BOOL FASTCALL
UserSetProcessWindowStation(HWINSTA hWindowStation
);
112 BOOL FASTCALL
co_IntInitializeDesktopGraphics(VOID
);
113 VOID FASTCALL
IntEndDesktopGraphics(VOID
);
114 BOOL FASTCALL
CheckWinstaAttributeAccess(ACCESS_MASK
);