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
13 #define WIN32_NO_STATUS
17 #define NTOS_MODE_USER
18 #include <ndk/ntndk.h>
20 /* This includes ntsecapi.h so it needs to come after the NDK */
23 #include <afd/shared.h>
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
;
34 typedef enum _SOCKET_STATE
{
40 } SOCKET_STATE
, *PSOCKET_STATE
;
42 typedef struct _SOCK_SHARED_INFO
{
47 INT SizeOfLocalAddress
;
48 INT SizeOfRemoteAddress
;
49 struct linger LingerData
;
52 ULONG SizeOfRecvBuffer
;
53 ULONG SizeOfSendBuffer
;
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;
81 LONG AsyncDisabledEvents
;
82 } SOCK_SHARED_INFO
, *PSOCK_SHARED_INFO
;
84 typedef struct _SOCKET_INFORMATION
{
87 SOCK_SHARED_INFO SharedData
;
89 PHELPER_DATA HelperData
;
91 PSOCKADDR LocalAddress
;
92 PSOCKADDR RemoteAddress
;
93 HANDLE TdiAddressHandle
;
94 HANDLE TdiConnectionHandle
;
98 CRITICAL_SECTION Lock
;
101 SOCKADDR WSLocalAddress
;
102 SOCKADDR WSRemoteAddress
;
103 } SOCKET_INFORMATION
, *PSOCKET_INFORMATION
;
106 typedef struct _SOCKET_CONTEXT
{
107 SOCK_SHARED_INFO SharedData
;
108 ULONG SizeOfHelperData
;
110 SOCKADDR LocalAddress
;
111 SOCKADDR RemoteAddress
;
112 /* Plus Helper Data */
113 } SOCKET_CONTEXT
, *PSOCKET_CONTEXT
;
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
;
127 IN OUT LPINT addrlen
,
128 IN LPCONDITIONPROC lpfnCondition
,
129 IN DWORD dwCallbackData
,
135 IN LPSOCKADDR lpsaAddress
,
136 IN DWORD dwAddressLength
,
137 IN LPWSAPROTOCOL_INFOW lpProtocolInfo
,
138 OUT LPWSTR lpszAddressString
,
139 IN OUT LPDWORD lpdwAddressStringLength
,
154 IN CONST SOCKADDR
*name
,
160 WSPCancelBlockingCall(
178 IN CONST SOCKADDR
*name
,
180 IN LPWSABUF lpCallerData
,
181 OUT LPWSABUF lpCalleeData
,
190 IN DWORD dwProcessId
,
191 OUT LPWSAPROTOCOL_INFOW lpProtocolInfo
,
196 WSPEnumNetworkEvents(
198 IN WSAEVENT hEventObject
,
199 OUT LPWSANETWORKEVENTS lpNetworkEvents
,
206 IN WSAEVENT hEventObject
,
207 IN LONG lNetworkEvents
,
212 WSPGetOverlappedResult(
214 IN LPWSAOVERLAPPED lpOverlapped
,
215 OUT LPDWORD lpcbTransfer
,
217 OUT LPDWORD lpdwFlags
,
225 IN OUT LPINT namelen
,
232 IN OUT LPWSABUF lpQOSName
,
241 IN OUT LPINT namelen
,
250 OUT CHAR FAR
* optval
,
258 IN DWORD dwIoControlCode
,
259 IN LPVOID lpvInBuffer
,
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
,
273 IN CONST SOCKADDR
*name
,
275 IN LPWSABUF lpCallerData
,
276 OUT LPWSABUF lpCalleeData
,
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
,
306 OUT LPWSABUF lpInboundDisconnectData
,
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
,
328 IN OUT LPFD_SET readfds
,
329 IN OUT LPFD_SET writefds
,
330 IN OUT LPFD_SET exceptfds
,
331 IN CONST LPTIMEVAL timeout
,
338 IN LPWSABUF lpBuffers
,
339 IN DWORD dwBufferCount
,
340 OUT LPDWORD lpNumberOfBytesSent
,
342 IN LPWSAOVERLAPPED lpOverlapped
,
343 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
,
344 IN LPWSATHREADID lpThreadId
,
351 IN LPWSABUF lpOutboundDisconnectData
,
358 IN LPWSABUF lpBuffers
,
359 IN DWORD dwBufferCount
,
360 OUT LPDWORD lpNumberOfBytesSent
,
362 IN CONST SOCKADDR
*lpTo
,
364 IN LPWSAOVERLAPPED lpOverlapped
,
365 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
,
366 IN LPWSATHREADID lpThreadId
,
375 IN CONST CHAR FAR
* optval
,
392 IN LPWSAPROTOCOL_INFOW lpProtocolInfo
,
400 IN LPWSTR AddressString
,
401 IN INT AddressFamily
,
402 IN LPWSAPROTOCOL_INFOW lpProtocolInfo
,
403 OUT LPSOCKADDR lpAddress
,
404 IN OUT LPINT lpAddressLength
,
408 PSOCKET_INFORMATION
GetSocketStructure(
412 INT
TranslateNtStatusError( NTSTATUS Status
);
414 VOID
DeleteSocketStructure( SOCKET Handle
);
416 int GetSocketInformation(
417 PSOCKET_INFORMATION Socket
,
418 ULONG AfdInformationClass
,
419 PULONG Ulong OPTIONAL
,
420 PLARGE_INTEGER LargeInteger OPTIONAL
423 int SetSocketInformation(
424 PSOCKET_INFORMATION Socket
,
425 ULONG AfdInformationClass
,
426 PULONG Ulong OPTIONAL
,
427 PLARGE_INTEGER LargeInteger OPTIONAL
431 PSOCKET_INFORMATION Socket
439 SockProcessAsyncSelect(
440 PSOCKET_INFORMATION Socket
,
441 PASYNC_DATA AsyncData
445 SockAsyncSelectCompletionRoutine(
447 PIO_STATUS_BLOCK IoStatusBlock
451 SockCreateOrReferenceAsyncThread(
455 BOOLEAN
SockGetAsyncSelectHelperAfdHandle(
459 VOID
SockProcessQueuedAsyncSelect(
461 PIO_STATUS_BLOCK IoStatusBlock
465 SockReenableAsyncSelectEvent (
466 IN PSOCKET_INFORMATION Socket
,
470 DWORD
MsafdReturnWithErrno( NTSTATUS Status
, LPINT Errno
, DWORD Received
,
471 LPDWORD ReturnedBytes
);
473 typedef VOID (*PASYNC_COMPLETION_ROUTINE
)(PVOID Context
, PIO_STATUS_BLOCK IoStatusBlock
);
475 #endif /* __MSAFD_H */