Remove an unintended change
[reactos.git] / reactos / dll / win32 / msafd / msafd.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Ancillary Function Driver DLL
4 * FILE: include/msafd.h
5 * PURPOSE: Ancillary Function Driver DLL header
6 */
7 #ifndef __MSAFD_H
8 #define __MSAFD_H
9
10 #include <stdio.h>
11 #include <stdlib.h>
12
13 #define WIN32_NO_STATUS
14 #include <winsock2.h>
15 #include <windows.h>
16 #include <ws2spi.h>
17 #define NTOS_MODE_USER
18 #include <ndk/ntndk.h>
19
20 /* This includes ntsecapi.h so it needs to come after the NDK */
21 #include <wsahelp.h>
22 #include <tdi.h>
23 #include <afd/shared.h>
24 #include <helpers.h>
25
26 extern HANDLE GlobalHeap;
27 extern WSPUPCALLTABLE Upcalls;
28 extern LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest;
29 extern LIST_ENTRY SockHelpersListHead;
30 extern HANDLE SockEvent;
31 extern HANDLE SockAsyncCompletionPort;
32 extern BOOLEAN SockAsyncSelectCalled;
33
34 typedef enum _SOCKET_STATE {
35 SocketOpen,
36 SocketBound,
37 SocketBoundUdp,
38 SocketConnected,
39 SocketClosed
40 } SOCKET_STATE, *PSOCKET_STATE;
41
42 typedef struct _SOCK_SHARED_INFO {
43 SOCKET_STATE State;
44 INT AddressFamily;
45 INT SocketType;
46 INT Protocol;
47 INT SizeOfLocalAddress;
48 INT SizeOfRemoteAddress;
49 struct linger LingerData;
50 ULONG SendTimeout;
51 ULONG RecvTimeout;
52 ULONG SizeOfRecvBuffer;
53 ULONG SizeOfSendBuffer;
54 struct {
55 BOOLEAN Listening:1;
56 BOOLEAN Broadcast:1;
57 BOOLEAN Debug:1;
58 BOOLEAN OobInline:1;
59 BOOLEAN ReuseAddresses:1;
60 BOOLEAN ExclusiveAddressUse:1;
61 BOOLEAN NonBlocking:1;
62 BOOLEAN DontUseWildcard:1;
63 BOOLEAN ReceiveShutdown:1;
64 BOOLEAN SendShutdown:1;
65 BOOLEAN UseDelayedAcceptance:1;
66 BOOLEAN UseSAN:1;
67 }; // Flags
68 DWORD CreateFlags;
69 DWORD CatalogEntryId;
70 DWORD ServiceFlags1;
71 DWORD ProviderFlags;
72 GROUP GroupID;
73 DWORD GroupType;
74 INT GroupPriority;
75 INT SocketLastError;
76 HWND hWnd;
77 LONG Unknown;
78 DWORD SequenceNumber;
79 UINT wMsg;
80 LONG AsyncEvents;
81 LONG AsyncDisabledEvents;
82 } SOCK_SHARED_INFO, *PSOCK_SHARED_INFO;
83
84 typedef struct _SOCKET_INFORMATION {
85 ULONG RefCount;
86 SOCKET Handle;
87 SOCK_SHARED_INFO SharedData;
88 DWORD HelperEvents;
89 PHELPER_DATA HelperData;
90 PVOID HelperContext;
91 PSOCKADDR LocalAddress;
92 PSOCKADDR RemoteAddress;
93 HANDLE TdiAddressHandle;
94 HANDLE TdiConnectionHandle;
95 PVOID AsyncData;
96 HANDLE EventObject;
97 LONG NetworkEvents;
98 CRITICAL_SECTION Lock;
99 PVOID SanData;
100 BOOL TrySAN;
101 SOCKADDR WSLocalAddress;
102 SOCKADDR WSRemoteAddress;
103 } SOCKET_INFORMATION, *PSOCKET_INFORMATION;
104
105
106 typedef struct _SOCKET_CONTEXT {
107 SOCK_SHARED_INFO SharedData;
108 ULONG SizeOfHelperData;
109 ULONG Padding;
110 SOCKADDR LocalAddress;
111 SOCKADDR RemoteAddress;
112 /* Plus Helper Data */
113 } SOCKET_CONTEXT, *PSOCKET_CONTEXT;
114
115 typedef struct _ASYNC_DATA {
116 PSOCKET_INFORMATION ParentSocket;
117 DWORD SequenceNumber;
118 IO_STATUS_BLOCK IoStatusBlock;
119 AFD_POLL_INFO AsyncSelectInfo;
120 } ASYNC_DATA, *PASYNC_DATA;
121
122 SOCKET
123 WSPAPI
124 WSPAccept(
125 IN SOCKET s,
126 OUT LPSOCKADDR addr,
127 IN OUT LPINT addrlen,
128 IN LPCONDITIONPROC lpfnCondition,
129 IN DWORD dwCallbackData,
130 OUT LPINT lpErrno);
131
132 INT
133 WSPAPI
134 WSPAddressToString(
135 IN LPSOCKADDR lpsaAddress,
136 IN DWORD dwAddressLength,
137 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
138 OUT LPWSTR lpszAddressString,
139 IN OUT LPDWORD lpdwAddressStringLength,
140 OUT LPINT lpErrno);
141
142 INT
143 WSPAPI
144 WSPAsyncSelect(
145 IN SOCKET s,
146 IN HWND hWnd,
147 IN UINT wMsg,
148 IN LONG lEvent,
149 OUT LPINT lpErrno);
150
151 INT
152 WSPAPI WSPBind(
153 IN SOCKET s,
154 IN CONST SOCKADDR *name,
155 IN INT namelen,
156 OUT LPINT lpErrno);
157
158 INT
159 WSPAPI
160 WSPCancelBlockingCall(
161 OUT LPINT lpErrno);
162
163 INT
164 WSPAPI
165 WSPCleanup(
166 OUT LPINT lpErrno);
167
168 INT
169 WSPAPI
170 WSPCloseSocket(
171 IN SOCKET s,
172 OUT LPINT lpErrno);
173
174 INT
175 WSPAPI
176 WSPConnect(
177 IN SOCKET s,
178 IN CONST SOCKADDR *name,
179 IN INT namelen,
180 IN LPWSABUF lpCallerData,
181 OUT LPWSABUF lpCalleeData,
182 IN LPQOS lpSQOS,
183 IN LPQOS lpGQOS,
184 OUT LPINT lpErrno);
185
186 INT
187 WSPAPI
188 WSPDuplicateSocket(
189 IN SOCKET s,
190 IN DWORD dwProcessId,
191 OUT LPWSAPROTOCOL_INFOW lpProtocolInfo,
192 OUT LPINT lpErrno);
193
194 INT
195 WSPAPI
196 WSPEnumNetworkEvents(
197 IN SOCKET s,
198 IN WSAEVENT hEventObject,
199 OUT LPWSANETWORKEVENTS lpNetworkEvents,
200 OUT LPINT lpErrno);
201
202 INT
203 WSPAPI
204 WSPEventSelect(
205 IN SOCKET s,
206 IN WSAEVENT hEventObject,
207 IN LONG lNetworkEvents,
208 OUT LPINT lpErrno);
209
210 BOOL
211 WSPAPI
212 WSPGetOverlappedResult(
213 IN SOCKET s,
214 IN LPWSAOVERLAPPED lpOverlapped,
215 OUT LPDWORD lpcbTransfer,
216 IN BOOL fWait,
217 OUT LPDWORD lpdwFlags,
218 OUT LPINT lpErrno);
219
220 INT
221 WSPAPI
222 WSPGetPeerName(
223 IN SOCKET s,
224 OUT LPSOCKADDR name,
225 IN OUT LPINT namelen,
226 OUT LPINT lpErrno);
227
228 BOOL
229 WSPAPI
230 WSPGetQOSByName(
231 IN SOCKET s,
232 IN OUT LPWSABUF lpQOSName,
233 OUT LPQOS lpQOS,
234 OUT LPINT lpErrno);
235
236 INT
237 WSPAPI
238 WSPGetSockName(
239 IN SOCKET s,
240 OUT LPSOCKADDR name,
241 IN OUT LPINT namelen,
242 OUT LPINT lpErrno);
243
244 INT
245 WSPAPI
246 WSPGetSockOpt(
247 IN SOCKET s,
248 IN INT level,
249 IN INT optname,
250 OUT CHAR FAR* optval,
251 IN OUT LPINT optlen,
252 OUT LPINT lpErrno);
253
254 INT
255 WSPAPI
256 WSPIoctl(
257 IN SOCKET s,
258 IN DWORD dwIoControlCode,
259 IN LPVOID lpvInBuffer,
260 IN DWORD cbInBuffer,
261 OUT LPVOID lpvOutBuffer,
262 IN DWORD cbOutBuffer,
263 OUT LPDWORD lpcbBytesReturned,
264 IN LPWSAOVERLAPPED lpOverlapped,
265 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
266 IN LPWSATHREADID lpThreadId,
267 OUT LPINT lpErrno);
268
269 SOCKET
270 WSPAPI
271 WSPJoinLeaf(
272 IN SOCKET s,
273 IN CONST SOCKADDR *name,
274 IN INT namelen,
275 IN LPWSABUF lpCallerData,
276 OUT LPWSABUF lpCalleeData,
277 IN LPQOS lpSQOS,
278 IN LPQOS lpGQOS,
279 IN DWORD dwFlags,
280 OUT LPINT lpErrno);
281
282 INT
283 WSPAPI
284 WSPListen(
285 IN SOCKET s,
286 IN INT backlog,
287 OUT LPINT lpErrno);
288
289 INT
290 WSPAPI
291 WSPRecv(
292 IN SOCKET s,
293 IN OUT LPWSABUF lpBuffers,
294 IN DWORD dwBufferCount,
295 OUT LPDWORD lpNumberOfBytesRecvd,
296 IN OUT LPDWORD lpFlags,
297 IN LPWSAOVERLAPPED lpOverlapped,
298 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
299 IN LPWSATHREADID lpThreadId,
300 OUT LPINT lpErrno);
301
302 INT
303 WSPAPI
304 WSPRecvDisconnect(
305 IN SOCKET s,
306 OUT LPWSABUF lpInboundDisconnectData,
307 OUT LPINT lpErrno);
308
309 INT
310 WSPAPI
311 WSPRecvFrom(
312 IN SOCKET s,
313 IN OUT LPWSABUF lpBuffers,
314 IN DWORD dwBufferCount,
315 OUT LPDWORD lpNumberOfBytesRecvd,
316 IN OUT LPDWORD lpFlags,
317 OUT LPSOCKADDR lpFrom,
318 IN OUT LPINT lpFromlen,
319 IN LPWSAOVERLAPPED lpOverlapped,
320 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
321 IN LPWSATHREADID lpThreadId,
322 OUT LPINT lpErrno);
323
324 INT
325 WSPAPI
326 WSPSelect(
327 IN INT nfds,
328 IN OUT LPFD_SET readfds,
329 IN OUT LPFD_SET writefds,
330 IN OUT LPFD_SET exceptfds,
331 IN CONST LPTIMEVAL timeout,
332 OUT LPINT lpErrno);
333
334 INT
335 WSPAPI
336 WSPSend(
337 IN SOCKET s,
338 IN LPWSABUF lpBuffers,
339 IN DWORD dwBufferCount,
340 OUT LPDWORD lpNumberOfBytesSent,
341 IN DWORD dwFlags,
342 IN LPWSAOVERLAPPED lpOverlapped,
343 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
344 IN LPWSATHREADID lpThreadId,
345 OUT LPINT lpErrno);
346
347 INT
348 WSPAPI
349 WSPSendDisconnect(
350 IN SOCKET s,
351 IN LPWSABUF lpOutboundDisconnectData,
352 OUT LPINT lpErrno);
353
354 INT
355 WSPAPI
356 WSPSendTo(
357 IN SOCKET s,
358 IN LPWSABUF lpBuffers,
359 IN DWORD dwBufferCount,
360 OUT LPDWORD lpNumberOfBytesSent,
361 IN DWORD dwFlags,
362 IN CONST SOCKADDR *lpTo,
363 IN INT iTolen,
364 IN LPWSAOVERLAPPED lpOverlapped,
365 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
366 IN LPWSATHREADID lpThreadId,
367 OUT LPINT lpErrno);
368
369 INT
370 WSPAPI
371 WSPSetSockOpt(
372 IN SOCKET s,
373 IN INT level,
374 IN INT optname,
375 IN CONST CHAR FAR* optval,
376 IN INT optlen,
377 OUT LPINT lpErrno);
378
379 INT
380 WSPAPI
381 WSPShutdown(
382 IN SOCKET s,
383 IN INT how,
384 OUT LPINT lpErrno);
385
386 SOCKET
387 WSPAPI
388 WSPSocket(
389 IN INT af,
390 IN INT type,
391 IN INT protocol,
392 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
393 IN GROUP g,
394 IN DWORD dwFlags,
395 OUT LPINT lpErrno);
396
397 INT
398 WSPAPI
399 WSPStringToAddress(
400 IN LPWSTR AddressString,
401 IN INT AddressFamily,
402 IN LPWSAPROTOCOL_INFOW lpProtocolInfo,
403 OUT LPSOCKADDR lpAddress,
404 IN OUT LPINT lpAddressLength,
405 OUT LPINT lpErrno);
406
407
408 PSOCKET_INFORMATION GetSocketStructure(
409 SOCKET Handle
410 );
411
412 INT TranslateNtStatusError( NTSTATUS Status );
413
414 VOID DeleteSocketStructure( SOCKET Handle );
415
416 int GetSocketInformation(
417 PSOCKET_INFORMATION Socket,
418 ULONG AfdInformationClass,
419 PULONG Ulong OPTIONAL,
420 PLARGE_INTEGER LargeInteger OPTIONAL
421 );
422
423 int SetSocketInformation(
424 PSOCKET_INFORMATION Socket,
425 ULONG AfdInformationClass,
426 PULONG Ulong OPTIONAL,
427 PLARGE_INTEGER LargeInteger OPTIONAL
428 );
429
430 int CreateContext(
431 PSOCKET_INFORMATION Socket
432 );
433
434 int SockAsyncThread(
435 PVOID ThreadParam
436 );
437
438 VOID
439 SockProcessAsyncSelect(
440 PSOCKET_INFORMATION Socket,
441 PASYNC_DATA AsyncData
442 );
443
444 VOID
445 SockAsyncSelectCompletionRoutine(
446 PVOID Context,
447 PIO_STATUS_BLOCK IoStatusBlock
448 );
449
450 BOOLEAN
451 SockCreateOrReferenceAsyncThread(
452 VOID
453 );
454
455 BOOLEAN SockGetAsyncSelectHelperAfdHandle(
456 VOID
457 );
458
459 VOID SockProcessQueuedAsyncSelect(
460 PVOID Context,
461 PIO_STATUS_BLOCK IoStatusBlock
462 );
463
464 VOID
465 SockReenableAsyncSelectEvent (
466 IN PSOCKET_INFORMATION Socket,
467 IN ULONG Event
468 );
469
470 DWORD MsafdReturnWithErrno( NTSTATUS Status, LPINT Errno, DWORD Received,
471 LPDWORD ReturnedBytes );
472
473 typedef VOID (*PASYNC_COMPLETION_ROUTINE)(PVOID Context, PIO_STATUS_BLOCK IoStatusBlock);
474
475 #endif /* __MSAFD_H */
476
477 /* EOF */