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
, LpcWaitablePortObjectType
;
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
=
26 READ_CONTROL
| PORT_CONNECT
,
27 DELETE
| PORT_CONNECT
,
32 /* PRIVATE FUNCTIONS *********************************************************/
39 OBJECT_TYPE_INITIALIZER ObjectTypeInitializer
;
42 /* Setup the LPC Lock */
43 KeInitializeGuardedMutex(&LpcpLock
);
45 /* Create the Port Object Type */
46 RtlZeroMemory(&ObjectTypeInitializer
, sizeof(ObjectTypeInitializer
));
47 RtlInitUnicodeString(&Name
, L
"Port");
48 ObjectTypeInitializer
.Length
= sizeof(ObjectTypeInitializer
);
49 ObjectTypeInitializer
.DefaultNonPagedPoolCharge
= sizeof(LPCP_NONPAGED_PORT_QUEUE
);
50 ObjectTypeInitializer
.DefaultPagedPoolCharge
= FIELD_OFFSET(LPCP_PORT_OBJECT
, WaitEvent
);
51 ObjectTypeInitializer
.GenericMapping
= LpcpPortMapping
;
52 ObjectTypeInitializer
.PoolType
= PagedPool
;
53 ObjectTypeInitializer
.UseDefaultObject
= TRUE
;
54 ObjectTypeInitializer
.CloseProcedure
= LpcpClosePort
;
55 ObjectTypeInitializer
.DeleteProcedure
= LpcpDeletePort
;
56 ObjectTypeInitializer
.ValidAccessMask
= PORT_ALL_ACCESS
;
57 ObjectTypeInitializer
.InvalidAttributes
= OBJ_VALID_ATTRIBUTES
& ~OBJ_CASE_INSENSITIVE
;
58 ObCreateObjectType(&Name
,
59 &ObjectTypeInitializer
,
63 RtlInitUnicodeString(&Name
, L
"WaitablePort");
64 ObjectTypeInitializer
.PoolType
= NonPagedPool
;
65 ObjectTypeInitializer
.DefaultNonPagedPoolCharge
+= sizeof(LPCP_PORT_OBJECT
);
66 ObjectTypeInitializer
.DefaultPagedPoolCharge
= 0;
67 ObjectTypeInitializer
.UseDefaultObject
= FALSE
;
68 ObCreateObjectType(&Name
,
69 &ObjectTypeInitializer
,
71 &LpcWaitablePortObjectType
);
73 /* Allocate the LPC lookaside list */
74 LpcpMaxMessageSize
= LPCP_MAX_MESSAGE_SIZE
;
75 ExInitializePagedLookasideList(&LpcpMessagesLookaside
,
87 /* PUBLIC FUNCTIONS **********************************************************/
91 NtImpersonateClientOfPort(IN HANDLE PortHandle
,
92 IN PPORT_MESSAGE ClientMessage
)
95 return STATUS_NOT_IMPLEMENTED
;
100 NtQueryPortInformationProcess(VOID
)
102 /* This is all this function does */
103 return STATUS_UNSUCCESSFUL
;
108 NtQueryInformationPort(IN HANDLE PortHandle
,
109 IN PORT_INFORMATION_CLASS PortInformationClass
,
110 OUT PVOID PortInformation
,
111 IN ULONG PortInformationLength
,
112 OUT PULONG ReturnLength
)
115 return STATUS_NOT_IMPLEMENTED
;