- Fix some small formatting issues.
[reactos.git] / reactos / ntoskrnl / ex / win32k.c
index 4de1504..0b5bd5d 100644 (file)
@@ -1,65 +1,63 @@
-/* $Id$
- *
+/*
  * COPYRIGHT:       See COPYING in the top level directory
- * PROJECT:         ReactOS kernel
+ * PROJECT:         ReactOS Kernel
  * FILE:            ntoskrnl/ex/win32k.c
- * PURPOSE:         Executive Win32 subsystem support
- *
- * PROGRAMMERS:     Alex Ionescu (alex@relsoft.net) - Moved callbacks to win32k and cleanup.
- *                  Casper S. Hornstrup (chorns@users.sourceforge.net)
+ * PURPOSE:         Executive Win32 Object Support (Desktop/WinStation)
+ * PROGRAMMERS:     Alex Ionescu (alex@relsoft.net)
  */
 
 #include <ntoskrnl.h>
 #define NDEBUG
 #include <internal/debug.h>
 
-/* DATA **********************************************************************/
+#if defined (ALLOC_PRAGMA)
+#pragma alloc_text(INIT, ExpWin32kInit)
+#endif
 
-POBJECT_TYPE EXPORTED ExWindowStationObjectType = NULL;
-POBJECT_TYPE EXPORTED ExDesktopObjectType = NULL;
+/* DATA **********************************************************************/
 
-static GENERIC_MAPPING ExpWindowStationMapping = {
+POBJECT_TYPE ExWindowStationObjectType = NULL;
+POBJECT_TYPE ExDesktopObjectType = NULL;
 
-    STANDARD_RIGHTS_READ     | WINSTA_ENUMDESKTOPS      | WINSTA_ENUMERATE         | WINSTA_READATTRIBUTES | WINSTA_READSCREEN,
-    STANDARD_RIGHTS_WRITE    | WINSTA_ACCESSCLIPBOARD   | WINSTA_CREATEDESKTOP     | WINSTA_WRITEATTRIBUTES,
-    STANDARD_RIGHTS_EXECUTE  | WINSTA_ACCESSGLOBALATOMS | WINSTA_EXITWINDOWS,
-    STANDARD_RIGHTS_REQUIRED | WINSTA_ACCESSCLIPBOARD   | WINSTA_ACCESSGLOBALATOMS | WINSTA_CREATEDESKTOP  |
-                               WINSTA_ENUMDESKTOPS      | WINSTA_ENUMERATE         | WINSTA_EXITWINDOWS    |
-                               WINSTA_READATTRIBUTES    | WINSTA_READSCREEN        | WINSTA_WRITEATTRIBUTES
+static GENERIC_MAPPING ExpWindowStationMapping = 
+{
+    STANDARD_RIGHTS_READ,
+    STANDARD_RIGHTS_WRITE,
+    STANDARD_RIGHTS_EXECUTE,
+    STANDARD_RIGHTS_REQUIRED
 };
 
-static GENERIC_MAPPING ExpDesktopMapping = {
-
-    STANDARD_RIGHTS_READ     | DESKTOP_ENUMERATE       | DESKTOP_READOBJECTS,
-    STANDARD_RIGHTS_WRITE    | DESKTOP_CREATEMENU      | DESKTOP_CREATEWINDOW    | DESKTOP_HOOKCONTROL   |
-                               DESKTOP_JOURNALPLAYBACK | DESKTOP_JOURNALRECORD   | DESKTOP_WRITEOBJECTS,
-    STANDARD_RIGHTS_EXECUTE  | DESKTOP_SWITCHDESKTOP,
-    STANDARD_RIGHTS_REQUIRED | DESKTOP_CREATEMENU      | DESKTOP_CREATEWINDOW    | DESKTOP_ENUMERATE     |
-                               DESKTOP_HOOKCONTROL     | DESKTOP_JOURNALPLAYBACK | DESKTOP_JOURNALRECORD |
-                               DESKTOP_READOBJECTS     | DESKTOP_SWITCHDESKTOP   | DESKTOP_WRITEOBJECTS
+static GENERIC_MAPPING ExpDesktopMapping =
+{
+    STANDARD_RIGHTS_READ,
+    STANDARD_RIGHTS_WRITE,
+    STANDARD_RIGHTS_EXECUTE,
+    STANDARD_RIGHTS_REQUIRED
 };
 
-OBJECT_CREATE_ROUTINE ExpWindowStationObjectCreate = NULL;
-OBJECT_PARSE_ROUTINE ExpWindowStationObjectParse = NULL;
-OBJECT_DELETE_ROUTINE ExpWindowStationObjectDelete = NULL;
-OBJECT_FIND_ROUTINE ExpWindowStationObjectFind = NULL;
-OBJECT_CREATE_ROUTINE ExpDesktopObjectCreate = NULL;
-OBJECT_DELETE_ROUTINE ExpDesktopObjectDelete = NULL;
+OB_OPEN_METHOD ExpWindowStationObjectOpen = NULL;
+OB_PARSE_METHOD ExpWindowStationObjectParse = NULL;
+OB_DELETE_METHOD ExpWindowStationObjectDelete = NULL;
+OB_FIND_METHOD ExpWindowStationObjectFind = NULL;
+OB_CREATE_METHOD ExpDesktopObjectCreate = NULL;
+OB_DELETE_METHOD ExpDesktopObjectDelete = NULL;
 
 /* FUNCTIONS ****************************************************************/
 
 NTSTATUS
 STDCALL
-ExpWinStaObjectCreate(PVOID ObjectBody,
-                      PVOID Parent,
-                      PWSTR RemainingPath,
-                      struct _OBJECT_ATTRIBUTES* ObjectAttributes)
+ExpWinStaObjectOpen(OB_OPEN_REASON Reason,
+                    PVOID ObjectBody,
+                    PEPROCESS Process,
+                    ULONG HandleCount,
+                    ACCESS_MASK GrantedAccess)
 {
     /* Call the Registered Callback */
-    return ExpWindowStationObjectCreate(ObjectBody,
-                                        Parent,
-                                        RemainingPath,
-                                        ObjectAttributes);
+    return ExpWindowStationObjectOpen(Reason,
+                                      ObjectBody,
+                                      Process,
+                                      HandleCount,
+                                      GrantedAccess);
 }
 
 VOID
@@ -72,7 +70,7 @@ ExpWinStaObjectDelete(PVOID DeletedObject)
 
 PVOID
 STDCALL
-ExpWinStaObjectFind(PWINSTATION_OBJECT WinStaObject,
+ExpWinStaObjectFind(PVOID WinStaObject,
                     PWSTR Name,
                     ULONG Attributes)
 {
@@ -101,9 +99,9 @@ ExpWinStaObjectParse(PVOID Object,
 NTSTATUS
 STDCALL
 ExpDesktopCreate(PVOID ObjectBody,
-                       PVOID Parent,
-                       PWSTR RemainingPath,
-                       struct _OBJECT_ATTRIBUTES* ObjectAttributes)
+                 PVOID Parent,
+                 PWSTR RemainingPath,
+                 POBJECT_ATTRIBUTES ObjectAttributes)
 {
     /* Call the Registered Callback */
     return ExpDesktopObjectCreate(ObjectBody,
@@ -122,53 +120,33 @@ ExpDesktopDelete(PVOID DeletedObject)
 
 VOID
 INIT_FUNCTION
+STDCALL
 ExpWin32kInit(VOID)
 {
-    /* Create window station object type */
-    ExWindowStationObjectType = ExAllocatePool(NonPagedPool, sizeof(OBJECT_TYPE));
-    ExWindowStationObjectType->Tag = TAG('W', 'I', 'N', 'S');
-    ExWindowStationObjectType->TotalObjects = 0;
-    ExWindowStationObjectType->TotalHandles = 0;
-    ExWindowStationObjectType->PeakObjects = 0;
-    ExWindowStationObjectType->PeakHandles = 0;
-    ExWindowStationObjectType->PagedPoolCharge = 0;
-    ExWindowStationObjectType->NonpagedPoolCharge = sizeof(WINSTATION_OBJECT);
-    ExWindowStationObjectType->Mapping = &ExpWindowStationMapping;
-    ExWindowStationObjectType->Dump = NULL;
-    ExWindowStationObjectType->Open = NULL;
-    ExWindowStationObjectType->Close = NULL;
-    ExWindowStationObjectType->Delete = ExpWinStaObjectDelete;
-    ExWindowStationObjectType->Parse = ExpWinStaObjectParse;
-    ExWindowStationObjectType->Security = NULL;
-    ExWindowStationObjectType->QueryName = NULL;
-    ExWindowStationObjectType->OkayToClose = NULL;
-    ExWindowStationObjectType->Create = ExpWinStaObjectCreate;
-    ExWindowStationObjectType->DuplicationNotify = NULL;
-    RtlInitUnicodeString(&ExWindowStationObjectType->TypeName, L"WindowStation");
-    ObpCreateTypeObject(ExWindowStationObjectType);
+    OBJECT_TYPE_INITIALIZER ObjectTypeInitializer;
+    UNICODE_STRING Name;
+    DPRINT("Creating Win32 Object Types\n");
+
+    /* Create the window station Object Type */
+    RtlZeroMemory(&ObjectTypeInitializer, sizeof(ObjectTypeInitializer));
+    RtlInitUnicodeString(&Name, L"WindowStation");
+    ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer);
+    ObjectTypeInitializer.GenericMapping = ExpWindowStationMapping;
+    ObjectTypeInitializer.PoolType = NonPagedPool;
+    ObjectTypeInitializer.OpenProcedure = ExpWinStaObjectOpen;
+    ObjectTypeInitializer.DeleteProcedure = ExpWinStaObjectDelete;
+    ObjectTypeInitializer.ParseProcedure = ExpWinStaObjectParse;
+    ObpCreateTypeObject(&ObjectTypeInitializer,
+                        &Name,
+                        &ExWindowStationObjectType);
 
     /* Create desktop object type */
-    ExDesktopObjectType = ExAllocatePool(NonPagedPool, sizeof(OBJECT_TYPE));
-    ExDesktopObjectType->Tag = TAG('D', 'E', 'S', 'K');
-    ExDesktopObjectType->TotalObjects = 0;
-    ExDesktopObjectType->TotalHandles = 0;
-    ExDesktopObjectType->PeakObjects = 0;
-    ExDesktopObjectType->PeakHandles = 0;
-    ExDesktopObjectType->PagedPoolCharge = 0;
-    ExDesktopObjectType->NonpagedPoolCharge = sizeof(DESKTOP_OBJECT);
-    ExDesktopObjectType->Mapping = &ExpDesktopMapping;
-    ExDesktopObjectType->Dump = NULL;
-    ExDesktopObjectType->Open = NULL;
-    ExDesktopObjectType->Close = NULL;
-    ExDesktopObjectType->Delete = ExpDesktopDelete;
-    ExDesktopObjectType->Parse = NULL;
-    ExDesktopObjectType->Security = NULL;
-    ExDesktopObjectType->QueryName = NULL;
-    ExDesktopObjectType->OkayToClose = NULL;
-    ExDesktopObjectType->Create = ExpDesktopCreate;
-    ExDesktopObjectType->DuplicationNotify = NULL;
-    RtlInitUnicodeString(&ExDesktopObjectType->TypeName, L"Desktop");
-    ObpCreateTypeObject(ExDesktopObjectType);
+    RtlInitUnicodeString(&Name, L"Desktop");
+    ObjectTypeInitializer.GenericMapping = ExpDesktopMapping;
+    ObjectTypeInitializer.OpenProcedure = NULL;
+    ObjectTypeInitializer.DeleteProcedure = ExpDesktopDelete;
+    ObjectTypeInitializer.ParseProcedure = NULL;
+    ObpCreateTypeObject(&ObjectTypeInitializer, &Name, &ExDesktopObjectType);
 }
 
 /* EOF */