Register the LPC Port object object in the system name space.
[reactos.git] / reactos / ntoskrnl / lpc / port.c
index 7ad2c13..cb34003 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: port.c,v 1.1 2000/06/04 17:27:39 ea Exp $
+/* $Id: port.c,v 1.18 2004/08/04 12:50:42 ea Exp $
  * 
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS kernel
 
 /* INCLUDES *****************************************************************/
 
+#include <limits.h>
+
 #include <ddk/ntddk.h>
 #include <internal/ob.h>
-#include <string.h>
-#include <internal/string.h>
 #include <internal/port.h>
 #include <internal/dbg.h>
+#include <internal/pool.h>
+#include <rosrtl/string.h>
 
 #define NDEBUG
 #include <internal/debug.h>
 POBJECT_TYPE   ExPortType = NULL;
 ULONG          EiNextLpcMessageId = 0;
 
+static GENERIC_MAPPING ExpPortMapping = {
+       STANDARD_RIGHTS_READ,
+       STANDARD_RIGHTS_WRITE,
+       0,
+       PORT_ALL_ACCESS};
+
 /* FUNCTIONS *****************************************************************/
 
 
-NTSTATUS NiInitPort (VOID)
+NTSTATUS INIT_FUNCTION
+NiInitPort (VOID)
 {
    ExPortType = ExAllocatePool(NonPagedPool,sizeof(OBJECT_TYPE));
    
-   RtlInitUnicodeString(&ExPortType->TypeName,L"Port");
+   RtlRosInitUnicodeStringFromLiteral(&ExPortType->TypeName,L"Port");
    
+   ExPortType->Tag = TAG('L', 'P', 'R', 'T');
    ExPortType->MaxObjects = ULONG_MAX;
    ExPortType->MaxHandles = ULONG_MAX;
    ExPortType->TotalObjects = 0;
    ExPortType->TotalHandles = 0;
    ExPortType->PagedPoolCharge = 0;
    ExPortType->NonpagedPoolCharge = sizeof(EPORT);
+   ExPortType->Mapping = &ExpPortMapping;
    ExPortType->Dump = NULL;
    ExPortType->Open = NULL;
    ExPortType->Close = NiClosePort;
@@ -54,6 +65,9 @@ NTSTATUS NiInitPort (VOID)
    ExPortType->QueryName = NULL;
    ExPortType->OkayToClose = NULL;
    ExPortType->Create = NiCreatePort;
+   ExPortType->DuplicationNotify = NULL;
+
+   ObpCreateTypeObject(ExPortType);
    
    EiNextLpcMessageId = 0;
    
@@ -63,7 +77,7 @@ NTSTATUS NiInitPort (VOID)
 
 /**********************************************************************
  * NAME                                                        INTERNAL
- *     NiInitializePort
+ *     NiInitializePort/3
  *     
  * DESCRIPTION
  *     Initialize the EPORT object attributes. The Port
@@ -76,23 +90,30 @@ NTSTATUS NiInitPort (VOID)
  *     STATUS_SUCCESS if initialization succedeed. An error code
  *     otherwise.
  */
-NTSTATUS
-STDCALL
-NiInitializePort (
-       IN OUT  PEPORT  Port
-       )
+NTSTATUS STDCALL
+NiInitializePort (IN OUT  PEPORT Port,
+                 IN      USHORT Type,
+                 IN      PEPORT Parent OPTIONAL)
 {
-       memset (Port, 0, sizeof(EPORT));
-       KeInitializeSpinLock (& Port->Lock);
-       KeInitializeEvent (& Port->Event, SynchronizationEvent, FALSE);
-       Port->OtherPort = NULL;
-       Port->QueueLength = 0;
-       Port->ConnectQueueLength = 0;
-       Port->State = EPORT_INACTIVE;
-       InitializeListHead (& Port->QueueListHead);
-       InitializeListHead (& Port->ConnectQueueListHead);
-   
-       return (STATUS_SUCCESS);
+  if ((Type != EPORT_TYPE_SERVER_RQST_PORT) &&
+      (Type != EPORT_TYPE_SERVER_COMM_PORT) &&
+      (Type != EPORT_TYPE_CLIENT_COMM_PORT))
+  {
+         return STATUS_INVALID_PARAMETER_2;
+  }
+  memset (Port, 0, sizeof(EPORT));
+  KeInitializeSpinLock (& Port->Lock);
+  KeInitializeSemaphore( &Port->Semaphore, 0, LONG_MAX );
+  Port->RequestPort = Parent;
+  Port->OtherPort = NULL;
+  Port->QueueLength = 0;
+  Port->ConnectQueueLength = 0;
+  Port->Type = Type;
+  Port->State = EPORT_INACTIVE;
+  InitializeListHead (& Port->QueueListHead);
+  InitializeListHead (& Port->ConnectQueueListHead);
+  return (STATUS_SUCCESS);
 }
 
 
@@ -101,7 +122,7 @@ NiInitializePort (
 
 /**********************************************************************
  * NAME                                                        SYSTEM
- *     NtImpersonateClientOfPort@8
+ *     NtImpersonateClientOfPort/2
  *     
  * DESCRIPTION
  *
@@ -110,18 +131,13 @@ NiInitializePort (
  *     ClientMessage
  *
  * RETURN VALUE
- * 
  */
-NTSTATUS
-STDCALL
-NtImpersonateClientOfPort (
-       HANDLE          PortHandle,
-       PLPC_MESSAGE    ClientMessage
-       )
+NTSTATUS STDCALL
+NtImpersonateClientOfPort (HANDLE              PortHandle,
+                          PLPC_MESSAGE ClientMessage)
 {
-       UNIMPLEMENTED;
+  UNIMPLEMENTED;
+  return(STATUS_NOT_IMPLEMENTED);
 }
 
-
-
 /* EOF */