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");
PWSH_GET_WILDCARD_SOCKADDR WSHGetWildcardSockaddr
INT WSPAPI WSPRecvDisconnect(IN SOCKET s, OUT LPWSABUF lpInboundDisconnectData, OUT LPINT lpErrno)
#define STATUS_RECEIVE_PARTIAL
_In_opt_ HANDLE _In_opt_ PIO_APC_ROUTINE _In_opt_ PVOID ApcContext
VOID(* PIO_APC_ROUTINE)(IN PVOID ApcContext, IN PIO_STATUS_BLOCK IoStatusBlock, IN ULONG Reserved)
#define STATUS_INSUFFICIENT_RESOURCES
#define TDI_RECEIVE_PARTIAL
BOOLEAN SockGetAsyncSelectHelperAfdHandle(VOID)
VOID SockReenableAsyncSelectEvent(IN PSOCKET_INFORMATION Socket, IN ULONG Event)
BOOL WINAPI GetOverlappedResult(IN HANDLE hFile, IN LPOVERLAPPED lpOverlapped, OUT LPDWORD lpNumberOfBytesTransferred, IN BOOL bWait)
BOOL WSPAPI WSPGetOverlappedResult(IN SOCKET Handle, IN LPWSAOVERLAPPED lpOverlapped, OUT LPDWORD lpdwBytes, IN BOOL fWait, OUT LPDWORD lpdwFlags, OUT LPINT lpErrno)
TDI_CONNECTION_INFORMATION TdiConnection
PSOCKET_INFORMATION GetSocketStructure(SOCKET Handle)
HANDLE SockAsyncCompletionPort
NTSTATUS NTAPI NtCreateEvent(OUT PHANDLE EventHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN EVENT_TYPE EventType, IN BOOLEAN InitialState)
struct _AFDAPCCONTEXT * PAFDAPCCONTEXT
INT WSPAPI WSPAsyncSelect(IN SOCKET Handle, IN HWND hWnd, IN UINT wMsg, IN LONG lEvent, OUT LPINT lpErrno)
#define IOCTL_AFD_RECV_DATAGRAM
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)
#define TDI_RECEIVE_EXPEDITED
VOID NTAPI AfdAPC(PVOID ApcContext, PIO_STATUS_BLOCK IoStatusBlock, ULONG Reserved)
BOOLEAN SockCreateOrReferenceAsyncThread(VOID)
int WSPAPI WSPRecv(SOCKET Handle, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRead, LPDWORD ReceiveFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, LPWSATHREADID lpThreadId, LPINT lpErrno)
#define TDI_RECEIVE_NORMAL
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
VOID SockProcessQueuedAsyncSelect(PVOID Context, PIO_STATUS_BLOCK IoStatusBlock)
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
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)
#define IOCTL_AFD_SEND_DATAGRAM
_Reserved_ PVOID Reserved
#define TDI_SEND_EXPEDITED
#define AFD_INFO_BLOCKING_MODE
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
#define NT_SUCCESS(StatCode)
FORCEINLINE DWORD MsafdReturnWithErrno(NTSTATUS Status, LPINT Errno, DWORD Received, LPDWORD ReturnedBytes)
#define STATUS_RECEIVE_EXPEDITED
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)
INT WSPAPI WSPSendDisconnect(IN SOCKET s, IN LPWSABUF lpOutboundDisconnectData, OUT LPINT lpErrno)
PSOCKET_INFORMATION ParentSocket
int WSPAPI WSPEventSelect(IN SOCKET Handle, IN WSAEVENT hEventObject, IN long lNetworkEvents, OUT LPINT lpErrno)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
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 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)
struct _AFD_WSABUF * PAFD_WSABUF
#define SO_SYNCHRONOUS_NONALERT
INT WSPAPI WSPBind(SOCKET Handle, const struct sockaddr *SocketAddress, int SocketAddressLength, LPINT lpErrno)
_In_ HANDLE _In_ DWORD _In_ DWORD _Inout_opt_ LPOVERLAPPED lpOverlapped
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)
#define XP1_CONNECTIONLESS
static OUT PIO_STATUS_BLOCK IoStatusBlock
#define STATUS_RECEIVE_PARTIAL_EXPEDITED
void(CALLBACK * LPWSAOVERLAPPED_COMPLETION_ROUTINE)(IN DWORD dwError, IN DWORD cbTransferred, IN LPWSAOVERLAPPED lpOverlapped, IN DWORD dwFlags)
#define RtlCopyMemory(Destination, Source, Length)
#define HeapFree(x, y, z)
_Must_inspect_result_ _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR RemoteAddress