strip whitespace from end of lines
[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 OBJECT_CREATE_ROUTINE ExpWindowStationObjectCreate = NULL;
43 OBJECT_PARSE_ROUTINE ExpWindowStationObjectParse = NULL;
44 OBJECT_DELETE_ROUTINE ExpWindowStationObjectDelete = NULL;
45 OBJECT_FIND_ROUTINE ExpWindowStationObjectFind = NULL;
46 OBJECT_CREATE_ROUTINE ExpDesktopObjectCreate = NULL;
47 OBJECT_DELETE_ROUTINE ExpDesktopObjectDelete = NULL;
48
49 /* FUNCTIONS ****************************************************************/
50
51 NTSTATUS
52 STDCALL
53 ExpWinStaObjectCreate(PVOID ObjectBody,
54 PVOID Parent,
55 PWSTR RemainingPath,
56 struct _OBJECT_ATTRIBUTES* ObjectAttributes)
57 {
58 /* Call the Registered Callback */
59 return ExpWindowStationObjectCreate(ObjectBody,
60 Parent,
61 RemainingPath,
62 ObjectAttributes);
63 }
64
65 VOID
66 STDCALL
67 ExpWinStaObjectDelete(PVOID DeletedObject)
68 {
69 /* Call the Registered Callback */
70 ExpWindowStationObjectDelete(DeletedObject);
71 }
72
73 PVOID
74 STDCALL
75 ExpWinStaObjectFind(PWINSTATION_OBJECT WinStaObject,
76 PWSTR Name,
77 ULONG Attributes)
78 {
79 /* Call the Registered Callback */
80 return ExpWindowStationObjectFind(WinStaObject,
81 Name,
82 Attributes);
83 }
84
85 NTSTATUS
86 STDCALL
87 ExpWinStaObjectParse(PVOID Object,
88 PVOID *NextObject,
89 PUNICODE_STRING FullPath,
90 PWSTR *Path,
91 ULONG Attributes)
92 {
93 /* Call the Registered Callback */
94 return ExpWindowStationObjectParse(Object,
95 NextObject,
96 FullPath,
97 Path,
98 Attributes);
99 }
100
101 NTSTATUS
102 STDCALL
103 ExpDesktopCreate(PVOID ObjectBody,
104 PVOID Parent,
105 PWSTR RemainingPath,
106 struct _OBJECT_ATTRIBUTES* ObjectAttributes)
107 {
108 /* Call the Registered Callback */
109 return ExpDesktopObjectCreate(ObjectBody,
110 Parent,
111 RemainingPath,
112 ObjectAttributes);
113 }
114
115 VOID
116 STDCALL
117 ExpDesktopDelete(PVOID DeletedObject)
118 {
119 /* Call the Registered Callback */
120 ExpDesktopObjectDelete(DeletedObject);
121 }
122
123 VOID
124 INIT_FUNCTION
125 ExpWin32kInit(VOID)
126 {
127 /* Create window station object type */
128 ExWindowStationObjectType = ExAllocatePool(NonPagedPool, sizeof(OBJECT_TYPE));
129 ExWindowStationObjectType->Tag = TAG('W', 'I', 'N', 'S');
130 ExWindowStationObjectType->TotalObjects = 0;
131 ExWindowStationObjectType->TotalHandles = 0;
132 ExWindowStationObjectType->PeakObjects = 0;
133 ExWindowStationObjectType->PeakHandles = 0;
134 ExWindowStationObjectType->PagedPoolCharge = 0;
135 ExWindowStationObjectType->NonpagedPoolCharge = sizeof(WINSTATION_OBJECT);
136 ExWindowStationObjectType->Mapping = &ExpWindowStationMapping;
137 ExWindowStationObjectType->Dump = NULL;
138 ExWindowStationObjectType->Open = NULL;
139 ExWindowStationObjectType->Close = NULL;
140 ExWindowStationObjectType->Delete = ExpWinStaObjectDelete;
141 ExWindowStationObjectType->Parse = ExpWinStaObjectParse;
142 ExWindowStationObjectType->Security = NULL;
143 ExWindowStationObjectType->QueryName = NULL;
144 ExWindowStationObjectType->OkayToClose = NULL;
145 ExWindowStationObjectType->Create = ExpWinStaObjectCreate;
146 ExWindowStationObjectType->DuplicationNotify = NULL;
147 RtlInitUnicodeString(&ExWindowStationObjectType->TypeName, L"WindowStation");
148 ObpCreateTypeObject(ExWindowStationObjectType);
149
150 /* Create desktop object type */
151 ExDesktopObjectType = ExAllocatePool(NonPagedPool, sizeof(OBJECT_TYPE));
152 ExDesktopObjectType->Tag = TAG('D', 'E', 'S', 'K');
153 ExDesktopObjectType->TotalObjects = 0;
154 ExDesktopObjectType->TotalHandles = 0;
155 ExDesktopObjectType->PeakObjects = 0;
156 ExDesktopObjectType->PeakHandles = 0;
157 ExDesktopObjectType->PagedPoolCharge = 0;
158 ExDesktopObjectType->NonpagedPoolCharge = sizeof(DESKTOP_OBJECT);
159 ExDesktopObjectType->Mapping = &ExpDesktopMapping;
160 ExDesktopObjectType->Dump = NULL;
161 ExDesktopObjectType->Open = NULL;
162 ExDesktopObjectType->Close = NULL;
163 ExDesktopObjectType->Delete = ExpDesktopDelete;
164 ExDesktopObjectType->Parse = NULL;
165 ExDesktopObjectType->Security = NULL;
166 ExDesktopObjectType->QueryName = NULL;
167 ExDesktopObjectType->OkayToClose = NULL;
168 ExDesktopObjectType->Create = ExpDesktopCreate;
169 ExDesktopObjectType->DuplicationNotify = NULL;
170 RtlInitUnicodeString(&ExDesktopObjectType->TypeName, L"Desktop");
171 ObpCreateTypeObject(ExDesktopObjectType);
172 }
173
174 /* EOF */