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 struct _SOCKET_INFORMATION
*NextSocket
;
104 } SOCKET_INFORMATION
, *PSOCKET_INFORMATION
;
107 typedef struct _SOCKET_CONTEXT
{
108 SOCK_SHARED_INFO SharedData
;
109 ULONG SizeOfHelperData
;
111 SOCKADDR LocalAddress
;
112 SOCKADDR RemoteAddress
;
113 /* Plus Helper Data */
114 } SOCKET_CONTEXT
, *PSOCKET_CONTEXT
;
116 typedef struct _ASYNC_DATA
{
117 PSOCKET_INFORMATION ParentSocket
;
118 DWORD SequenceNumber
;
119 IO_STATUS_BLOCK IoStatusBlock
;
120 AFD_POLL_INFO AsyncSelectInfo
;
121 } ASYNC_DATA
, *PASYNC_DATA
;
128 IN OUT LPINT addrlen
,
129 IN LPCONDITIONPROC lpfnCondition
,
130 IN DWORD dwCallbackData
,
136 IN LPSOCKADDR lpsaAddress
,
137 IN DWORD dwAddressLength
,
138 IN LPWSAPROTOCOL_INFOW lpProtocolInfo
,
139 OUT LPWSTR lpszAddressString
,
140 IN OUT LPDWORD lpdwAddressStringLength
,
155 IN CONST SOCKADDR
*name
,
161 WSPCancelBlockingCall(
179 IN CONST SOCKADDR
*name
,
181 IN LPWSABUF lpCallerData
,
182 OUT LPWSABUF lpCalleeData
,
191 IN DWORD dwProcessId
,
192 OUT LPWSAPROTOCOL_INFOW lpProtocolInfo
,
197 WSPEnumNetworkEvents(
199 IN WSAEVENT hEventObject
,
200 OUT LPWSANETWORKEVENTS lpNetworkEvents
,
207 IN WSAEVENT hEventObject
,
208 IN LONG lNetworkEvents
,
213 WSPGetOverlappedResult(
215 IN LPWSAOVERLAPPED lpOverlapped
,
216 OUT LPDWORD lpcbTransfer
,
218 OUT LPDWORD lpdwFlags
,
226 IN OUT LPINT namelen
,
233 IN OUT LPWSABUF lpQOSName
,
242 IN OUT LPINT namelen
,
251 OUT CHAR FAR
* optval
,
259 IN DWORD dwIoControlCode
,
260 IN LPVOID lpvInBuffer
,
262 OUT LPVOID lpvOutBuffer
,
263 IN DWORD cbOutBuffer
,
264 OUT LPDWORD lpcbBytesReturned
,
265 IN LPWSAOVERLAPPED lpOverlapped
,
266 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
,
267 IN LPWSATHREADID lpThreadId
,
274 IN CONST SOCKADDR
*name
,
276 IN LPWSABUF lpCallerData
,
277 OUT LPWSABUF lpCalleeData
,
294 IN OUT LPWSABUF lpBuffers
,
295 IN DWORD dwBufferCount
,
296 OUT LPDWORD lpNumberOfBytesRecvd
,
297 IN OUT LPDWORD lpFlags
,
298 IN LPWSAOVERLAPPED lpOverlapped
,
299 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
,
300 IN LPWSATHREADID lpThreadId
,
307 OUT LPWSABUF lpInboundDisconnectData
,
314 IN OUT LPWSABUF lpBuffers
,
315 IN DWORD dwBufferCount
,
316 OUT LPDWORD lpNumberOfBytesRecvd
,
317 IN OUT LPDWORD lpFlags
,
318 OUT LPSOCKADDR lpFrom
,
319 IN OUT LPINT lpFromlen
,
320 IN LPWSAOVERLAPPED lpOverlapped
,
321 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
,
322 IN LPWSATHREADID lpThreadId
,
329 IN OUT LPFD_SET readfds
,
330 IN OUT LPFD_SET writefds
,
331 IN OUT LPFD_SET exceptfds
,
332 IN CONST LPTIMEVAL timeout
,
339 IN LPWSABUF lpBuffers
,
340 IN DWORD dwBufferCount
,
341 OUT LPDWORD lpNumberOfBytesSent
,
343 IN LPWSAOVERLAPPED lpOverlapped
,
344 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
,
345 IN LPWSATHREADID lpThreadId
,
352 IN LPWSABUF lpOutboundDisconnectData
,
359 IN LPWSABUF lpBuffers
,
360 IN DWORD dwBufferCount
,
361 OUT LPDWORD lpNumberOfBytesSent
,
363 IN CONST SOCKADDR
*lpTo
,
365 IN LPWSAOVERLAPPED lpOverlapped
,
366 IN LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine
,
367 IN LPWSATHREADID lpThreadId
,
376 IN CONST CHAR FAR
* optval
,
393 IN LPWSAPROTOCOL_INFOW lpProtocolInfo
,
401 IN LPWSTR AddressString
,
402 IN INT AddressFamily
,
403 IN LPWSAPROTOCOL_INFOW lpProtocolInfo
,
404 OUT LPSOCKADDR lpAddress
,
405 IN OUT LPINT lpAddressLength
,
409 PSOCKET_INFORMATION
GetSocketStructure(
413 INT
TranslateNtStatusError( NTSTATUS Status
);
415 VOID
DeleteSocketStructure( SOCKET Handle
);
417 int GetSocketInformation(
418 PSOCKET_INFORMATION Socket
,
419 ULONG AfdInformationClass
,
420 PULONG Ulong OPTIONAL
,
421 PLARGE_INTEGER LargeInteger OPTIONAL
424 int SetSocketInformation(
425 PSOCKET_INFORMATION Socket
,
426 ULONG AfdInformationClass
,
427 PULONG Ulong OPTIONAL
,
428 PLARGE_INTEGER LargeInteger OPTIONAL
432 PSOCKET_INFORMATION Socket
440 SockProcessAsyncSelect(
441 PSOCKET_INFORMATION Socket
,
442 PASYNC_DATA AsyncData
446 SockAsyncSelectCompletionRoutine(
448 PIO_STATUS_BLOCK IoStatusBlock
452 SockCreateOrReferenceAsyncThread(
456 BOOLEAN
SockGetAsyncSelectHelperAfdHandle(
460 VOID
SockProcessQueuedAsyncSelect(
462 PIO_STATUS_BLOCK IoStatusBlock
466 SockReenableAsyncSelectEvent (
467 IN PSOCKET_INFORMATION Socket
,
471 DWORD
MsafdReturnWithErrno( NTSTATUS Status
, LPINT Errno
, DWORD Received
,
472 LPDWORD ReturnedBytes
);
474 typedef VOID (*PASYNC_COMPLETION_ROUTINE
)(PVOID Context
, PIO_STATUS_BLOCK IoStatusBlock
);
476 #endif /* __MSAFD_H */