diff --git a/reactos/subsystems/win32/win32k/include/desktop.h b/reactos/subsystems/win32/win32k/include/desktop.h index 0a9f6ae2010..6538ffa5875 100644 --- a/reactos/subsystems/win32/win32k/include/desktop.h +++ b/reactos/subsystems/win32/win32k/include/desktop.h @@ -39,6 +39,32 @@ typedef struct _DESKTOP #define DF_DESKWNDDESTROYED 0x00010000 #define DF_DYING 0x00020000 +#define DESKTOP_READ STANDARD_RIGHTS_READ | \ + DESKTOP_ENUMERATE | \ + DESKTOP_READOBJECTS + +#define DESKTOP_WRITE STANDARD_RIGHTS_WRITE | \ + DESKTOP_CREATEMENU | \ + DESKTOP_CREATEWINDOW | \ + DESKTOP_HOOKCONTROL | \ + DESKTOP_JOURNALPLAYBACK | \ + DESKTOP_JOURNALRECORD | \ + DESKTOP_WRITEOBJECTS + +#define DESKTOP_EXECUTE STANDARD_RIGHTS_EXECUTE | \ + DESKTOP_SWITCHDESKTOP + +#define DESKTOP_ALL_ACCESS STANDARD_RIGHTS_REQUIRED | \ + DESKTOP_CREATEMENU | \ + DESKTOP_CREATEWINDOW | \ + DESKTOP_ENUMERATE | \ + DESKTOP_HOOKCONTROL | \ + DESKTOP_JOURNALPLAYBACK | \ + DESKTOP_JOURNALRECORD | \ + DESKTOP_READOBJECTS | \ + DESKTOP_SWITCHDESKTOP | \ + DESKTOP_WRITEOBJECTS + extern PDESKTOP InputDesktop; extern HDESK InputDesktopHandle; extern PCLS DesktopWindowClass; diff --git a/reactos/subsystems/win32/win32k/include/winsta.h b/reactos/subsystems/win32/win32k/include/winsta.h index 7fda4ab0f39..35fa4c7eff8 100644 --- a/reactos/subsystems/win32/win32k/include/winsta.h +++ b/reactos/subsystems/win32/win32k/include/winsta.h @@ -69,6 +69,32 @@ extern WINSTATION_OBJECT *InputWindowStation; extern PPROCESSINFO LogonProcess; extern HWND hwndSAS; +#define WINSTA_READ STANDARD_RIGHTS_READ | \ + WINSTA_ENUMDESKTOPS | \ + WINSTA_ENUMERATE | \ + WINSTA_READATTRIBUTES | \ + WINSTA_READSCREEN + +#define WINSTA_WRITE STANDARD_RIGHTS_WRITE | \ + WINSTA_ACCESSCLIPBOARD | \ + WINSTA_CREATEDESKTOP | \ + WINSTA_WRITEATTRIBUTES + +#define WINSTA_EXECUTE STANDARD_RIGHTS_EXECUTE | \ + WINSTA_ACCESSGLOBALATOMS | \ + WINSTA_EXITWINDOWS + +#define WINSTA_ACCESS_ALL STANDARD_RIGHTS_REQUIRED | \ + WINSTA_ACCESSCLIPBOARD | \ + WINSTA_ACCESSGLOBALATOMS | \ + WINSTA_CREATEDESKTOP | \ + WINSTA_ENUMDESKTOPS | \ + WINSTA_ENUMERATE | \ + WINSTA_EXITWINDOWS | \ + WINSTA_READATTRIBUTES | \ + WINSTA_READSCREEN | \ + WINSTA_WRITEATTRIBUTES + INIT_FUNCTION NTSTATUS NTAPI diff --git a/reactos/subsystems/win32/win32k/ntuser/desktop.c b/reactos/subsystems/win32/win32k/ntuser/desktop.c index d41f0426cd8..1428b9cda0b 100644 --- a/reactos/subsystems/win32/win32k/ntuser/desktop.c +++ b/reactos/subsystems/win32/win32k/ntuser/desktop.c @@ -24,28 +24,6 @@ PDESKTOP InputDesktop = NULL; HDESK InputDesktopHandle = NULL; HDC ScreenDeviceContext = NULL; -GENERIC_MAPPING IntDesktopMapping = -{ - STANDARD_RIGHTS_READ | DESKTOP_ENUMERATE | - DESKTOP_READOBJECTS, - STANDARD_RIGHTS_WRITE | DESKTOP_CREATEMENU | - DESKTOP_CREATEWINDOW | - DESKTOP_HOOKCONTROL | - DESKTOP_JOURNALPLAYBACK | - DESKTOP_JOURNALRECORD | - DESKTOP_WRITEOBJECTS, - STANDARD_RIGHTS_EXECUTE | DESKTOP_SWITCHDESKTOP, - STANDARD_RIGHTS_REQUIRED | DESKTOP_CREATEMENU | - DESKTOP_CREATEWINDOW | - DESKTOP_ENUMERATE | - DESKTOP_HOOKCONTROL | - DESKTOP_JOURNALPLAYBACK | - DESKTOP_JOURNALRECORD | - DESKTOP_READOBJECTS | - DESKTOP_SWITCHDESKTOP | - DESKTOP_WRITEOBJECTS -}; - /* OBJECT CALLBACKS **********************************************************/ NTSTATUS @@ -195,9 +173,15 @@ NTSTATUS NTAPI InitDesktopImpl(VOID) { + GENERIC_MAPPING IntDesktopMapping = { DESKTOP_READ, + DESKTOP_WRITE, + DESKTOP_EXECUTE, + DESKTOP_ALL_ACCESS}; + /* Set Desktop Object Attributes */ ExDesktopObjectType->TypeInfo.DefaultNonPagedPoolCharge = sizeof(DESKTOP); ExDesktopObjectType->TypeInfo.GenericMapping = IntDesktopMapping; + ExDesktopObjectType->TypeInfo.ValidAccessMask = DESKTOP_ALL_ACCESS; return STATUS_SUCCESS; } @@ -346,7 +330,7 @@ IntParseDesktopPath(PEPROCESS Process, ExWindowStationObjectType, KernelMode, NULL, - 0, + WINSTA_ACCESS_ALL, NULL, (HANDLE*)hWinSta); @@ -380,7 +364,7 @@ IntParseDesktopPath(PEPROCESS Process, ExDesktopObjectType, KernelMode, NULL, - 0, + DESKTOP_ALL_ACCESS, NULL, (HANDLE*)hDesktop); diff --git a/reactos/subsystems/win32/win32k/ntuser/winsta.c b/reactos/subsystems/win32/win32k/ntuser/winsta.c index edbda779c05..8ea5e617b9c 100644 --- a/reactos/subsystems/win32/win32k/ntuser/winsta.c +++ b/reactos/subsystems/win32/win32k/ntuser/winsta.c @@ -22,17 +22,6 @@ HWND hwndSAS = NULL; /* INITALIZATION FUNCTIONS ****************************************************/ -static GENERIC_MAPPING IntWindowStationMapping = - { - STANDARD_RIGHTS_READ | WINSTA_ENUMDESKTOPS | WINSTA_ENUMERATE | WINSTA_READATTRIBUTES | WINSTA_READSCREEN, - STANDARD_RIGHTS_WRITE | WINSTA_ACCESSCLIPBOARD | WINSTA_CREATEDESKTOP | WINSTA_WRITEATTRIBUTES, - STANDARD_RIGHTS_EXECUTE | WINSTA_ACCESSGLOBALATOMS | WINSTA_EXITWINDOWS, - STANDARD_RIGHTS_REQUIRED | WINSTA_ACCESSCLIPBOARD | WINSTA_ACCESSGLOBALATOMS | WINSTA_CREATEDESKTOP | - WINSTA_ENUMDESKTOPS | WINSTA_ENUMERATE | WINSTA_EXITWINDOWS | - WINSTA_READATTRIBUTES | WINSTA_READSCREEN | WINSTA_WRITEATTRIBUTES - }; - - INIT_FUNCTION NTSTATUS NTAPI @@ -42,14 +31,17 @@ InitWindowStationImpl(VOID) HANDLE WindowStationsDirectory; UNICODE_STRING UnicodeString; NTSTATUS Status; + GENERIC_MAPPING IntWindowStationMapping = { WINSTA_READ, + WINSTA_WRITE, + WINSTA_EXECUTE, + WINSTA_ACCESS_ALL}; /* * Create the '\Windows\WindowStations' directory */ RtlInitUnicodeString(&UnicodeString, WINSTA_ROOT_NAME); - InitializeObjectAttributes(&ObjectAttributes, &UnicodeString, - 0, NULL, NULL); + InitializeObjectAttributes(&ObjectAttributes, &UnicodeString, 0, NULL, NULL); Status = ZwCreateDirectoryObject(&WindowStationsDirectory, 0, &ObjectAttributes); if (!NT_SUCCESS(Status)) @@ -62,6 +54,7 @@ InitWindowStationImpl(VOID) /* Set Winsta Object Attributes */ ExWindowStationObjectType->TypeInfo.DefaultNonPagedPoolCharge = sizeof(WINSTATION_OBJECT); ExWindowStationObjectType->TypeInfo.GenericMapping = IntWindowStationMapping; + ExWindowStationObjectType->TypeInfo.ValidAccessMask = WINSTA_ACCESS_ALL; return STATUS_SUCCESS; }