xref: /reactos/ntoskrnl/include/internal/lpc.h (revision c0fa4859)
1 /*
2 * PROJECT:         ReactOS Kernel
3 * LICENSE:         GPL - See COPYING in the top level directory
4 * FILE:            ntoskrnl/include/lpc.h
5 * PURPOSE:         Internal header for the Local Procedure Call
6 * PROGRAMMERS:     Alex Ionescu (alex.ionescu@reactos.org)
7 */
8 
9 //
10 // Define this if you want debugging support
11 //
12 #define _LPC_DEBUG_                                         0x01
13 
14 //
15 // These define the Debug Masks Supported
16 //
17 #define LPC_CREATE_DEBUG                                    0x01
18 #define LPC_CLOSE_DEBUG                                     0x02
19 #define LPC_CONNECT_DEBUG                                   0x04
20 #define LPC_LISTEN_DEBUG                                    0x08
21 #define LPC_REPLY_DEBUG                                     0x10
22 #define LPC_COMPLETE_DEBUG                                  0x20
23 #define LPC_SEND_DEBUG                                      0x40
24 
25 //
26 // Debug/Tracing support
27 //
28 #if _LPC_DEBUG_
29 #ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented
30 #define LPCTRACE(x, ...)                                    \
31     {                                                       \
32         DbgPrintEx("%s [%.16s] - ",                         \
33                    __FUNCTION__,                            \
34                    PsGetCurrentProcess()->ImageFileName);   \
35         DbgPrintEx(__VA_ARGS__);                            \
36     }
37 #else
38 #define LPCTRACE(x, ...)                                    \
39     if (x & LpcpTraceLevel)                                 \
40     {                                                       \
41         DbgPrint("%s [%.16s:%lx] - ",                       \
42                  __FUNCTION__,                              \
43                  PsGetCurrentProcess()->ImageFileName,      \
44                  PsGetCurrentThreadId());                   \
45         DbgPrint(__VA_ARGS__);                              \
46     }
47 #endif
48 #endif
49 
50 //
51 // LPC Port/Message Flags
52 //
53 #define LPCP_THREAD_FLAG_IS_PORT                            1
54 #define LPCP_THREAD_FLAG_NO_IMPERSONATION                   2
55 #define LPCP_THREAD_FLAGS                                   (LPCP_THREAD_FLAG_IS_PORT | \
56                                                              LPCP_THREAD_FLAG_NO_IMPERSONATION)
57 
58 //
59 // Internal Port Management
60 //
61 VOID
62 NTAPI
63 LpcpClosePort(
64     IN PEPROCESS Process OPTIONAL,
65     IN PVOID Object,
66     IN ACCESS_MASK GrantedAccess,
67     IN ULONG ProcessHandleCount,
68     IN ULONG SystemHandleCount
69 );
70 
71 VOID
72 NTAPI
73 LpcpDeletePort(
74     IN PVOID ObjectBody
75 );
76 
77 NTSTATUS
78 NTAPI
79 LpcpInitializePortQueue(
80     IN PLPCP_PORT_OBJECT Port
81 );
82 
83 VOID
84 NTAPI
85 LpcpFreeToPortZone(
86     IN PLPCP_MESSAGE Message,
87     IN ULONG Flags
88 );
89 
90 VOID
91 NTAPI
92 LpcpMoveMessage(
93     IN PPORT_MESSAGE Destination,
94     IN PPORT_MESSAGE Origin,
95     IN PVOID Data,
96     IN ULONG MessageType,
97     IN PCLIENT_ID ClientId
98 );
99 
100 VOID
101 NTAPI
102 LpcpSaveDataInfoMessage(
103     IN PLPCP_PORT_OBJECT Port,
104     IN PLPCP_MESSAGE Message,
105     IN ULONG LockHeld
106 );
107 
108 //
109 // Module-external utlity functions
110 //
111 VOID
112 NTAPI
113 LpcExitThread(
114     IN PETHREAD Thread
115 );
116 
117 //
118 // Initialization functions
119 //
120 BOOLEAN
121 NTAPI
122 LpcInitSystem(
123     VOID
124 );
125 
126 //
127 // Global data inside the Process Manager
128 //
129 extern POBJECT_TYPE LpcPortObjectType;
130 extern ULONG LpcpNextMessageId, LpcpNextCallbackId;
131 extern KGUARDED_MUTEX LpcpLock;
132 extern PAGED_LOOKASIDE_LIST LpcpMessagesLookaside;
133 extern ULONG LpcpMaxMessageSize;
134 extern ULONG LpcpTraceLevel;
135 
136 //
137 // Inlined Functions
138 //
139 #include "lpc_x.h"
140