2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Kernel
4 * FILE: ntoskrnl/ex/win32k.c
5 * PURPOSE: Executive Win32 Object Support (Desktop/WinStation)
6 * PROGRAMMERS: Alex Ionescu (alex@relsoft.net)
13 #if defined (ALLOC_PRAGMA)
14 #pragma alloc_text(INIT, ExpWin32kInit)
17 /* DATA **********************************************************************/
19 POBJECT_TYPE ExWindowStationObjectType
= NULL
;
20 POBJECT_TYPE ExDesktopObjectType
= NULL
;
22 GENERIC_MAPPING ExpWindowStationMapping
=
25 STANDARD_RIGHTS_WRITE
,
26 STANDARD_RIGHTS_EXECUTE
,
27 STANDARD_RIGHTS_REQUIRED
30 GENERIC_MAPPING ExpDesktopMapping
=
33 STANDARD_RIGHTS_WRITE
,
34 STANDARD_RIGHTS_EXECUTE
,
35 STANDARD_RIGHTS_REQUIRED
38 PKWIN32_PARSEMETHOD_CALLOUT ExpWindowStationObjectParse
= NULL
;
39 PKWIN32_DELETEMETHOD_CALLOUT ExpWindowStationObjectDelete
= NULL
;
40 PKWIN32_DELETEMETHOD_CALLOUT ExpDesktopObjectDelete
= NULL
;
42 /* FUNCTIONS ****************************************************************/
46 ExpWinStaObjectDelete(PVOID DeletedObject
)
48 WIN32_DELETEMETHOD_PARAMETERS Parameters
;
50 /* Fill out the callback structure */
51 Parameters
.Object
= DeletedObject
;
53 /* Call the Registered Callback */
54 ExpWindowStationObjectDelete(&Parameters
);
59 ExpWinStaObjectParse(IN PVOID ParseObject
,
61 IN OUT PACCESS_STATE AccessState
,
62 IN KPROCESSOR_MODE AccessMode
,
64 IN OUT PUNICODE_STRING CompleteName
,
65 IN OUT PUNICODE_STRING RemainingName
,
66 IN OUT PVOID Context OPTIONAL
,
67 IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL
,
70 WIN32_PARSEMETHOD_PARAMETERS Parameters
;
72 /* Fill out the callback structure */
73 Parameters
.ParseObject
= ParseObject
;
74 Parameters
.ObjectType
= ObjectType
;
75 Parameters
.AccessState
= AccessState
;
76 Parameters
.AccessMode
= AccessMode
;
77 Parameters
.Attributes
= Attributes
;
78 Parameters
.CompleteName
= CompleteName
;
79 Parameters
.RemainingName
= RemainingName
;
80 Parameters
.Context
= Context
;
81 Parameters
.SecurityQos
= SecurityQos
;
82 Parameters
.Object
= Object
;
84 /* Call the Registered Callback */
85 return ExpWindowStationObjectParse(&Parameters
);
89 ExpDesktopDelete(PVOID DeletedObject
)
91 WIN32_DELETEMETHOD_PARAMETERS Parameters
;
93 /* Fill out the callback structure */
94 Parameters
.Object
= DeletedObject
;
96 /* Call the Registered Callback */
97 ExpDesktopObjectDelete(&Parameters
);
105 OBJECT_TYPE_INITIALIZER ObjectTypeInitializer
;
107 DPRINT("Creating Win32 Object Types\n");
109 /* Create the window station Object Type */
110 RtlZeroMemory(&ObjectTypeInitializer
, sizeof(ObjectTypeInitializer
));
111 RtlInitUnicodeString(&Name
, L
"WindowStation");
112 ObjectTypeInitializer
.Length
= sizeof(ObjectTypeInitializer
);
113 ObjectTypeInitializer
.GenericMapping
= ExpWindowStationMapping
;
114 ObjectTypeInitializer
.PoolType
= NonPagedPool
;
115 ObjectTypeInitializer
.DeleteProcedure
= ExpWinStaObjectDelete
;
116 ObjectTypeInitializer
.ParseProcedure
= ExpWinStaObjectParse
;
117 ObCreateObjectType(&Name
,
118 &ObjectTypeInitializer
,
120 &ExWindowStationObjectType
);
122 /* Create desktop object type */
123 RtlInitUnicodeString(&Name
, L
"Desktop");
124 ObjectTypeInitializer
.GenericMapping
= ExpDesktopMapping
;
125 ObjectTypeInitializer
.DeleteProcedure
= ExpDesktopDelete
;
126 ObjectTypeInitializer
.ParseProcedure
= NULL
;
127 ObCreateObjectType(&Name
,
128 &ObjectTypeInitializer
,
130 &ExDesktopObjectType
);