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