Sync with trunk (r48008)
[reactos.git] / ntoskrnl / lpc / port.c
1 /*
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)
7 */
8
9 /* INCLUDES ******************************************************************/
10
11 #include <ntoskrnl.h>
12 #define NDEBUG
13 #include <debug.h>
14
15 /* GLOBALS *******************************************************************/
16
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;
23
24 static GENERIC_MAPPING LpcpPortMapping =
25 {
26 STANDARD_RIGHTS_READ,
27 STANDARD_RIGHTS_WRITE,
28 0,
29 PORT_ALL_ACCESS
30 };
31
32 /* PRIVATE FUNCTIONS *********************************************************/
33
34 BOOLEAN
35 NTAPI
36 LpcInitSystem(VOID)
37 {
38 OBJECT_TYPE_INITIALIZER ObjectTypeInitializer;
39 UNICODE_STRING Name;
40
41 /* Setup the LPC Lock */
42 KeInitializeGuardedMutex(&LpcpLock);
43
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,
58 NULL,
59 &LpcPortObjectType);
60
61 /* Allocate the LPC lookaside list */
62 LpcpMaxMessageSize = LPCP_MAX_MESSAGE_SIZE;
63 ExInitializePagedLookasideList(&LpcpMessagesLookaside,
64 NULL,
65 NULL,
66 0,
67 LpcpMaxMessageSize,
68 'McpL',
69 32);
70
71 /* We're done */
72 return TRUE;
73 }
74
75 /* PUBLIC FUNCTIONS **********************************************************/
76
77 NTSTATUS
78 NTAPI
79 NtImpersonateClientOfPort(IN HANDLE PortHandle,
80 IN PPORT_MESSAGE ClientMessage)
81 {
82 UNIMPLEMENTED;
83 return STATUS_NOT_IMPLEMENTED;
84 }
85
86 NTSTATUS
87 NTAPI
88 NtQueryPortInformationProcess(VOID)
89 {
90 /* This is all this function does */
91 return STATUS_UNSUCCESSFUL;
92 }
93
94 NTSTATUS
95 NTAPI
96 NtQueryInformationPort(IN HANDLE PortHandle,
97 IN PORT_INFORMATION_CLASS PortInformationClass,
98 OUT PVOID PortInformation,
99 IN ULONG PortInformationLength,
100 OUT PULONG ReturnLength)
101 {
102 UNIMPLEMENTED;
103 return STATUS_NOT_IMPLEMENTED;
104 }
105
106 /* EOF */