2010-02-26 11:43:19 +00:00
|
|
|
#pragma once
|
2001-06-12 17:51:51 +00:00
|
|
|
|
2012-02-24 15:22:11 +00:00
|
|
|
#define WINSTA_OBJ_DIR L"\\Windows\\WindowStations"
|
|
|
|
#define SESSION_DIR L"\\Sessions"
|
2003-11-10 17:44:50 +00:00
|
|
|
|
2004-05-01 16:43:15 +00:00
|
|
|
/* Window Station Status Flags */
|
2015-02-04 21:59:15 +00:00
|
|
|
#define WSS_LOCKED (1)
|
|
|
|
#define WSS_NOINTERACTIVE (2)
|
|
|
|
#define WSS_NOIO (4)
|
|
|
|
#define WSS_SHUTDOWN (8)
|
|
|
|
#define WSS_DYING (16)
|
|
|
|
#define WSS_REALSHUTDOWN (32)
|
2004-05-01 16:43:15 +00:00
|
|
|
|
2022-07-31 01:25:07 +00:00
|
|
|
// See also: https://reactos.org/wiki/Techwiki:Win32k/WINDOWSTATION
|
2005-06-25 20:05:56 +00:00
|
|
|
typedef struct _WINSTATION_OBJECT
|
|
|
|
{
|
2013-03-16 10:12:16 +00:00
|
|
|
DWORD dwSessionId;
|
|
|
|
|
2005-06-25 20:05:56 +00:00
|
|
|
LIST_ENTRY DesktopListHead;
|
|
|
|
PRTL_ATOM_TABLE AtomTable;
|
2007-03-08 13:31:33 +00:00
|
|
|
|
2022-07-31 01:25:07 +00:00
|
|
|
ULONG Flags;
|
|
|
|
struct tagKL* spklList;
|
2011-09-08 16:32:54 +00:00
|
|
|
PTHREADINFO ptiClipLock;
|
|
|
|
PTHREADINFO ptiDrawingClipboard;
|
|
|
|
PWND spwndClipOpen;
|
|
|
|
PWND spwndClipViewer;
|
|
|
|
PWND spwndClipOwner;
|
|
|
|
PCLIP pClipBase; // Not a clip object.
|
|
|
|
DWORD cNumClipFormats;
|
|
|
|
INT iClipSerialNumber;
|
|
|
|
INT iClipSequenceNumber;
|
|
|
|
INT fClipboardChanged : 1;
|
|
|
|
INT fInDelayedRendering : 1;
|
2007-10-19 23:21:45 +00:00
|
|
|
|
2015-02-04 21:59:15 +00:00
|
|
|
PWND spwndClipboardListener;
|
|
|
|
LUID luidEndSession;
|
|
|
|
LUID luidUser;
|
|
|
|
PVOID psidUser;
|
|
|
|
|
2022-07-31 01:25:07 +00:00
|
|
|
/* ReactOS-specific */
|
|
|
|
struct _DESKTOP* ActiveDesktop;
|
|
|
|
HANDLE ShellWindow;
|
|
|
|
HANDLE ShellListView;
|
2005-06-25 20:05:56 +00:00
|
|
|
} WINSTATION_OBJECT, *PWINSTATION_OBJECT;
|
|
|
|
|
2022-07-31 01:25:07 +00:00
|
|
|
#ifndef _WIN64
|
|
|
|
C_ASSERT(offsetof(WINSTATION_OBJECT, Flags) == 0x10);
|
|
|
|
C_ASSERT(offsetof(WINSTATION_OBJECT, spklList) == 0x14);
|
|
|
|
C_ASSERT(offsetof(WINSTATION_OBJECT, ptiClipLock) == 0x18);
|
|
|
|
C_ASSERT(offsetof(WINSTATION_OBJECT, ptiDrawingClipboard) == 0x1c);
|
|
|
|
C_ASSERT(offsetof(WINSTATION_OBJECT, spwndClipOpen) == 0x20);
|
|
|
|
C_ASSERT(offsetof(WINSTATION_OBJECT, spwndClipViewer) == 0x24);
|
|
|
|
C_ASSERT(offsetof(WINSTATION_OBJECT, spwndClipOwner) == 0x28);
|
|
|
|
#endif
|
|
|
|
|
2003-11-23 11:39:48 +00:00
|
|
|
extern WINSTATION_OBJECT *InputWindowStation;
|
2014-11-23 16:09:00 +00:00
|
|
|
extern HANDLE gpidLogon;
|
2011-02-18 20:16:43 +00:00
|
|
|
extern HWND hwndSAS;
|
2012-02-24 15:22:11 +00:00
|
|
|
extern UNICODE_STRING gustrWindowStationsDir;
|
2001-06-12 17:51:51 +00:00
|
|
|
|
2021-05-11 15:13:14 +00:00
|
|
|
CODE_SEG("INIT")
|
2010-11-03 00:51:19 +00:00
|
|
|
NTSTATUS
|
|
|
|
NTAPI
|
2001-06-12 17:51:51 +00:00
|
|
|
InitWindowStationImpl(VOID);
|
|
|
|
|
2013-11-19 23:09:13 +00:00
|
|
|
NTSTATUS
|
|
|
|
NTAPI
|
2016-08-06 12:07:54 +00:00
|
|
|
UserCreateWinstaDirectory(VOID);
|
2013-11-19 23:09:13 +00:00
|
|
|
|
|
|
|
NTSTATUS
|
2018-06-16 17:43:40 +00:00
|
|
|
NTAPI
|
2013-11-19 23:09:13 +00:00
|
|
|
IntWinStaObjectDelete(
|
|
|
|
_In_ PVOID Parameters);
|
|
|
|
|
|
|
|
NTSTATUS
|
2018-06-16 17:43:40 +00:00
|
|
|
NTAPI
|
2013-11-19 23:09:13 +00:00
|
|
|
IntWinStaObjectParse(
|
|
|
|
_In_ PVOID Parameters);
|
2011-03-22 09:19:26 +00:00
|
|
|
|
2013-11-19 23:09:13 +00:00
|
|
|
NTSTATUS
|
|
|
|
NTAPI
|
2018-06-16 17:43:40 +00:00
|
|
|
IntWinStaOkToClose(
|
2013-11-19 23:09:13 +00:00
|
|
|
_In_ PVOID Parameters);
|
|
|
|
|
|
|
|
NTSTATUS
|
|
|
|
FASTCALL
|
2003-11-23 11:39:48 +00:00
|
|
|
IntValidateWindowStationHandle(
|
|
|
|
HWINSTA WindowStation,
|
|
|
|
KPROCESSOR_MODE AccessMode,
|
|
|
|
ACCESS_MASK DesiredAccess,
|
2015-02-04 21:59:15 +00:00
|
|
|
PWINSTATION_OBJECT *Object,
|
|
|
|
POBJECT_HANDLE_INFORMATION pObjectHandleInfo);
|
2013-11-19 23:09:13 +00:00
|
|
|
|
2018-06-16 17:45:07 +00:00
|
|
|
NTSTATUS
|
|
|
|
FASTCALL
|
|
|
|
IntCreateWindowStation(
|
|
|
|
OUT HWINSTA* phWinSta,
|
|
|
|
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
|
|
|
IN KPROCESSOR_MODE AccessMode,
|
2018-07-22 18:22:49 +00:00
|
|
|
IN KPROCESSOR_MODE OwnerMode,
|
2018-06-16 17:45:07 +00:00
|
|
|
IN ACCESS_MASK dwDesiredAccess,
|
|
|
|
DWORD Unknown2,
|
|
|
|
DWORD Unknown3,
|
|
|
|
DWORD Unknown4,
|
|
|
|
DWORD Unknown5,
|
|
|
|
DWORD Unknown6);
|
|
|
|
|
2022-08-03 03:45:10 +00:00
|
|
|
PWINSTATION_OBJECT FASTCALL IntGetProcessWindowStation(HWINSTA *phWinSta OPTIONAL);
|
2012-02-24 15:22:11 +00:00
|
|
|
BOOL FASTCALL UserSetProcessWindowStation(HWINSTA hWindowStation);
|
2003-11-23 11:39:48 +00:00
|
|
|
|
2012-02-24 15:22:11 +00:00
|
|
|
BOOL FASTCALL co_IntInitializeDesktopGraphics(VOID);
|
|
|
|
VOID FASTCALL IntEndDesktopGraphics(VOID);
|
2015-02-04 21:59:15 +00:00
|
|
|
BOOL FASTCALL CheckWinstaAttributeAccess(ACCESS_MASK);
|
2022-03-16 20:03:56 +00:00
|
|
|
|
2001-06-12 17:51:51 +00:00
|
|
|
/* EOF */
|