[CMAKE]
[reactos.git] / ntoskrnl / ex / win32k.c
1 /*
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)
7 */
8
9 #include <ntoskrnl.h>
10 #define NDEBUG
11 #include <debug.h>
12
13 #if defined (ALLOC_PRAGMA)
14 #pragma alloc_text(INIT, ExpWin32kInit)
15 #endif
16
17 /* DATA **********************************************************************/
18
19 POBJECT_TYPE ExWindowStationObjectType = NULL;
20 POBJECT_TYPE ExDesktopObjectType = NULL;
21
22 GENERIC_MAPPING ExpWindowStationMapping =
23 {
24 STANDARD_RIGHTS_READ,
25 STANDARD_RIGHTS_WRITE,
26 STANDARD_RIGHTS_EXECUTE,
27 STANDARD_RIGHTS_REQUIRED
28 };
29
30 GENERIC_MAPPING ExpDesktopMapping =
31 {
32 STANDARD_RIGHTS_READ,
33 STANDARD_RIGHTS_WRITE,
34 STANDARD_RIGHTS_EXECUTE,
35 STANDARD_RIGHTS_REQUIRED
36 };
37
38 PKWIN32_PARSEMETHOD_CALLOUT ExpWindowStationObjectParse = NULL;
39 PKWIN32_DELETEMETHOD_CALLOUT ExpWindowStationObjectDelete = NULL;
40 PKWIN32_DELETEMETHOD_CALLOUT ExpDesktopObjectDelete = NULL;
41
42 /* FUNCTIONS ****************************************************************/
43
44 VOID
45 NTAPI
46 ExpWinStaObjectDelete(PVOID DeletedObject)
47 {
48 WIN32_DELETEMETHOD_PARAMETERS Parameters;
49
50 /* Fill out the callback structure */
51 Parameters.Object = DeletedObject;
52
53 /* Call the Registered Callback */
54 ExpWindowStationObjectDelete(&Parameters);
55 }
56
57 NTSTATUS
58 NTAPI
59 ExpWinStaObjectParse(IN PVOID ParseObject,
60 IN PVOID ObjectType,
61 IN OUT PACCESS_STATE AccessState,
62 IN KPROCESSOR_MODE AccessMode,
63 IN ULONG Attributes,
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,
68 OUT PVOID *Object)
69 {
70 WIN32_PARSEMETHOD_PARAMETERS Parameters;
71
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;
83
84 /* Call the Registered Callback */
85 return ExpWindowStationObjectParse(&Parameters);
86 }
87 VOID
88 NTAPI
89 ExpDesktopDelete(PVOID DeletedObject)
90 {
91 WIN32_DELETEMETHOD_PARAMETERS Parameters;
92
93 /* Fill out the callback structure */
94 Parameters.Object = DeletedObject;
95
96 /* Call the Registered Callback */
97 ExpDesktopObjectDelete(&Parameters);
98 }
99
100 VOID
101 INIT_FUNCTION
102 NTAPI
103 ExpWin32kInit(VOID)
104 {
105 OBJECT_TYPE_INITIALIZER ObjectTypeInitializer;
106 UNICODE_STRING Name;
107 DPRINT("Creating Win32 Object Types\n");
108
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,
119 NULL,
120 &ExWindowStationObjectType);
121
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,
129 NULL,
130 &ExDesktopObjectType);
131 }
132
133 /* EOF */