- Various fixes to headers, such as fixing some LPC prototypes, adding/correcting...
[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 /* Code in ntoskrnl/lpc/close.h */
94
95 VOID STDCALL
96 LpcpClosePort (PVOID ObjectBody,
97 ULONG HandleCount);
98 VOID STDCALL
99 LpcpDeletePort (IN PVOID ObjectBody);
100
101 /* Code in ntoskrnl/lpc/queue.c */
102
103 VOID STDCALL
104 EiEnqueueConnectMessagePort (IN OUT PEPORT Port,
105 IN PQUEUEDMESSAGE Message);
106 VOID STDCALL
107 EiEnqueueMessagePort (IN OUT PEPORT Port,
108 IN PQUEUEDMESSAGE Message);
109 VOID STDCALL
110 EiEnqueueMessageAtHeadPort (IN OUT PEPORT Port,
111 IN PQUEUEDMESSAGE Message);
112 PQUEUEDMESSAGE
113 STDCALL
114 EiDequeueConnectMessagePort (IN OUT PEPORT Port);
115 PQUEUEDMESSAGE STDCALL
116 EiDequeueMessagePort (IN OUT PEPORT Port);
117
118 /* Code in ntoskrnl/lpc/create.c */
119
120 NTSTATUS STDCALL
121 NiCreatePort (PVOID ObjectBody,
122 PVOID Parent,
123 PWSTR RemainingPath,
124 POBJECT_ATTRIBUTES ObjectAttributes);
125
126 /* Code in ntoskrnl/lpc/port.c */
127
128 NTSTATUS STDCALL
129 LpcpInitializePort (IN OUT PEPORT Port,
130 IN USHORT Type,
131 IN PEPORT Parent OPTIONAL);
132 NTSTATUS
133 LpcpInitSystem (VOID);
134
135 extern POBJECT_TYPE LpcPortObjectType;
136 extern ULONG LpcpNextMessageId;
137 extern FAST_MUTEX LpcpLock;
138
139 /* Code in ntoskrnl/lpc/reply.c */
140
141 NTSTATUS STDCALL
142 EiReplyOrRequestPort (IN PEPORT Port,
143 IN PPORT_MESSAGE LpcReply,
144 IN ULONG MessageType,
145 IN PEPORT Sender);
146
147
148 #endif /* __INCLUDE_INTERNAL_PORT_H */