- Fix IN/OUT privileged instruction fault (we don't yet handle HLT/CLI/STI other...
[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 ObCreateObjectType(&Name,
58 &ObjectTypeInitializer,
59 NULL,
60 &LpcPortObjectType);
61
62 /* Allocate the LPC lookaside list */
63 LpcpMaxMessageSize = LPCP_MAX_MESSAGE_SIZE;
64 ExInitializePagedLookasideList(&LpcpMessagesLookaside,
65 NULL,
66 NULL,
67 0,
68 LpcpMaxMessageSize,
69 TAG('L', 'p', 'c', 'M'),
70 32);
71
72 /* We're done */
73 return STATUS_SUCCESS;
74 }
75
76 /* PUBLIC FUNCTIONS **********************************************************/
77
78 NTSTATUS
79 NTAPI
80 NtImpersonateClientOfPort(IN HANDLE PortHandle,
81 IN PPORT_MESSAGE ClientMessage)
82 {
83 UNIMPLEMENTED;
84 return STATUS_NOT_IMPLEMENTED;
85 }
86
87 NTSTATUS
88 NTAPI
89 NtQueryPortInformationProcess(VOID)
90 {
91 /* This is all this function does */
92 return STATUS_UNSUCCESSFUL;
93 }
94
95 NTSTATUS
96 NTAPI
97 NtQueryInformationPort(IN HANDLE PortHandle,
98 IN PORT_INFORMATION_CLASS PortInformationClass,
99 OUT PVOID PortInformation,
100 IN ULONG PortInformationLength,
101 OUT PULONG ReturnLength)
102 {
103 UNIMPLEMENTED;
104 return STATUS_NOT_IMPLEMENTED;
105 }
106
107 /* EOF */