Remove some debug messages at boot (DPRINT1 changed to DPRINT)
[reactos.git] / reactos / ntoskrnl / ex / win32k.c
1 /* $Id$
2 *
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
7 *
8 * PROGRAMMERS: Alex Ionescu (alex@relsoft.net) - Moved callbacks to win32k and cleanup.
9 * Casper S. Hornstrup (chorns@users.sourceforge.net)
10 */
11
12 #include <ntoskrnl.h>
13 #define NDEBUG
14 #include <internal/debug.h>
15
16 /* DATA **********************************************************************/
17
18 POBJECT_TYPE EXPORTED ExWindowStationObjectType = NULL;
19 POBJECT_TYPE EXPORTED ExDesktopObjectType = NULL;
20
21 static GENERIC_MAPPING ExpWindowStationMapping = {
22
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
29 };
30
31 static GENERIC_MAPPING ExpDesktopMapping = {
32
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
40 };
41
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;
48
49 /* FUNCTIONS ****************************************************************/
50
51 NTSTATUS
52 STDCALL
53 ExpWinStaObjectOpen(OB_OPEN_REASON Reason,
54 PVOID ObjectBody,
55 PEPROCESS Process,
56 ULONG HandleCount,
57 ACCESS_MASK GrantedAccess)
58 {
59 /* Call the Registered Callback */
60 return ExpWindowStationObjectOpen(Reason,
61 ObjectBody,
62 Process,
63 HandleCount,
64 GrantedAccess);
65 }
66
67 VOID
68 STDCALL
69 ExpWinStaObjectDelete(PVOID DeletedObject)
70 {
71 /* Call the Registered Callback */
72 ExpWindowStationObjectDelete(DeletedObject);
73 }
74
75 PVOID
76 STDCALL
77 ExpWinStaObjectFind(PWINSTATION_OBJECT WinStaObject,
78 PWSTR Name,
79 ULONG Attributes)
80 {
81 /* Call the Registered Callback */
82 return ExpWindowStationObjectFind(WinStaObject,
83 Name,
84 Attributes);
85 }
86
87 NTSTATUS
88 STDCALL
89 ExpWinStaObjectParse(PVOID Object,
90 PVOID *NextObject,
91 PUNICODE_STRING FullPath,
92 PWSTR *Path,
93 ULONG Attributes)
94 {
95 /* Call the Registered Callback */
96 return ExpWindowStationObjectParse(Object,
97 NextObject,
98 FullPath,
99 Path,
100 Attributes);
101 }
102
103 NTSTATUS
104 STDCALL
105 ExpDesktopCreate(PVOID ObjectBody,
106 PVOID Parent,
107 PWSTR RemainingPath,
108 struct _OBJECT_ATTRIBUTES* ObjectAttributes)
109 {
110 /* Call the Registered Callback */
111 return ExpDesktopObjectCreate(ObjectBody,
112 Parent,
113 RemainingPath,
114 ObjectAttributes);
115 }
116
117 VOID
118 STDCALL
119 ExpDesktopDelete(PVOID DeletedObject)
120 {
121 /* Call the Registered Callback */
122 ExpDesktopObjectDelete(DeletedObject);
123 }
124
125 VOID
126 INIT_FUNCTION
127 ExpWin32kInit(VOID)
128 {
129 OBJECT_TYPE_INITIALIZER ObjectTypeInitializer;
130 UNICODE_STRING Name;
131
132 DPRINT("Creating window station Object Type\n");
133
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);
146
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;
154
155 ObpCreateTypeObject(&ObjectTypeInitializer, &Name, &ExDesktopObjectType);
156 }
157
158 /* EOF */