-/* $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;
ExPortType->QueryName = NULL;
ExPortType->OkayToClose = NULL;
ExPortType->Create = NiCreatePort;
+ ExPortType->DuplicationNotify = NULL;
+
+ ObpCreateTypeObject(ExPortType);
EiNextLpcMessageId = 0;
/**********************************************************************
* NAME INTERNAL
- * NiInitializePort
+ * NiInitializePort/3
*
* DESCRIPTION
* Initialize the EPORT object attributes. The Port
* 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);
}
/**********************************************************************
* NAME SYSTEM
- * NtImpersonateClientOfPort@8
+ * NtImpersonateClientOfPort/2
*
* DESCRIPTION
*
* 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 */