213 if (*ReceiveFlags == 0)
250 TRACE(
"Opened without flag WSA_FLAG_OVERLAPPED. Do nothing.\n");
253 if (lpCompletionRoutine ==
NULL)
267 ERR(
"Not enough memory for APC Context\n");
270 ((
PAFDAPCCONTEXT)APCContext)->lpCompletionRoutine = lpCompletionRoutine;
310 TRACE(
"Leaving (Pending)\n");
357 int *SocketAddressLength,
413 SocketAddressLength);
431 RecvInfo.
Address = SocketAddress;
434 if (*ReceiveFlags == 0)
471 TRACE(
"Opened without flag WSA_FLAG_OVERLAPPED. Do nothing.\n");
474 if (lpCompletionRoutine ==
NULL)
488 ERR(
"Not enough memory for APC Context\n");
491 ((
PAFDAPCCONTEXT)APCContext)->lpCompletionRoutine = lpCompletionRoutine;
526 TRACE(
"Leaving (Pending)\n");
644 TRACE(
"Opened without flag WSA_FLAG_OVERLAPPED. Do nothing.\n");
647 if (lpCompletionRoutine ==
NULL)
661 ERR(
"Not enough memory for APC Context\n");
664 ((
PAFDAPCCONTEXT)APCContext)->lpCompletionRoutine = lpCompletionRoutine;
699 TRACE(
"Leaving (Pending)\n");
724 const struct sockaddr *SocketAddress,
725 int SocketAddressLength,
740 INT BindAddressLength;
796 if (BindAddress !=
NULL)
810 if (BindAddress !=
NULL)
843 TRACE(
"Opened without flag WSA_FLAG_OVERLAPPED. Do nothing.\n");
846 if (lpCompletionRoutine ==
NULL)
860 ERR(
"Not enough memory for APC Context\n");
863 ((
PAFDAPCCONTEXT)APCContext)->lpCompletionRoutine = lpCompletionRoutine;
895 if (BindAddress !=
NULL)
902 TRACE(
"Leaving (Pending)\n");
#define NT_SUCCESS(StatCode)
#define HeapFree(x, y, z)
HANDLE SockAsyncCompletionPort
INT WSPAPI WSPBind(SOCKET Handle, const struct sockaddr *SocketAddress, int SocketAddressLength, LPINT lpErrno)
BOOLEAN SockCreateOrReferenceAsyncThread(VOID)
PSOCKET_INFORMATION GetSocketStructure(SOCKET Handle)
VOID SockProcessQueuedAsyncSelect(PVOID Context, PIO_STATUS_BLOCK IoStatusBlock)
int SetSocketInformation(PSOCKET_INFORMATION Socket, ULONG AfdInformationClass, PBOOLEAN Boolean OPTIONAL, PULONG Ulong OPTIONAL, PLARGE_INTEGER LargeInteger OPTIONAL, LPWSAOVERLAPPED Overlapped OPTIONAL, LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine OPTIONAL)
VOID SockReenableAsyncSelectEvent(IN PSOCKET_INFORMATION Socket, IN ULONG Event)
BOOLEAN SockGetAsyncSelectHelperAfdHandle(VOID)
int WSPAPI WSPEventSelect(IN SOCKET Handle, IN WSAEVENT hEventObject, IN long lNetworkEvents, OUT LPINT lpErrno)
FORCEINLINE DWORD MsafdReturnWithErrno(NTSTATUS Status, LPINT Errno, DWORD Received, LPDWORD ReturnedBytes)
struct _AFDAPCCONTEXT * PAFDAPCCONTEXT
#define SO_SYNCHRONOUS_NONALERT
struct _IO_STATUS_BLOCK * PIO_STATUS_BLOCK
NTSTATUS NTAPI NtSetIoCompletion(IN HANDLE IoCompletionPortHandle, IN PVOID CompletionKey, IN PVOID CompletionContext, IN NTSTATUS CompletionStatus, IN ULONG CompletionInformation)
BOOL WINAPI GetOverlappedResult(IN HANDLE hFile, IN LPOVERLAPPED lpOverlapped, OUT LPDWORD lpNumberOfBytesTransferred, IN BOOL bWait)
static OUT PIO_STATUS_BLOCK IoStatusBlock
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED lpOverlapped
_In_opt_ HANDLE _In_opt_ PIO_APC_ROUTINE _In_opt_ PVOID ApcContext
NTSYSAPI NTSTATUS NTAPI NtDeviceIoControlFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, IN ULONG DeviceIoControlCode, IN PVOID InBuffer OPTIONAL, IN ULONG InBufferLength, OUT PVOID OutBuffer OPTIONAL, IN ULONG OutBufferLength)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
VOID(* PIO_APC_ROUTINE)(IN PVOID ApcContext, IN PIO_STATUS_BLOCK IoStatusBlock, IN ULONG Reserved)
NTSTATUS NTAPI NtCreateEvent(OUT PHANDLE EventHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN EVENT_TYPE EventType, IN BOOLEAN InitialState)
#define STATUS_RECEIVE_EXPEDITED
#define STATUS_RECEIVE_PARTIAL
#define STATUS_RECEIVE_PARTIAL_EXPEDITED
#define AFD_INFO_BLOCKING_MODE
#define IOCTL_AFD_SEND_DATAGRAM
struct _AFD_WSABUF * PAFD_WSABUF
#define IOCTL_AFD_RECV_DATAGRAM
VOID NTAPI AfdAPC(PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, ULONG Reserved)
INT WSPAPI WSPSendDisconnect(IN SOCKET s, IN LPWSABUF lpOutboundDisconnectData, OUT LPINT lpErrno)
int WSPAPI WSPRecvFrom(SOCKET Handle, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRead, LPDWORD ReceiveFlags, struct sockaddr *SocketAddress, int *SocketAddressLength, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, LPWSATHREADID lpThreadId, LPINT lpErrno)
BOOL WSPAPI WSPGetOverlappedResult(IN SOCKET Handle, IN LPWSAOVERLAPPED lpOverlapped, OUT LPDWORD lpdwBytes, IN BOOL fWait, OUT LPDWORD lpdwFlags, OUT LPINT lpErrno)
INT WSPAPI WSPAsyncSelect(IN SOCKET Handle, IN HWND hWnd, IN UINT wMsg, IN LONG lEvent, OUT LPINT lpErrno)
int WSPAPI WSPSendTo(SOCKET Handle, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD iFlags, const struct sockaddr *SocketAddress, int SocketAddressLength, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, LPWSATHREADID lpThreadId, LPINT lpErrno)
int WSPAPI WSPSend(SOCKET Handle, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD iFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, LPWSATHREADID lpThreadId, LPINT lpErrno)
int WSPAPI WSPRecv(SOCKET Handle, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRead, LPDWORD ReceiveFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, LPWSATHREADID lpThreadId, LPINT lpErrno)
INT WSPAPI WSPRecvDisconnect(IN SOCKET s, OUT LPWSABUF lpInboundDisconnectData, OUT LPINT lpErrno)
TDI_CONNECTION_INFORMATION TdiConnection
PSOCKET_INFORMATION ParentSocket
PWSH_GET_WILDCARD_SOCKADDR WSHGetWildcardSockaddr
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
#define TDI_SEND_EXPEDITED
#define TDI_RECEIVE_PARTIAL
#define TDI_RECEIVE_EXPEDITED
#define TDI_RECEIVE_NORMAL
#define RtlCopyMemory(Destination, Source, Length)
#define STATUS_INSUFFICIENT_RESOURCES
_Reserved_ PVOID Reserved
#define XP1_CONNECTIONLESS
void(CALLBACK * LPWSAOVERLAPPED_COMPLETION_ROUTINE)(IN DWORD dwError, IN DWORD cbTransferred, IN LPWSAOVERLAPPED lpOverlapped, IN DWORD dwFlags)
_Must_inspect_result_ _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR RemoteAddress