Remove all non-official LPC structures/defines/hardcoded hacks, and use actual correc...
[reactos.git] / reactos / ntoskrnl / include / internal / port.h
1 #ifndef __INCLUDE_INTERNAL_PORT_H
2 #define __INCLUDE_INTERNAL_PORT_H
3
4 typedef struct _EPORT_LISTENER
5 {
6 HANDLE ListenerPid;
7 LIST_ENTRY ListenerListEntry;
8 } EPORT_LISTENER, *PEPORT_LISTENER;
9
10 typedef struct _EPORT
11 {
12 KSPIN_LOCK Lock;
13 KSEMAPHORE Semaphore;
14
15 USHORT Type;
16 USHORT State;
17
18 struct _EPORT * RequestPort;
19 struct _EPORT * OtherPort;
20
21 ULONG QueueLength;
22 LIST_ENTRY QueueListHead;
23
24 ULONG ConnectQueueLength;
25 LIST_ENTRY ConnectQueueListHead;
26
27 ULONG MaxDataLength;
28 ULONG MaxConnectInfoLength;
29 ULONG MaxPoolUsage; /* size of NP zone */
30 } EPORT, * PEPORT;
31
32 typedef struct _EPORT_CONNECT_REQUEST_MESSAGE
33 {
34 PORT_MESSAGE MessageHeader;
35 PEPROCESS ConnectingProcess;
36 struct _SECTION_OBJECT* SendSectionObject;
37 LARGE_INTEGER SendSectionOffset;
38 ULONG SendViewSize;
39 ULONG ConnectDataLength;
40 UCHAR ConnectData[0];
41 } EPORT_CONNECT_REQUEST_MESSAGE, *PEPORT_CONNECT_REQUEST_MESSAGE;
42
43 typedef struct _EPORT_CONNECT_REPLY_MESSAGE
44 {
45 PORT_MESSAGE MessageHeader;
46 PVOID SendServerViewBase;
47 ULONG ReceiveClientViewSize;
48 PVOID ReceiveClientViewBase;
49 ULONG MaximumMessageSize;
50 ULONG ConnectDataLength;
51 UCHAR ConnectData[0];
52 } EPORT_CONNECT_REPLY_MESSAGE, *PEPORT_CONNECT_REPLY_MESSAGE;
53
54 typedef struct _TERMINATION_PORT {
55 struct _TERMINATION_PORT *Next;
56 PVOID Port;
57 } TERMINATION_PORT, *PTERMINATION_PORT;
58
59 NTSTATUS STDCALL
60 LpcRequestPort (PEPORT Port,
61 PPORT_MESSAGE LpcMessage);
62 NTSTATUS
63 STDCALL
64 LpcSendTerminationPort (PEPORT Port,
65 LARGE_INTEGER CreationTime);
66
67 /* EPORT.Type */
68
69 #define EPORT_TYPE_SERVER_RQST_PORT (0)
70 #define EPORT_TYPE_SERVER_COMM_PORT (1)
71 #define EPORT_TYPE_CLIENT_COMM_PORT (2)
72
73 /* EPORT.State */
74
75 #define EPORT_INACTIVE (0)
76 #define EPORT_WAIT_FOR_CONNECT (1)
77 #define EPORT_WAIT_FOR_ACCEPT (2)
78 #define EPORT_WAIT_FOR_COMPLETE_SRV (3)
79 #define EPORT_WAIT_FOR_COMPLETE_CLT (4)
80 #define EPORT_CONNECTED_CLIENT (5)
81 #define EPORT_CONNECTED_SERVER (6)
82 #define EPORT_DISCONNECTED (7)
83
84 /* Pool Tags */
85
86 typedef struct _QUEUEDMESSAGE
87 {
88 PEPORT Sender;
89 LIST_ENTRY QueueListEntry;
90 PORT_MESSAGE Message;
91 } QUEUEDMESSAGE, *PQUEUEDMESSAGE;
92
93 typedef struct _LPC_DBG_MESSAGE
94 {
95 PORT_MESSAGE Header;
96 ULONG Type;
97 ULONG Status;
98 union
99 {
100 struct
101 {
102 EXCEPTION_RECORD ExceptionRecord;
103 ULONG FirstChance;
104 } Exception;
105 struct
106 {
107 ULONG Reserved;
108 PVOID StartAddress;
109 } CreateThread;
110 struct
111 {
112 ULONG Reserved;
113 HANDLE FileHandle;
114 PVOID Base;
115 ULONG PointerToSymbolTable;
116 ULONG NumberOfSymbols;
117 ULONG Reserved2;
118 PVOID EntryPoint;
119 } CreateProcess;
120 struct
121 {
122 ULONG ExitCode;
123 } ExitThread;
124 struct
125 {
126 ULONG ExitCode;
127 } ExitProcess;
128 struct
129 {
130 HANDLE FileHandle;
131 PVOID Base;
132 ULONG PointerToSymbolTable;
133 ULONG NumberOfSymbols;
134 } LoadDll;
135 struct
136 {
137 PVOID Base;
138 } UnloadDll;
139 } Data;
140 } LPC_DBG_MESSAGE, *PLPC_DBG_MESSAGE;
141
142 typedef struct _LPC_TERMINATION_MESSAGE
143 {
144 PORT_MESSAGE Header;
145 LARGE_INTEGER CreationTime;
146 } LPC_TERMINATION_MESSAGE, *PLPC_TERMINATION_MESSAGE;
147
148 /* Code in ntoskrnl/lpc/close.h */
149
150 VOID STDCALL
151 LpcpClosePort (PVOID ObjectBody,
152 ULONG HandleCount);
153 VOID STDCALL
154 LpcpDeletePort (IN PVOID ObjectBody);
155
156 /* Code in ntoskrnl/lpc/queue.c */
157
158 VOID STDCALL
159 EiEnqueueConnectMessagePort (IN OUT PEPORT Port,
160 IN PQUEUEDMESSAGE Message);
161 VOID STDCALL
162 EiEnqueueMessagePort (IN OUT PEPORT Port,
163 IN PQUEUEDMESSAGE Message);
164 VOID STDCALL
165 EiEnqueueMessageAtHeadPort (IN OUT PEPORT Port,
166 IN PQUEUEDMESSAGE Message);
167 PQUEUEDMESSAGE
168 STDCALL
169 EiDequeueConnectMessagePort (IN OUT PEPORT Port);
170 PQUEUEDMESSAGE STDCALL
171 EiDequeueMessagePort (IN OUT PEPORT Port);
172
173 /* Code in ntoskrnl/lpc/create.c */
174
175 NTSTATUS STDCALL
176 NiCreatePort (PVOID ObjectBody,
177 PVOID Parent,
178 PWSTR RemainingPath,
179 POBJECT_ATTRIBUTES ObjectAttributes);
180
181 /* Code in ntoskrnl/lpc/port.c */
182
183 NTSTATUS STDCALL
184 LpcpInitializePort (IN OUT PEPORT Port,
185 IN USHORT Type,
186 IN PEPORT Parent OPTIONAL);
187 NTSTATUS
188 LpcpInitSystem (VOID);
189
190 extern POBJECT_TYPE LpcPortObjectType;
191 extern ULONG LpcpNextMessageId;
192 extern FAST_MUTEX LpcpLock;
193
194 /* Code in ntoskrnl/lpc/reply.c */
195
196 NTSTATUS STDCALL
197 EiReplyOrRequestPort (IN PEPORT Port,
198 IN PPORT_MESSAGE LpcReply,
199 IN ULONG MessageType,
200 IN PEPORT Sender);
201
202
203 #endif /* __INCLUDE_INTERNAL_PORT_H */