2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Ancillary Function Driver DLL
4 * FILE: dll/win32/msafd/msafd.h
5 * PURPOSE: Ancillary Function Driver DLL header
13 #define WIN32_NO_STATUS
15 #define COM_NO_WINDOWS_H
20 #define NTOS_MODE_USER
21 #include <ndk/exfuncs.h>
22 #include <ndk/iofuncs.h>
23 #include <ndk/obfuncs.h>
24 #include <ndk/rtlfuncs.h>
26 /* This includes ntsecapi.h so it needs to come after the NDK */
29 #include <afd/shared.h>
30 #include "include/helpers.h"
32 extern HANDLE GlobalHeap
;
33 extern WSPUPCALLTABLE Upcalls
;
34 extern LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest
;
35 extern LIST_ENTRY SockHelpersListHead
;
36 extern HANDLE SockEvent
;
37 extern HANDLE SockAsyncCompletionPort
;
38 extern BOOLEAN SockAsyncSelectCalled
;
40 typedef enum _SOCKET_STATE
{
46 } SOCKET_STATE
, *PSOCKET_STATE
;
48 typedef struct _SOCK_SHARED_INFO
{
53 INT SizeOfLocalAddress
;
54 INT SizeOfRemoteAddress
;
55 struct linger LingerData
;
58 ULONG SizeOfRecvBuffer
;
59 ULONG SizeOfSendBuffer
;
65 BOOLEAN ReuseAddresses
:1;
66 BOOLEAN ExclusiveAddressUse
:1;
67 BOOLEAN NonBlocking
:1;
68 BOOLEAN DontUseWildcard
:1;
69 BOOLEAN ReceiveShutdown
:1;
70 BOOLEAN SendShutdown
:1;
71 BOOLEAN UseDelayedAcceptance
:1;
86 LONG AsyncDisabledEvents
;
87 } SOCK_SHARED_INFO
, *PSOCK_SHARED_INFO
;
89 typedef struct _SOCKET_INFORMATION
{
92 SOCK_SHARED_INFO SharedData
;
94 PHELPER_DATA HelperData
;
96 PSOCKADDR LocalAddress
;
97 PSOCKADDR RemoteAddress
;
98 HANDLE TdiAddressHandle
;
99 HANDLE TdiConnectionHandle
;
103 CRITICAL_SECTION Lock
;
106 SOCKADDR WSLocalAddress
;
107 SOCKADDR WSRemoteAddress
;
108 WSAPROTOCOL_INFOW ProtocolInfo
;
109 struct _SOCKET_INFORMATION
*NextSocket
;
110 } SOCKET_INFORMATION
, *PSOCKET_INFORMATION
;
113 typedef struct _SOCKET_CONTEXT
{
114 SOCK_SHARED_INFO SharedData
;
115 ULONG SizeOfHelperData
;
117 SOCKADDR LocalAddress
;
118 SOCKADDR RemoteAddress
;
119 /* Plus Helper Data */
120 } SOCKET_CONTEXT
, *PSOCKET_CONTEXT
;
122 typedef struct _ASYNC_DATA
{
123 PSOCKET_INFORMATION ParentSocket
;
124 DWORD SequenceNumber
;
125 IO_STATUS_BLOCK IoStatusBlock
;
126 AFD_POLL_INFO AsyncSelectInfo
;
127 } ASYNC_DATA
, *PASYNC_DATA
;
134 IN OUT LPINT addrlen
,
135 IN LPCONDITIONPROC lpfnCondition
,
136 IN DWORD dwCallbackData
,
142 IN LPSOCKADDR lpsaAddress
,
143 IN DWORD dwAddressLength
,
144 IN LPWSAPROTOCOL_INFOW lpProtocolInfo
,
145 OUT LPWSTR lpszAddressString
,
146 IN OUT LPDWORD lpdwAddressStringLength
,
161 IN CONST SOCKADDR
*name
,
167 WSPCancelBlockingCall(
185 IN CONST SOCKADDR
*name
,
187 IN LPWSABUF lpCallerData
,
188 OUT LPWSABUF lpCalleeData
,
197 IN DWORD dwProcessId
,
198 OUT LPWSAPROTOCOL_INFOW lpProtocolInfo
,
203 WSPEnumNetworkEvents(
205 IN WSAEVENT hEventObject
,
206 OUT LPWSANETWORKEVENTS lpNetworkEvents
,
213 IN WSAEVENT hEventObject
,
214 IN LONG lNetworkEvents
,
219 WSPGetOverlappedResult(
221 IN LPWSAOVERLAPPED lpOverlapped
,
222 OUT LPDWORD lpcbTransfer
,
224 OUT LPDWORD lpdwFlags
,
232 IN OUT LPINT namelen
,
239 IN OUT LPWSABUF lpQOSName
,
248 IN OUT LPINT namelen
,
257 OUT CHAR FAR
* optval
,
265 IN DWORD dwIoControlCode
,
266 IN LPVOID lpvInBuffer
,
268 OUT LPVOID lpvOutBuffer
,
269 IN DWORD cbOutBuffer
,
270 OUT LPDWORD lpcbBytesReturned
,
271 IN LPWSAOVERLAPPED lpOverlapped
,
272 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
,
273 IN LPWSATHREADID lpThreadId
,
280 IN CONST SOCKADDR
*name
,
282 IN LPWSABUF lpCallerData
,
283 OUT LPWSABUF lpCalleeData
,
300 IN OUT LPWSABUF lpBuffers
,
301 IN DWORD dwBufferCount
,
302 OUT LPDWORD lpNumberOfBytesRecvd
,
303 IN OUT LPDWORD lpFlags
,
304 IN LPWSAOVERLAPPED lpOverlapped
,
305 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
,
306 IN LPWSATHREADID lpThreadId
,
313 OUT LPWSABUF lpInboundDisconnectData
,
320 IN OUT LPWSABUF lpBuffers
,
321 IN DWORD dwBufferCount
,
322 OUT LPDWORD lpNumberOfBytesRecvd
,
323 IN OUT LPDWORD lpFlags
,
324 OUT LPSOCKADDR lpFrom
,
325 IN OUT LPINT lpFromlen
,
326 IN LPWSAOVERLAPPED lpOverlapped
,
327 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
,
328 IN LPWSATHREADID lpThreadId
,
335 IN OUT fd_set
*readfds
,
336 IN OUT fd_set
*writefds
,
337 IN OUT fd_set
*exceptfds
,
338 IN CONST
struct timeval
*timeout
,
345 IN LPWSABUF lpBuffers
,
346 IN DWORD dwBufferCount
,
347 OUT LPDWORD lpNumberOfBytesSent
,
349 IN LPWSAOVERLAPPED lpOverlapped
,
350 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
,
351 IN LPWSATHREADID lpThreadId
,
358 IN LPWSABUF lpOutboundDisconnectData
,
365 IN LPWSABUF lpBuffers
,
366 IN DWORD dwBufferCount
,
367 OUT LPDWORD lpNumberOfBytesSent
,
369 IN CONST SOCKADDR
*lpTo
,
371 IN LPWSAOVERLAPPED lpOverlapped
,
372 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
,
373 IN LPWSATHREADID lpThreadId
,
382 IN CONST CHAR FAR
* optval
,
399 IN LPWSAPROTOCOL_INFOW lpProtocolInfo
,
407 IN LPWSTR AddressString
,
408 IN INT AddressFamily
,
409 IN LPWSAPROTOCOL_INFOW lpProtocolInfo
,
410 OUT LPSOCKADDR lpAddress
,
411 IN OUT LPINT lpAddressLength
,
415 PSOCKET_INFORMATION
GetSocketStructure(
419 INT
TranslateNtStatusError( NTSTATUS Status
);
421 VOID
DeleteSocketStructure( SOCKET Handle
);
423 int GetSocketInformation(
424 PSOCKET_INFORMATION Socket
,
425 ULONG AfdInformationClass
,
426 PBOOLEAN Boolean OPTIONAL
,
427 PULONG Ulong OPTIONAL
,
428 PLARGE_INTEGER LargeInteger OPTIONAL
431 int SetSocketInformation(
432 PSOCKET_INFORMATION Socket
,
433 ULONG AfdInformationClass
,
434 PBOOLEAN Boolean OPTIONAL
,
435 PULONG Ulong OPTIONAL
,
436 PLARGE_INTEGER LargeInteger OPTIONAL
440 PSOCKET_INFORMATION Socket
448 SockProcessAsyncSelect(
449 PSOCKET_INFORMATION Socket
,
450 PASYNC_DATA AsyncData
454 SockAsyncSelectCompletionRoutine(
456 PIO_STATUS_BLOCK IoStatusBlock
460 SockCreateOrReferenceAsyncThread(
464 BOOLEAN
SockGetAsyncSelectHelperAfdHandle(
468 VOID
SockProcessQueuedAsyncSelect(
470 PIO_STATUS_BLOCK IoStatusBlock
474 SockReenableAsyncSelectEvent (
475 IN PSOCKET_INFORMATION Socket
,
479 typedef VOID (*PASYNC_COMPLETION_ROUTINE
)(PVOID Context
, PIO_STATUS_BLOCK IoStatusBlock
);
483 MsafdReturnWithErrno(NTSTATUS Status
,
486 LPDWORD ReturnedBytes
)
490 *Errno
= TranslateNtStatusError(Status
);
493 *ReturnedBytes
= (*Errno
== 0) ? Received
: 0;
495 return (*Errno
== 0) ? 0 : SOCKET_ERROR
;
499 DbgPrint("%s: Received invalid lpErrno pointer!\n", __FUNCTION__
);
502 *ReturnedBytes
= (Status
== STATUS_SUCCESS
) ? Received
: 0;
504 return (Status
== STATUS_SUCCESS
) ? 0 : SOCKET_ERROR
;
508 #endif /* __MSAFD_H */