2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: ntoskrnl/lpc/port.c
5 * PURPOSE: Local Procedure Call: Port Management
6 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
9 /* INCLUDES ******************************************************************/
14 #include <internal/debug.h>
16 /* GLOBALS *******************************************************************/
18 POBJECT_TYPE LpcPortObjectType
;
19 ULONG LpcpMaxMessageSize
;
20 PAGED_LOOKASIDE_LIST LpcpMessagesLookaside
;
21 KGUARDED_MUTEX LpcpLock
;
22 ULONG LpcpTraceLevel
= LPC_CLOSE_DEBUG
;
23 ULONG LpcpNextMessageId
= 1, LpcpNextCallbackId
= 1;
25 static GENERIC_MAPPING LpcpPortMapping
=
28 STANDARD_RIGHTS_WRITE
,
33 /* PRIVATE FUNCTIONS *********************************************************/
40 OBJECT_TYPE_INITIALIZER ObjectTypeInitializer
;
43 /* Setup the LPC Lock */
44 KeInitializeGuardedMutex(&LpcpLock
);
46 /* Create the Port Object Type */
47 RtlZeroMemory(&ObjectTypeInitializer
, sizeof(ObjectTypeInitializer
));
48 RtlInitUnicodeString(&Name
, L
"Port");
49 ObjectTypeInitializer
.Length
= sizeof(ObjectTypeInitializer
);
50 ObjectTypeInitializer
.DefaultNonPagedPoolCharge
= sizeof(LPCP_PORT_OBJECT
);
51 ObjectTypeInitializer
.DefaultPagedPoolCharge
= sizeof(LPCP_NONPAGED_PORT_QUEUE
);
52 ObjectTypeInitializer
.GenericMapping
= LpcpPortMapping
;
53 ObjectTypeInitializer
.PoolType
= PagedPool
;
54 ObjectTypeInitializer
.UseDefaultObject
= TRUE
;
55 ObjectTypeInitializer
.CloseProcedure
= LpcpClosePort
;
56 ObjectTypeInitializer
.DeleteProcedure
= LpcpDeletePort
;
57 ObjectTypeInitializer
.ValidAccessMask
= PORT_ALL_ACCESS
;
58 ObjectTypeInitializer
.MaintainTypeList
= TRUE
;
59 ObCreateObjectType(&Name
,
60 &ObjectTypeInitializer
,
64 /* Allocate the LPC lookaside list */
65 LpcpMaxMessageSize
= LPCP_MAX_MESSAGE_SIZE
;
66 ExInitializePagedLookasideList(&LpcpMessagesLookaside
,
71 TAG('L', 'p', 'c', 'M'),
75 return STATUS_SUCCESS
;
78 /* PUBLIC FUNCTIONS **********************************************************/
82 NtImpersonateClientOfPort(IN HANDLE PortHandle
,
83 IN PPORT_MESSAGE ClientMessage
)
86 return STATUS_NOT_IMPLEMENTED
;
91 NtQueryPortInformationProcess(VOID
)
93 /* This is all this function does */
94 return STATUS_UNSUCCESSFUL
;
99 NtQueryInformationPort(IN HANDLE PortHandle
,
100 IN PORT_INFORMATION_CLASS PortInformationClass
,
101 OUT PVOID PortInformation
,
102 IN ULONG PortInformationLength
,
103 OUT PULONG ReturnLength
)
106 return STATUS_NOT_IMPLEMENTED
;