mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 17:34:57 +00:00
[win32k]
- Initilize ExDesktopObjectType->TypeInfo.ValidAccessMask and ExWindowStationObjectType->TypeInfo.ValidAccessMask to let win32k use access checks to desktop and window station objects - When opening a desktop and window station during THREADINFO initialization, give full access to the objects svn path=/trunk/; revision=55556
This commit is contained in:
parent
022f4b2ce5
commit
fb671e96e8
4 changed files with 66 additions and 37 deletions
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue