implemented sweeping of handle tables
[reactos.git] / reactos / ntoskrnl / lpc / port.c
index b21e6f9..fec68bb 100644 (file)
@@ -1,15 +1,11 @@
 /* $Id$
- * 
+ *
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS kernel
  * FILE:            ntoskrnl/lpc/port.c
  * PURPOSE:         Communication mechanism
- * PROGRAMMER:      David Welch (welch@cwcom.net)
- * UPDATE HISTORY:
- *                  Created 22/05/98
  *
- *     2000-06-04 (ea)
- *             ntoskrnl/nt/port.c moved in ntoskrnl/lpc/port.c
+ * PROGRAMMERS:     David Welch (welch@cwcom.net)
  */
 
 /* INCLUDES *****************************************************************/
 #define NDEBUG
 #include <internal/debug.h>
 
+#if defined (ALLOC_PRAGMA)
+#pragma alloc_text(INIT, LpcpInitSystem)
+#endif
 
 /* GLOBALS *******************************************************************/
 
-OBJECT_TYPE    LpcPortObjectType = {0, };
+POBJECT_TYPE   LpcPortObjectType = 0;
 ULONG          LpcpNextMessageId = 0; /* 0 is not a valid ID */
 FAST_MUTEX     LpcpLock; /* global internal sync in LPC facility */
 
-static GENERIC_MAPPING ExpPortMapping = {
-       STANDARD_RIGHTS_READ,
-       STANDARD_RIGHTS_WRITE,
-       0,
-       PORT_ALL_ACCESS};
+static GENERIC_MAPPING LpcpPortMapping = 
+{
+    STANDARD_RIGHTS_READ,
+    STANDARD_RIGHTS_WRITE,
+    0,
+    PORT_ALL_ACCESS
+};
 
 /* FUNCTIONS *****************************************************************/
 
 
-NTSTATUS INIT_FUNCTION
-NiInitPort (VOID)
+NTSTATUS
+INIT_FUNCTION
+NTAPI
+LpcpInitSystem (VOID)
 {
-   RtlZeroMemory (& LpcPortObjectType, sizeof (OBJECT_TYPE));
-   
-   RtlRosInitUnicodeStringFromLiteral(&LpcPortObjectType.TypeName,L"Port");
-   
-   LpcPortObjectType.Tag = TAG('L', 'P', 'R', 'T');
-   LpcPortObjectType.MaxObjects = ULONG_MAX;
-   LpcPortObjectType.MaxHandles = ULONG_MAX;
-   LpcPortObjectType.TotalObjects = 0;
-   LpcPortObjectType.TotalHandles = 0;
-   LpcPortObjectType.PagedPoolCharge = 0;
-   LpcPortObjectType.NonpagedPoolCharge = sizeof(EPORT);
-   LpcPortObjectType.Mapping = &ExpPortMapping;
-   LpcPortObjectType.Dump = NULL;
-   LpcPortObjectType.Open = NULL;
-   LpcPortObjectType.Close = NiClosePort;
-   LpcPortObjectType.Delete = NiDeletePort;
-   LpcPortObjectType.Parse = NULL;
-   LpcPortObjectType.Security = NULL;
-   LpcPortObjectType.QueryName = NULL;
-   LpcPortObjectType.OkayToClose = NULL;
-   LpcPortObjectType.Create = NiCreatePort;
-   LpcPortObjectType.DuplicationNotify = NULL;
-
-   ObpCreateTypeObject(& LpcPortObjectType);
-   
-   LpcpNextMessageId = 0;
-
-   ExInitializeFastMutex (& LpcpLock);
-   
-   return(STATUS_SUCCESS);
+    OBJECT_TYPE_INITIALIZER ObjectTypeInitializer;
+    UNICODE_STRING Name;
+
+    DPRINT("Creating Port Object Type\n");
+  
+    /* Create the Port Object Type */
+    RtlZeroMemory(&ObjectTypeInitializer, sizeof(ObjectTypeInitializer));
+    RtlInitUnicodeString(&Name, L"Port");
+    ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer);
+    ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(EPORT);
+    ObjectTypeInitializer.GenericMapping = LpcpPortMapping;
+    ObjectTypeInitializer.PoolType = NonPagedPool;
+    ObjectTypeInitializer.UseDefaultObject = TRUE;
+    ObjectTypeInitializer.CloseProcedure = LpcpClosePort;
+    ObjectTypeInitializer.DeleteProcedure = LpcpDeletePort;
+    ObpCreateTypeObject(&ObjectTypeInitializer, &Name, &LpcPortObjectType);
+    
+    LpcpNextMessageId = 0;
+    ExInitializeFastMutex (& LpcpLock);
+
+    return(STATUS_SUCCESS);
 }
 
 
 /**********************************************************************
  * NAME                                                        INTERNAL
  *     NiInitializePort/3
- *     
+ *
  * DESCRIPTION
  *     Initialize the EPORT object attributes. The Port
  *     object enters the inactive state.
@@ -89,7 +84,7 @@ NiInitPort (VOID)
  *     otherwise.
  */
 NTSTATUS STDCALL
-NiInitializePort (IN OUT  PEPORT Port,
+LpcpInitializePort (IN OUT  PEPORT Port,
                  IN      USHORT Type,
                  IN      PEPORT Parent OPTIONAL)
 {
@@ -101,7 +96,7 @@ NiInitializePort (IN OUT  PEPORT Port,
   }
   memset (Port, 0, sizeof(EPORT));
   KeInitializeSpinLock (& Port->Lock);
-  KeInitializeSemaphore( &Port->Semaphore, 0, LONG_MAX );
+  KeInitializeSemaphore( &Port->Semaphore, 0, MAXLONG );
   Port->RequestPort = Parent;
   Port->OtherPort = NULL;
   Port->QueueLength = 0;
@@ -110,7 +105,7 @@ NiInitializePort (IN OUT  PEPORT Port,
   Port->State = EPORT_INACTIVE;
   InitializeListHead (& Port->QueueListHead);
   InitializeListHead (& Port->ConnectQueueListHead);
+
   return (STATUS_SUCCESS);
 }
 
@@ -121,7 +116,7 @@ NiInitializePort (IN OUT  PEPORT Port,
 /**********************************************************************
  * NAME                                                        SYSTEM
  *     NtImpersonateClientOfPort/2
- *     
+ *
  * DESCRIPTION
  *
  * ARGUMENTS
@@ -132,7 +127,7 @@ NiInitializePort (IN OUT  PEPORT Port,
  */
 NTSTATUS STDCALL
 NtImpersonateClientOfPort (HANDLE              PortHandle,
-                          PLPC_MESSAGE ClientMessage)
+                          PPORT_MESSAGE        ClientMessage)
 {
   UNIMPLEMENTED;
   return(STATUS_NOT_IMPLEMENTED);