3 * COPYRIGHT: See COPYING in the top level directory
4 * PROJECT: ReactOS kernel
5 * FILE: ntoskrnl/ex/win32k.c
6 * PURPOSE: Executive Win32 subsystem support
8 * PROGRAMMERS: Alex Ionescu (alex@relsoft.net) - Moved callbacks to win32k and cleanup.
9 * Casper S. Hornstrup (chorns@users.sourceforge.net)
14 #include <internal/debug.h>
16 /* DATA **********************************************************************/
18 POBJECT_TYPE EXPORTED ExWindowStationObjectType
= NULL
;
19 POBJECT_TYPE EXPORTED ExDesktopObjectType
= NULL
;
21 static GENERIC_MAPPING ExpWindowStationMapping
= {
23 STANDARD_RIGHTS_READ
| WINSTA_ENUMDESKTOPS
| WINSTA_ENUMERATE
| WINSTA_READATTRIBUTES
| WINSTA_READSCREEN
,
24 STANDARD_RIGHTS_WRITE
| WINSTA_ACCESSCLIPBOARD
| WINSTA_CREATEDESKTOP
| WINSTA_WRITEATTRIBUTES
,
25 STANDARD_RIGHTS_EXECUTE
| WINSTA_ACCESSGLOBALATOMS
| WINSTA_EXITWINDOWS
,
26 STANDARD_RIGHTS_REQUIRED
| WINSTA_ACCESSCLIPBOARD
| WINSTA_ACCESSGLOBALATOMS
| WINSTA_CREATEDESKTOP
|
27 WINSTA_ENUMDESKTOPS
| WINSTA_ENUMERATE
| WINSTA_EXITWINDOWS
|
28 WINSTA_READATTRIBUTES
| WINSTA_READSCREEN
| WINSTA_WRITEATTRIBUTES
31 static GENERIC_MAPPING ExpDesktopMapping
= {
33 STANDARD_RIGHTS_READ
| DESKTOP_ENUMERATE
| DESKTOP_READOBJECTS
,
34 STANDARD_RIGHTS_WRITE
| DESKTOP_CREATEMENU
| DESKTOP_CREATEWINDOW
| DESKTOP_HOOKCONTROL
|
35 DESKTOP_JOURNALPLAYBACK
| DESKTOP_JOURNALRECORD
| DESKTOP_WRITEOBJECTS
,
36 STANDARD_RIGHTS_EXECUTE
| DESKTOP_SWITCHDESKTOP
,
37 STANDARD_RIGHTS_REQUIRED
| DESKTOP_CREATEMENU
| DESKTOP_CREATEWINDOW
| DESKTOP_ENUMERATE
|
38 DESKTOP_HOOKCONTROL
| DESKTOP_JOURNALPLAYBACK
| DESKTOP_JOURNALRECORD
|
39 DESKTOP_READOBJECTS
| DESKTOP_SWITCHDESKTOP
| DESKTOP_WRITEOBJECTS
42 OB_OPEN_METHOD ExpWindowStationObjectOpen
= NULL
;
43 OB_PARSE_METHOD ExpWindowStationObjectParse
= NULL
;
44 OB_DELETE_METHOD ExpWindowStationObjectDelete
= NULL
;
45 OB_FIND_METHOD ExpWindowStationObjectFind
= NULL
;
46 OB_CREATE_METHOD ExpDesktopObjectCreate
= NULL
;
47 OB_DELETE_METHOD ExpDesktopObjectDelete
= NULL
;
49 /* FUNCTIONS ****************************************************************/
53 ExpWinStaObjectOpen(OB_OPEN_REASON Reason
,
57 ACCESS_MASK GrantedAccess
)
59 /* Call the Registered Callback */
60 return ExpWindowStationObjectOpen(Reason
,
69 ExpWinStaObjectDelete(PVOID DeletedObject
)
71 /* Call the Registered Callback */
72 ExpWindowStationObjectDelete(DeletedObject
);
77 ExpWinStaObjectFind(PWINSTATION_OBJECT WinStaObject
,
81 /* Call the Registered Callback */
82 return ExpWindowStationObjectFind(WinStaObject
,
89 ExpWinStaObjectParse(PVOID Object
,
91 PUNICODE_STRING FullPath
,
95 /* Call the Registered Callback */
96 return ExpWindowStationObjectParse(Object
,
105 ExpDesktopCreate(PVOID ObjectBody
,
108 struct _OBJECT_ATTRIBUTES
* ObjectAttributes
)
110 /* Call the Registered Callback */
111 return ExpDesktopObjectCreate(ObjectBody
,
119 ExpDesktopDelete(PVOID DeletedObject
)
121 /* Call the Registered Callback */
122 ExpDesktopObjectDelete(DeletedObject
);
129 OBJECT_TYPE_INITIALIZER ObjectTypeInitializer
;
132 DPRINT("Creating window station Object Type\n");
134 /* Create the window station Object Type */
135 RtlZeroMemory(&ObjectTypeInitializer
, sizeof(ObjectTypeInitializer
));
136 RtlInitUnicodeString(&Name
, L
"WindowStation");
137 ObjectTypeInitializer
.Length
= sizeof(ObjectTypeInitializer
);
138 ObjectTypeInitializer
.DefaultNonPagedPoolCharge
= sizeof(WINSTATION_OBJECT
);
139 ObjectTypeInitializer
.GenericMapping
= ExpWindowStationMapping
;
140 ObjectTypeInitializer
.PoolType
= NonPagedPool
;
141 ObjectTypeInitializer
.UseDefaultObject
= TRUE
;
142 ObjectTypeInitializer
.OpenProcedure
= ExpWinStaObjectOpen
;
143 ObjectTypeInitializer
.DeleteProcedure
= ExpWinStaObjectDelete
;
144 ObjectTypeInitializer
.ParseProcedure
= ExpWinStaObjectParse
;
145 ObpCreateTypeObject(&ObjectTypeInitializer
, &Name
, &ExWindowStationObjectType
);
147 /* Create desktop object type */
148 RtlInitUnicodeString(&Name
, L
"Desktop");
149 ObjectTypeInitializer
.DefaultNonPagedPoolCharge
= sizeof(DESKTOP_OBJECT
);
150 ObjectTypeInitializer
.GenericMapping
= ExpDesktopMapping
;
151 ObjectTypeInitializer
.OpenProcedure
= NULL
;
152 ObjectTypeInitializer
.DeleteProcedure
= ExpDesktopDelete
;
153 ObjectTypeInitializer
.ParseProcedure
= NULL
;
155 ObpCreateTypeObject(&ObjectTypeInitializer
, &Name
, &ExDesktopObjectType
);