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