[TASKMGR] Process page: Allow using "Open File Location" functionality without runnin...
[reactos.git] / win32ss / user / ntuser / winsta.h
1 #pragma once
2
3 #define WINSTA_OBJ_DIR L"\\Windows\\WindowStations"
4 #define SESSION_DIR L"\\Sessions"
5
6 /* Window Station Status Flags */
7 #define WSS_LOCKED (1)
8 #define WSS_NOINTERACTIVE (2)
9 #define WSS_NOIO (4)
10 #define WSS_SHUTDOWN (8)
11 #define WSS_DYING (16)
12 #define WSS_REALSHUTDOWN (32)
13
14 // See also: https://reactos.org/wiki/Techwiki:Win32k/WINDOWSTATION
15 typedef struct _WINSTATION_OBJECT
16 {
17 DWORD dwSessionId;
18
19 LIST_ENTRY DesktopListHead;
20 PRTL_ATOM_TABLE AtomTable;
21
22 ULONG Flags;
23 struct tagKL* spklList;
24 PTHREADINFO ptiClipLock;
25 PTHREADINFO ptiDrawingClipboard;
26 PWND spwndClipOpen;
27 PWND spwndClipViewer;
28 PWND spwndClipOwner;
29 PCLIP pClipBase; // Not a clip object.
30 DWORD cNumClipFormats;
31 INT iClipSerialNumber;
32 INT iClipSequenceNumber;
33 INT fClipboardChanged : 1;
34 INT fInDelayedRendering : 1;
35
36 PWND spwndClipboardListener;
37 LUID luidEndSession;
38 LUID luidUser;
39 PVOID psidUser;
40
41 /* ReactOS-specific */
42 struct _DESKTOP* ActiveDesktop;
43 HANDLE ShellWindow;
44 HANDLE ShellListView;
45 } WINSTATION_OBJECT, *PWINSTATION_OBJECT;
46
47 #ifndef _WIN64
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);
55 #endif
56
57 extern WINSTATION_OBJECT *InputWindowStation;
58 extern HANDLE gpidLogon;
59 extern HWND hwndSAS;
60 extern UNICODE_STRING gustrWindowStationsDir;
61
62 CODE_SEG("INIT")
63 NTSTATUS
64 NTAPI
65 InitWindowStationImpl(VOID);
66
67 NTSTATUS
68 NTAPI
69 UserCreateWinstaDirectory(VOID);
70
71 NTSTATUS
72 NTAPI
73 IntWinStaObjectDelete(
74 _In_ PVOID Parameters);
75
76 NTSTATUS
77 NTAPI
78 IntWinStaObjectParse(
79 _In_ PVOID Parameters);
80
81 NTSTATUS
82 NTAPI
83 IntWinStaOkToClose(
84 _In_ PVOID Parameters);
85
86 NTSTATUS
87 FASTCALL
88 IntValidateWindowStationHandle(
89 HWINSTA WindowStation,
90 KPROCESSOR_MODE AccessMode,
91 ACCESS_MASK DesiredAccess,
92 PWINSTATION_OBJECT *Object,
93 POBJECT_HANDLE_INFORMATION pObjectHandleInfo);
94
95 NTSTATUS
96 FASTCALL
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,
103 DWORD Unknown2,
104 DWORD Unknown3,
105 DWORD Unknown4,
106 DWORD Unknown5,
107 DWORD Unknown6);
108
109 PWINSTATION_OBJECT FASTCALL IntGetProcessWindowStation(HWINSTA *phWinSta OPTIONAL);
110 BOOL FASTCALL UserSetProcessWindowStation(HWINSTA hWindowStation);
111
112 BOOL FASTCALL co_IntInitializeDesktopGraphics(VOID);
113 VOID FASTCALL IntEndDesktopGraphics(VOID);
114 BOOL FASTCALL CheckWinstaAttributeAccess(ACCESS_MASK);
115
116 /* EOF */