- Fix build.
[reactos.git] / reactos / 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 NTSTATUS
35 INIT_FUNCTION
36 NTAPI
37 LpcpInitSystem(VOID)
38 {
39 OBJECT_TYPE_INITIALIZER ObjectTypeInitializer;
40 UNICODE_STRING Name;
41
42 /* Setup the LPC Lock */
43 KeInitializeGuardedMutex(&LpcpLock);
44
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_PORT_OBJECT);
50 ObjectTypeInitializer.DefaultPagedPoolCharge = sizeof(LPCP_NONPAGED_PORT_QUEUE);
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.MaintainTypeList = TRUE;
58 ObCreateObjectType(&Name,
59 &ObjectTypeInitializer,
60 NULL,
61 &LpcPortObjectType);
62
63 /* Allocate the LPC lookaside list */
64 LpcpMaxMessageSize = LPCP_MAX_MESSAGE_SIZE;
65 ExInitializePagedLookasideList(&LpcpMessagesLookaside,
66 NULL,
67 NULL,
68 0,
69 LpcpMaxMessageSize,
70 TAG('L', 'p', 'c', 'M'),
71 32);
72
73 /* We're done */
74 return STATUS_SUCCESS;
75 }
76
77 /* PUBLIC FUNCTIONS **********************************************************/
78
79 NTSTATUS
80 NTAPI
81 NtImpersonateClientOfPort(IN HANDLE PortHandle,
82 IN PPORT_MESSAGE ClientMessage)
83 {
84 UNIMPLEMENTED;
85 return STATUS_NOT_IMPLEMENTED;
86 }
87
88 NTSTATUS
89 NTAPI
90 NtQueryPortInformationProcess(VOID)
91 {
92 /* This is all this function does */
93 return STATUS_UNSUCCESSFUL;
94 }
95
96 NTSTATUS
97 NTAPI
98 NtQueryInformationPort(IN HANDLE PortHandle,
99 IN PORT_INFORMATION_CLASS PortInformationClass,
100 OUT PVOID PortInformation,
101 IN ULONG PortInformationLength,
102 OUT PULONG ReturnLength)
103 {
104 UNIMPLEMENTED;
105 return STATUS_NOT_IMPLEMENTED;
106 }
107
108 /* EOF */