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