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 ******************************************************************/
15 /* GLOBALS *******************************************************************/
17 POBJECT_TYPE LpcPortObjectType
;
18 ULONG LpcpMaxMessageSize
;
19 PAGED_LOOKASIDE_LIST LpcpMessagesLookaside
;
20 KGUARDED_MUTEX LpcpLock
;
21 ULONG LpcpTraceLevel
= 0;
22 ULONG LpcpNextMessageId
= 1, LpcpNextCallbackId
= 1;
24 static GENERIC_MAPPING LpcpPortMapping
=
27 STANDARD_RIGHTS_WRITE
,
32 /* PRIVATE FUNCTIONS *********************************************************/
38 OBJECT_TYPE_INITIALIZER ObjectTypeInitializer
;
41 /* Setup the LPC Lock */
42 KeInitializeGuardedMutex(&LpcpLock
);
44 /* Create the Port Object Type */
45 RtlZeroMemory(&ObjectTypeInitializer
, sizeof(ObjectTypeInitializer
));
46 RtlInitUnicodeString(&Name
, L
"Port");
47 ObjectTypeInitializer
.Length
= sizeof(ObjectTypeInitializer
);
48 ObjectTypeInitializer
.DefaultNonPagedPoolCharge
= sizeof(LPCP_PORT_OBJECT
);
49 ObjectTypeInitializer
.DefaultPagedPoolCharge
= sizeof(LPCP_NONPAGED_PORT_QUEUE
);
50 ObjectTypeInitializer
.GenericMapping
= LpcpPortMapping
;
51 ObjectTypeInitializer
.PoolType
= PagedPool
;
52 ObjectTypeInitializer
.UseDefaultObject
= TRUE
;
53 ObjectTypeInitializer
.CloseProcedure
= LpcpClosePort
;
54 ObjectTypeInitializer
.DeleteProcedure
= LpcpDeletePort
;
55 ObjectTypeInitializer
.ValidAccessMask
= PORT_ALL_ACCESS
;
56 ObCreateObjectType(&Name
,
57 &ObjectTypeInitializer
,
61 /* Allocate the LPC lookaside list */
62 LpcpMaxMessageSize
= LPCP_MAX_MESSAGE_SIZE
;
63 ExInitializePagedLookasideList(&LpcpMessagesLookaside
,
75 /* PUBLIC FUNCTIONS **********************************************************/
79 NtImpersonateClientOfPort(IN HANDLE PortHandle
,
80 IN PPORT_MESSAGE ClientMessage
)
83 return STATUS_NOT_IMPLEMENTED
;
88 NtQueryPortInformationProcess(VOID
)
90 /* This is all this function does */
91 return STATUS_UNSUCCESSFUL
;
96 NtQueryInformationPort(IN HANDLE PortHandle
,
97 IN PORT_INFORMATION_CLASS PortInformationClass
,
98 OUT PVOID PortInformation
,
99 IN ULONG PortInformationLength
,
100 OUT PULONG ReturnLength
)
103 return STATUS_NOT_IMPLEMENTED
;