mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 01:35:47 +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_DESKWNDDESTROYED 0x00010000
|
||||||
#define DF_DYING 0x00020000
|
#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 PDESKTOP InputDesktop;
|
||||||
extern HDESK InputDesktopHandle;
|
extern HDESK InputDesktopHandle;
|
||||||
extern PCLS DesktopWindowClass;
|
extern PCLS DesktopWindowClass;
|
||||||
|
|
|
@ -69,6 +69,32 @@ extern WINSTATION_OBJECT *InputWindowStation;
|
||||||
extern PPROCESSINFO LogonProcess;
|
extern PPROCESSINFO LogonProcess;
|
||||||
extern HWND hwndSAS;
|
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
|
INIT_FUNCTION
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
|
|
|
@ -24,28 +24,6 @@ PDESKTOP InputDesktop = NULL;
|
||||||
HDESK InputDesktopHandle = NULL;
|
HDESK InputDesktopHandle = NULL;
|
||||||
HDC ScreenDeviceContext = 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 **********************************************************/
|
/* OBJECT CALLBACKS **********************************************************/
|
||||||
|
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
|
@ -195,9 +173,15 @@ NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
InitDesktopImpl(VOID)
|
InitDesktopImpl(VOID)
|
||||||
{
|
{
|
||||||
|
GENERIC_MAPPING IntDesktopMapping = { DESKTOP_READ,
|
||||||
|
DESKTOP_WRITE,
|
||||||
|
DESKTOP_EXECUTE,
|
||||||
|
DESKTOP_ALL_ACCESS};
|
||||||
|
|
||||||
/* Set Desktop Object Attributes */
|
/* Set Desktop Object Attributes */
|
||||||
ExDesktopObjectType->TypeInfo.DefaultNonPagedPoolCharge = sizeof(DESKTOP);
|
ExDesktopObjectType->TypeInfo.DefaultNonPagedPoolCharge = sizeof(DESKTOP);
|
||||||
ExDesktopObjectType->TypeInfo.GenericMapping = IntDesktopMapping;
|
ExDesktopObjectType->TypeInfo.GenericMapping = IntDesktopMapping;
|
||||||
|
ExDesktopObjectType->TypeInfo.ValidAccessMask = DESKTOP_ALL_ACCESS;
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -346,7 +330,7 @@ IntParseDesktopPath(PEPROCESS Process,
|
||||||
ExWindowStationObjectType,
|
ExWindowStationObjectType,
|
||||||
KernelMode,
|
KernelMode,
|
||||||
NULL,
|
NULL,
|
||||||
0,
|
WINSTA_ACCESS_ALL,
|
||||||
NULL,
|
NULL,
|
||||||
(HANDLE*)hWinSta);
|
(HANDLE*)hWinSta);
|
||||||
|
|
||||||
|
@ -380,7 +364,7 @@ IntParseDesktopPath(PEPROCESS Process,
|
||||||
ExDesktopObjectType,
|
ExDesktopObjectType,
|
||||||
KernelMode,
|
KernelMode,
|
||||||
NULL,
|
NULL,
|
||||||
0,
|
DESKTOP_ALL_ACCESS,
|
||||||
NULL,
|
NULL,
|
||||||
(HANDLE*)hDesktop);
|
(HANDLE*)hDesktop);
|
||||||
|
|
||||||
|
|
|
@ -22,17 +22,6 @@ HWND hwndSAS = NULL;
|
||||||
|
|
||||||
/* INITALIZATION FUNCTIONS ****************************************************/
|
/* 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
|
INIT_FUNCTION
|
||||||
NTSTATUS
|
NTSTATUS
|
||||||
NTAPI
|
NTAPI
|
||||||
|
@ -42,14 +31,17 @@ InitWindowStationImpl(VOID)
|
||||||
HANDLE WindowStationsDirectory;
|
HANDLE WindowStationsDirectory;
|
||||||
UNICODE_STRING UnicodeString;
|
UNICODE_STRING UnicodeString;
|
||||||
NTSTATUS Status;
|
NTSTATUS Status;
|
||||||
|
GENERIC_MAPPING IntWindowStationMapping = { WINSTA_READ,
|
||||||
|
WINSTA_WRITE,
|
||||||
|
WINSTA_EXECUTE,
|
||||||
|
WINSTA_ACCESS_ALL};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create the '\Windows\WindowStations' directory
|
* Create the '\Windows\WindowStations' directory
|
||||||
*/
|
*/
|
||||||
|
|
||||||
RtlInitUnicodeString(&UnicodeString, WINSTA_ROOT_NAME);
|
RtlInitUnicodeString(&UnicodeString, WINSTA_ROOT_NAME);
|
||||||
InitializeObjectAttributes(&ObjectAttributes, &UnicodeString,
|
InitializeObjectAttributes(&ObjectAttributes, &UnicodeString, 0, NULL, NULL);
|
||||||
0, NULL, NULL);
|
|
||||||
Status = ZwCreateDirectoryObject(&WindowStationsDirectory, 0,
|
Status = ZwCreateDirectoryObject(&WindowStationsDirectory, 0,
|
||||||
&ObjectAttributes);
|
&ObjectAttributes);
|
||||||
if (!NT_SUCCESS(Status))
|
if (!NT_SUCCESS(Status))
|
||||||
|
@ -62,6 +54,7 @@ InitWindowStationImpl(VOID)
|
||||||
/* Set Winsta Object Attributes */
|
/* Set Winsta Object Attributes */
|
||||||
ExWindowStationObjectType->TypeInfo.DefaultNonPagedPoolCharge = sizeof(WINSTATION_OBJECT);
|
ExWindowStationObjectType->TypeInfo.DefaultNonPagedPoolCharge = sizeof(WINSTATION_OBJECT);
|
||||||
ExWindowStationObjectType->TypeInfo.GenericMapping = IntWindowStationMapping;
|
ExWindowStationObjectType->TypeInfo.GenericMapping = IntWindowStationMapping;
|
||||||
|
ExWindowStationObjectType->TypeInfo.ValidAccessMask = WINSTA_ACCESS_ALL;
|
||||||
|
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue