Reverted latest changes.
[reactos.git] / reactos / ntoskrnl / include / internal / port.h
1 #ifndef __INCLUDE_INTERNAL_PORT_H
2 #define __INCLUDE_INTERNAL_PORT_H
3
4 #include <napi/lpc.h>
5
6 typedef struct _EPORT_LISTENER
7 {
8 HANDLE ListenerPid;
9 LIST_ENTRY ListenerListEntry;
10 } EPORT_LISTENER, *PEPORT_LISTENER;
11
12 typedef struct _EPORT
13 {
14 KSPIN_LOCK Lock;
15 KSEMAPHORE Semaphore;
16
17 ULONG State;
18
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
30 /*
31 * List of processes that can receive connection requests on this port.
32 */
33 LIST_ENTRY ListenerListHead;
34 } EPORT, * PEPORT;
35
36
37 typedef struct _EPORT_TERMINATION_REQUEST
38 {
39 LIST_ENTRY ThreadListEntry;
40 PEPORT Port;
41 } EPORT_TERMINATION_REQUEST, *PEPORT_TERMINATION_REQUEST;
42
43
44 typedef struct _EPORT_CONNECT_REQUEST_MESSAGE
45 {
46 LPC_MESSAGE_HEADER MessageHeader;
47 PEPROCESS ConnectingProcess;
48 struct _SECTION_OBJECT* SendSectionObject;
49 LARGE_INTEGER SendSectionOffset;
50 ULONG SendViewSize;
51 ULONG ConnectDataLength;
52 UCHAR ConnectData[0];
53 } EPORT_CONNECT_REQUEST_MESSAGE, *PEPORT_CONNECT_REQUEST_MESSAGE;
54
55 typedef struct _EPORT_CONNECT_REPLY_MESSAGE
56 {
57 LPC_MESSAGE_HEADER MessageHeader;
58 PVOID SendServerViewBase;
59 ULONG ReceiveClientViewSize;
60 PVOID ReceiveClientViewBase;
61 ULONG MaximumMessageSize;
62 ULONG ConnectDataLength;
63 UCHAR ConnectData[0];
64 } EPORT_CONNECT_REPLY_MESSAGE, *PEPORT_CONNECT_REPLY_MESSAGE;
65
66 NTSTATUS STDCALL
67 LpcRequestPort (PEPORT Port,
68 PLPC_MESSAGE LpcMessage);
69 NTSTATUS
70 STDCALL
71 LpcSendTerminationPort (PEPORT Port,
72 TIME CreationTime);
73
74
75 /* EPORT.State */
76
77 #define EPORT_INACTIVE (0)
78 #define EPORT_WAIT_FOR_CONNECT (1)
79 #define EPORT_WAIT_FOR_ACCEPT (2)
80 #define EPORT_WAIT_FOR_COMPLETE_SRV (3)
81 #define EPORT_WAIT_FOR_COMPLETE_CLT (4)
82 #define EPORT_CONNECTED_CLIENT (5)
83 #define EPORT_CONNECTED_SERVER (6)
84 #define EPORT_DISCONNECTED (7)
85
86 typedef struct _QUEUEDMESSAGE
87 {
88 PEPORT Sender;
89 LIST_ENTRY QueueListEntry;
90 LPC_MESSAGE Message;
91 UCHAR MessageData [MAX_MESSAGE_DATA];
92 } QUEUEDMESSAGE, *PQUEUEDMESSAGE;
93
94 /* Code in ntoskrnl/lpc/close.h */
95
96 VOID STDCALL
97 NiClosePort (PVOID ObjectBody,
98 ULONG HandleCount);
99 VOID STDCALL
100 NiDeletePort (IN PVOID ObjectBody);
101
102 /* Code in ntoskrnl/lpc/queue.c */
103
104 VOID STDCALL
105 EiEnqueueConnectMessagePort (IN OUT PEPORT Port,
106 IN PQUEUEDMESSAGE Message);
107 VOID STDCALL
108 EiEnqueueMessagePort (IN OUT PEPORT Port,
109 IN PQUEUEDMESSAGE Message);
110 VOID STDCALL
111 EiEnqueueMessageAtHeadPort (IN OUT PEPORT Port,
112 IN PQUEUEDMESSAGE Message);
113 PQUEUEDMESSAGE
114 STDCALL
115 EiDequeueConnectMessagePort (IN OUT PEPORT Port);
116 PQUEUEDMESSAGE STDCALL
117 EiDequeueMessagePort (IN OUT PEPORT Port);
118
119 /* Code in ntoskrnl/lpc/create.c */
120
121 NTSTATUS STDCALL
122 NiCreatePort (PVOID ObjectBody,
123 PVOID Parent,
124 PWSTR RemainingPath,
125 POBJECT_ATTRIBUTES ObjectAttributes);
126
127 /* Code in ntoskrnl/lpc/port.c */
128
129 NTSTATUS STDCALL
130 NiInitializePort (IN OUT PEPORT Port);
131 NTSTATUS
132 NiInitPort (VOID);
133
134 extern POBJECT_TYPE ExPortType;
135 extern ULONG EiNextLpcMessageId;
136
137 /* Code in ntoskrnl/lpc/reply.c */
138
139 NTSTATUS STDCALL
140 EiReplyOrRequestPort (IN PEPORT Port,
141 IN PLPC_MESSAGE LpcReply,
142 IN ULONG MessageType,
143 IN PEPORT Sender);
144
145
146 #endif /* __INCLUDE_INTERNAL_PORT_H */