- Fix KiDispatchException to unmask KI_EXCEPTION_INTERNAL when setting the exception...
[reactos.git] / reactos / ntoskrnl / include / internal / lpc.h
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"