Normalize private symbols in LPC, plus minor changes/adds.

svn path=/trunk/; revision=11512
This commit is contained in:
Emanuele Aliberti 2004-10-31 20:27:08 +00:00
parent 430b802b99
commit 5f451aa443
5 changed files with 34 additions and 24 deletions

View file

@ -12,6 +12,8 @@
#define NTOS_MODE_KERNEL #define NTOS_MODE_KERNEL
#include <ntos.h> #include <ntos.h>
#define TAG_OBJECT_TYPE TAG('O', 'b', 'j', 'T')
struct _EPROCESS; struct _EPROCESS;
typedef struct typedef struct

View file

@ -26,11 +26,7 @@ typedef struct _EPORT
ULONG MaxDataLength; ULONG MaxDataLength;
ULONG MaxConnectInfoLength; ULONG MaxConnectInfoLength;
ULONG MaxPoolUsage; /* size of NP zone */
/*
* List of processes that can receive connection requests on this port.
*/
LIST_ENTRY ListenerListHead;
} EPORT, * PEPORT; } EPORT, * PEPORT;
@ -88,6 +84,12 @@ LpcSendTerminationPort (PEPORT Port,
#define EPORT_CONNECTED_SERVER (6) #define EPORT_CONNECTED_SERVER (6)
#define EPORT_DISCONNECTED (7) #define EPORT_DISCONNECTED (7)
/* Pool Tags */
#define TAG_LPC_MESSAGE TAG('L', 'p', 'c', 'M')
#define TAG_LPC_ZONE TAG('L', 'p', 'c', 'Z')
typedef struct _QUEUEDMESSAGE typedef struct _QUEUEDMESSAGE
{ {
PEPORT Sender; PEPORT Sender;
@ -139,7 +141,8 @@ NTSTATUS
NiInitPort (VOID); NiInitPort (VOID);
extern POBJECT_TYPE ExPortType; extern POBJECT_TYPE ExPortType;
extern ULONG EiNextLpcMessageId; extern ULONG LpcpNextMessageId;
extern FAST_MUTEX LpcpLock;
/* Code in ntoskrnl/lpc/reply.c */ /* Code in ntoskrnl/lpc/reply.c */

View file

@ -1,4 +1,4 @@
/* $Id: create.c,v 1.17 2004/08/15 16:39:06 chorns Exp $ /* $Id: create.c,v 1.18 2004/10/31 20:27:08 ea Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -32,7 +32,7 @@ LpcpVerifyCreateParameters (IN PHANDLE PortHandle,
IN POBJECT_ATTRIBUTES ObjectAttributes, IN POBJECT_ATTRIBUTES ObjectAttributes,
IN ULONG MaxConnectInfoLength, IN ULONG MaxConnectInfoLength,
IN ULONG MaxDataLength, IN ULONG MaxDataLength,
IN ULONG Reserved) IN ULONG MaxPoolUsage)
{ {
if (NULL == PortHandle) if (NULL == PortHandle)
{ {
@ -58,8 +58,8 @@ LpcpVerifyCreateParameters (IN PHANDLE PortHandle,
{ {
return (STATUS_INVALID_PARAMETER_4); return (STATUS_INVALID_PARAMETER_4);
} }
/* FIXME: some checking is done also on Reserved, but /* TODO: some checking is done also on MaxPoolUsage
* not in public (free/checked) versions. */ * to avoid choking the executive */
return (STATUS_SUCCESS); return (STATUS_SUCCESS);
} }
@ -105,7 +105,7 @@ NiCreatePort (PVOID ObjectBody,
* ObjectAttributes, * ObjectAttributes,
* MaxConnectInfoLength, * MaxConnectInfoLength,
* MaxDataLength, * MaxDataLength,
* Reserved * MaxPoolUsage: size of NP zone the NP part of msgs is kept in
* *
* RETURN VALUE * RETURN VALUE
*/ */
@ -114,7 +114,7 @@ NtCreatePort (PHANDLE PortHandle,
POBJECT_ATTRIBUTES ObjectAttributes, POBJECT_ATTRIBUTES ObjectAttributes,
ULONG MaxConnectInfoLength, ULONG MaxConnectInfoLength,
ULONG MaxDataLength, ULONG MaxDataLength,
ULONG Reserved) ULONG MaxPoolUsage)
{ {
PEPORT Port; PEPORT Port;
NTSTATUS Status; NTSTATUS Status;
@ -126,7 +126,7 @@ NtCreatePort (PHANDLE PortHandle,
ObjectAttributes, ObjectAttributes,
MaxConnectInfoLength, MaxConnectInfoLength,
MaxDataLength, MaxDataLength,
Reserved); MaxPoolUsage);
if (STATUS_SUCCESS != Status) if (STATUS_SUCCESS != Status)
{ {
return (Status); return (Status);
@ -162,6 +162,7 @@ NtCreatePort (PHANDLE PortHandle,
Status = NiInitializePort (Port, EPORT_TYPE_SERVER_RQST_PORT, NULL); Status = NiInitializePort (Port, EPORT_TYPE_SERVER_RQST_PORT, NULL);
Port->MaxConnectInfoLength = PORT_MAX_DATA_LENGTH; Port->MaxConnectInfoLength = PORT_MAX_DATA_LENGTH;
Port->MaxDataLength = PORT_MAX_MESSAGE_LENGTH; Port->MaxDataLength = PORT_MAX_MESSAGE_LENGTH;
Port->MaxPoolUsage = MaxPoolUsage;
ObDereferenceObject (Port); ObDereferenceObject (Port);
@ -183,7 +184,7 @@ NtCreatePort (PHANDLE PortHandle,
* ObjectAttributes, * ObjectAttributes,
* MaxConnectInfoLength, * MaxConnectInfoLength,
* MaxDataLength, * MaxDataLength,
* Reserved * MaxPoolUsage
* *
* RETURN VALUE * RETURN VALUE
*/ */
@ -192,7 +193,7 @@ NtCreateWaitablePort (OUT PHANDLE PortHandle,
IN POBJECT_ATTRIBUTES ObjectAttributes, IN POBJECT_ATTRIBUTES ObjectAttributes,
IN ULONG MaxConnectInfoLength, IN ULONG MaxConnectInfoLength,
IN ULONG MaxDataLength, IN ULONG MaxDataLength,
IN ULONG Reserved) IN ULONG MaxPoolUsage)
{ {
NTSTATUS Status; NTSTATUS Status;
@ -201,7 +202,7 @@ NtCreateWaitablePort (OUT PHANDLE PortHandle,
ObjectAttributes, ObjectAttributes,
MaxConnectInfoLength, MaxConnectInfoLength,
MaxDataLength, MaxDataLength,
Reserved); MaxPoolUsage);
if (STATUS_SUCCESS != Status) if (STATUS_SUCCESS != Status)
{ {
return (Status); return (Status);

View file

@ -1,4 +1,4 @@
/* $Id: port.c,v 1.19 2004/08/15 16:39:06 chorns Exp $ /* $Id: port.c,v 1.20 2004/10/31 20:27:08 ea Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -22,7 +22,8 @@
/* GLOBALS *******************************************************************/ /* GLOBALS *******************************************************************/
POBJECT_TYPE ExPortType = NULL; POBJECT_TYPE ExPortType = NULL;
ULONG EiNextLpcMessageId = 0; ULONG LpcpNextMessageId = 0; /* 0 is not a valid ID */
FAST_MUTEX LpcpLock; /* global internal sync in LPC facility */
static GENERIC_MAPPING ExpPortMapping = { static GENERIC_MAPPING ExpPortMapping = {
STANDARD_RIGHTS_READ, STANDARD_RIGHTS_READ,
@ -36,7 +37,7 @@ static GENERIC_MAPPING ExpPortMapping = {
NTSTATUS INIT_FUNCTION NTSTATUS INIT_FUNCTION
NiInitPort (VOID) NiInitPort (VOID)
{ {
ExPortType = ExAllocatePool(NonPagedPool,sizeof(OBJECT_TYPE)); ExPortType = ExAllocatePoolWithTag(NonPagedPool,sizeof(OBJECT_TYPE),TAG_OBJECT_TYPE);
RtlRosInitUnicodeStringFromLiteral(&ExPortType->TypeName,L"Port"); RtlRosInitUnicodeStringFromLiteral(&ExPortType->TypeName,L"Port");
@ -61,7 +62,9 @@ NiInitPort (VOID)
ObpCreateTypeObject(ExPortType); ObpCreateTypeObject(ExPortType);
EiNextLpcMessageId = 0; LpcpNextMessageId = 0;
ExInitializeFastMutex (& LpcpLock);
return(STATUS_SUCCESS); return(STATUS_SUCCESS);
} }
@ -77,6 +80,9 @@ NiInitPort (VOID)
* *
* ARGUMENTS * ARGUMENTS
* Port Pointer to an EPORT object to initialize. * Port Pointer to an EPORT object to initialize.
* Type connect (RQST), or communication port (COMM)
* Parent OPTIONAL connect port a communication port
* is created from
* *
* RETURN VALUE * RETURN VALUE
* STATUS_SUCCESS if initialization succedeed. An error code * STATUS_SUCCESS if initialization succedeed. An error code

View file

@ -1,4 +1,4 @@
/* $Id: reply.c,v 1.22 2004/09/13 19:10:45 gvg Exp $ /* $Id: reply.c,v 1.23 2004/10/31 20:27:08 ea Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
@ -17,8 +17,6 @@
/* GLOBALS *******************************************************************/ /* GLOBALS *******************************************************************/
#define TAG_LPC_MESSAGE TAG('L', 'P', 'C', 'M')
/* FUNCTIONS *****************************************************************/ /* FUNCTIONS *****************************************************************/
/********************************************************************** /**********************************************************************
@ -58,7 +56,7 @@ EiReplyOrRequestPort (IN PEPORT Port,
MessageReply->Message.ClientId.UniqueProcess = PsGetCurrentProcessId(); MessageReply->Message.ClientId.UniqueProcess = PsGetCurrentProcessId();
MessageReply->Message.ClientId.UniqueThread = PsGetCurrentThreadId(); MessageReply->Message.ClientId.UniqueThread = PsGetCurrentThreadId();
MessageReply->Message.MessageType = MessageType; MessageReply->Message.MessageType = MessageType;
MessageReply->Message.MessageId = InterlockedIncrement((LONG *)&EiNextLpcMessageId); MessageReply->Message.MessageId = InterlockedIncrement((LONG *)&LpcpNextMessageId);
KeAcquireSpinLock(&Port->Lock, &oldIrql); KeAcquireSpinLock(&Port->Lock, &oldIrql);
EiEnqueueMessagePort(Port, MessageReply); EiEnqueueMessagePort(Port, MessageReply);