/* $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.
* otherwise.
*/
NTSTATUS STDCALL
-NiInitializePort (IN OUT PEPORT Port,
+LpcpInitializePort (IN OUT PEPORT Port,
IN USHORT Type,
IN PEPORT Parent OPTIONAL)
{
}
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;
Port->State = EPORT_INACTIVE;
InitializeListHead (& Port->QueueListHead);
InitializeListHead (& Port->ConnectQueueListHead);
-
+
return (STATUS_SUCCESS);
}
/**********************************************************************
* NAME SYSTEM
* NtImpersonateClientOfPort/2
- *
+ *
* DESCRIPTION
*
* ARGUMENTS
*/
NTSTATUS STDCALL
NtImpersonateClientOfPort (HANDLE PortHandle,
- PLPC_MESSAGE ClientMessage)
+ PPORT_MESSAGE ClientMessage)
{
UNIMPLEMENTED;
return(STATUS_NOT_IMPLEMENTED);