606f1505b62ac6b017dd4010169b9518e96e3757
[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 LPC_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 LPC_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 PLPC_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 #define TAG_LPC_MESSAGE TAG('L', 'p', 'c', 'M')
87 #define TAG_LPC_ZONE TAG('L', 'p', 'c', 'Z')
88
89
90 typedef struct _QUEUEDMESSAGE
91 {
92 PEPORT Sender;
93 LIST_ENTRY QueueListEntry;
94 LPC_MESSAGE Message;
95 UCHAR MessageData [MAX_MESSAGE_DATA];
96 } QUEUEDMESSAGE, *PQUEUEDMESSAGE;
97
98 typedef struct _LPC_DBG_MESSAGE
99 {
100 LPC_MESSAGE Header;
101 ULONG Type;
102 ULONG Status;
103 union
104 {
105 struct
106 {
107 EXCEPTION_RECORD ExceptionRecord;
108 ULONG FirstChance;
109 } Exception;
110 struct
111 {
112 ULONG Reserved;
113 PVOID StartAddress;
114 } CreateThread;
115 struct
116 {
117 ULONG Reserved;
118 HANDLE FileHandle;
119 PVOID Base;
120 ULONG PointerToSymbolTable;
121 ULONG NumberOfSymbols;
122 ULONG Reserved2;
123 PVOID EntryPoint;
124 } CreateProcess;
125 struct
126 {
127 ULONG ExitCode;
128 } ExitThread;
129 struct
130 {
131 ULONG ExitCode;
132 } ExitProcess;
133 struct
134 {
135 HANDLE FileHandle;
136 PVOID Base;
137 ULONG PointerToSymbolTable;
138 ULONG NumberOfSymbols;
139 } LoadDll;
140 struct
141 {
142 PVOID Base;
143 } UnloadDll;
144 } Data;
145 } LPC_DBG_MESSAGE, *PLPC_DBG_MESSAGE;
146
147 typedef struct _LPC_TERMINATION_MESSAGE
148 {
149 LPC_MESSAGE Header;
150 LARGE_INTEGER CreationTime;
151 } LPC_TERMINATION_MESSAGE, *PLPC_TERMINATION_MESSAGE;
152
153 /* Code in ntoskrnl/lpc/close.h */
154
155 VOID STDCALL
156 LpcpClosePort (PVOID ObjectBody,
157 ULONG HandleCount);
158 VOID STDCALL
159 LpcpDeletePort (IN PVOID ObjectBody);
160
161 /* Code in ntoskrnl/lpc/queue.c */
162
163 VOID STDCALL
164 EiEnqueueConnectMessagePort (IN OUT PEPORT Port,
165 IN PQUEUEDMESSAGE Message);
166 VOID STDCALL
167 EiEnqueueMessagePort (IN OUT PEPORT Port,
168 IN PQUEUEDMESSAGE Message);
169 VOID STDCALL
170 EiEnqueueMessageAtHeadPort (IN OUT PEPORT Port,
171 IN PQUEUEDMESSAGE Message);
172 PQUEUEDMESSAGE
173 STDCALL
174 EiDequeueConnectMessagePort (IN OUT PEPORT Port);
175 PQUEUEDMESSAGE STDCALL
176 EiDequeueMessagePort (IN OUT PEPORT Port);
177
178 /* Code in ntoskrnl/lpc/create.c */
179
180 NTSTATUS STDCALL
181 NiCreatePort (PVOID ObjectBody,
182 PVOID Parent,
183 PWSTR RemainingPath,
184 POBJECT_ATTRIBUTES ObjectAttributes);
185
186 /* Code in ntoskrnl/lpc/port.c */
187
188 NTSTATUS STDCALL
189 LpcpInitializePort (IN OUT PEPORT Port,
190 IN USHORT Type,
191 IN PEPORT Parent OPTIONAL);
192 NTSTATUS
193 LpcpInitSystem (VOID);
194
195 extern POBJECT_TYPE LpcPortObjectType;
196 extern ULONG LpcpNextMessageId;
197 extern FAST_MUTEX LpcpLock;
198
199 /* Code in ntoskrnl/lpc/reply.c */
200
201 NTSTATUS STDCALL
202 EiReplyOrRequestPort (IN PEPORT Port,
203 IN PLPC_MESSAGE LpcReply,
204 IN ULONG MessageType,
205 IN PEPORT Sender);
206
207
208 #endif /* __INCLUDE_INTERNAL_PORT_H */