65 PVOID HelperDLLContext;
73 TRACE(
"Creating Socket, getting TDI Name - AddressFamily (%d) SocketType (%d) Protocol (%d).\n",
129 TRACE(
"Unknown Protocol (%d). We will try SOCK_STREAM.\n",
Protocol);
149 TRACE(
"Unknown SocketType (%d). We will try IPPROTO_TCP.\n",
SocketType);
169 ERR(
"SockGetTdiName: Status %x\n",
Status);
223 TRACE(
"Connectionless socket\n");
254 EABuffer->NextEntryOffset = 0;
260 EABuffer->EaValueLength = SizeOfPacket;
363 ERR(
"Failed to open socket. Status 0x%08x\n",
Status);
416 TRACE(
"Success %x\n", Sock);
527 lpProtocolInfo->dwServiceFlags3 =
HandleToUlong(hDuplicatedSharedData);
528 lpProtocolInfo->dwServiceFlags4 =
HandleToUlong(hDuplicatedHandle);
608 ERR(
"MSAFD: Unhandled NTSTATUS value: 0x%x\n",
Status);
632 LONG LingerWait = -1;
652 ERR(
"NtCreateEvent failed: 0x%08x",
Status);
666 if (lpErrno) *lpErrno =
Status;
667 ERR(
"WSHNotify failed. Error 0x%#x",
Status);
676 WARN(
"Socket is closing.\n");
695 ULONG SendsInProgress;
720 if (!SendsInProgress)
734 WARN(
"Would block!\n");
749 LingerWait -= SleepWait;
771 sizeof(DisconnectInfo),
801 while (CurrentSocket->NextSocket)
803 if (CurrentSocket->NextSocket == Socket)
805 CurrentSocket->
NextSocket = CurrentSocket->NextSocket->NextSocket;
809 CurrentSocket = CurrentSocket->NextSocket;
847 const struct sockaddr *SocketAddress,
848 int SocketAddressLength,
870 if (!SocketAddress || SocketAddressLength < Socket->SharedData->SizeOfLocalAddress)
911 SocketAddressLength -
sizeof(SocketAddress->
sa_family));
971 if (lpErrno) *lpErrno =
Status;
1054 if (lpErrno) *lpErrno =
Status;
1076 ULONG PollBufferSize;
1089 if (readfds !=
NULL)
1091 for (
i = 0;
i < readfds->fd_count;
i++)
1093 FD_SET(readfds->fd_array[
i], &selectfds);
1096 if (writefds !=
NULL)
1098 for (
i = 0;
i < writefds->fd_count;
i++)
1100 FD_SET(writefds->fd_array[
i], &selectfds);
1103 if (exceptfds !=
NULL)
1105 for (
i = 0;
i < exceptfds->fd_count;
i++)
1107 FD_SET(exceptfds->fd_array[
i], &selectfds);
1113 if ( HandleCount == 0 )
1115 WARN(
"No handles! Returning SOCKET_ERROR\n", HandleCount);
1120 PollBufferSize =
sizeof(*PollInfo) + ((HandleCount - 1) *
sizeof(
AFD_HANDLE));
1122 TRACE(
"HandleCount: %u BufferSize: %u\n", HandleCount, PollBufferSize);
1128 Timeout.u.HighPart = 0x7FFFFFFF;
1129 TRACE(
"Infinite timeout\n");
1144 TRACE(
"Timeout: Orig %d.%06d kernel %d\n",
1160 ERR(
"NtCreateEvent failed, 0x%08x\n",
Status);
1187 if (readfds !=
NULL) {
1188 for (
i = 0;
i < readfds->fd_count;
i++)
1190 for (
j = 0;
j < HandleCount;
j++)
1195 if (
j >= HandleCount)
1197 ERR(
"Error while counting readfds %ld > %ld\n",
j, HandleCount);
1206 ERR(
"Invalid socket handle provided in readfds %d\n", readfds->fd_array[
i]);
1221 if (writefds !=
NULL)
1223 for (
i = 0;
i < writefds->fd_count;
i++)
1225 for (
j = 0;
j < HandleCount;
j++)
1230 if (
j >= HandleCount)
1232 ERR(
"Error while counting writefds %ld > %ld\n",
j, HandleCount);
1241 ERR(
"Invalid socket handle provided in writefds %d\n", writefds->fd_array[
i]);
1253 if (exceptfds !=
NULL)
1255 for (
i = 0;
i < exceptfds->fd_count;
i++)
1257 for (
j = 0;
j < HandleCount;
j++)
1262 if (
j > HandleCount)
1264 ERR(
"Error while counting exceptfds %ld > %ld\n",
j, HandleCount);
1273 TRACE(
"Invalid socket handle provided in exceptfds %d\n", exceptfds->fd_array[
i]);
1323 for (
i = 0;
i < HandleCount;
i++)
1327 for(
x = 1;
x;
x<<=1)
1332 TRACE(
"Invalid socket handle found %d\n",
Handle);
1345 TRACE(
"Event %x on handle %x\n",
1356 TRACE(
"Event %x on handle %x\n",
1363 TRACE(
"Event %x on handle %x\n",
1370 TRACE(
"Event %x on handle %x\n",
1379 TRACE(
"Event %x on handle %x\n",
1404 TRACE(
"*lpErrno = %x\n", *lpErrno);
1407 HandleCount = (readfds ? readfds->fd_count : 0) +
1408 (writefds && writefds != readfds ? writefds->fd_count : 0) +
1409 (exceptfds && exceptfds != readfds && exceptfds != writefds ? exceptfds->fd_count : 0);
1411 TRACE(
"%d events\n", HandleCount);
1419 SYSTEMTIME st1970 = { 1970, 1, 0, 1, 0, 0, 0, 0 };
1452 ULONG PendingDataLength = 0;
1453 PVOID CalleeDataBuffer;
1454 WSABUF CallerData, CalleeID, CallerID, CalleeData;
1460 UCHAR ReceiveBuffer[0x1A];
1475 if ((SocketAddress && !SocketAddressLength) ||
1476 (SocketAddressLength && !SocketAddress) ||
1477 (SocketAddressLength && *SocketAddressLength <
sizeof(
SOCKADDR)))
1526 0xA +
sizeof(*ListenReceiveData));
1541 if (lpfnCondition !=
NULL)
1557 sizeof(PendingAcceptData),
1559 sizeof(PendingAcceptData));
1577 if (PendingDataLength)
1597 sizeof(PendingAcceptData),
1638 CallerID.
len =
sizeof(*RemoteAddress);
1641 CallerData.
buf = PendingData;
1642 CallerData.
len = PendingDataLength;
1649 if (!CalleeDataBuffer) {
1652 CalleeData.
buf = CalleeDataBuffer;
1653 CalleeData.
len = 4096;
1663 CallBack = (lpfnCondition)(&CallerID,
1672 if (((CallBack ==
CF_ACCEPT) && GroupID) != 0)
1776 if (!AcceptSocketInfo)
1792 if( SocketAddressLength )
1793 *SocketAddressLength =
sizeof(*RemoteAddress);
1813 if (lpErrno) *lpErrno =
Status;
1827 const struct sockaddr * SocketAddress,
1828 int SocketAddressLength,
1840 ULONG ConnectDataLength;
1841 ULONG InConnectDataLength;
1842 INT BindAddressLength;
1845 int SocketDataLength;
1879 &BindAddressLength);
1886 if (lpCallerData !=
NULL)
1888 ConnectDataLength = lpCallerData->
len;
1928 SocketAddress->sa_data,
1943 if (lpCalleeData !=
NULL)
1945 InConnectDataLength = lpCalleeData->
len;
1952 &InConnectDataLength,
1953 sizeof(InConnectDataLength),
1969 ConnectInfo->
Root = 0;
1976 ERR(
"Async Connect UNIMPLEMENTED!\n");
2006 if (lpCalleeData !=
NULL)
2049 if (lpErrno) *lpErrno = Errno;
2063 if (lpErrno) *lpErrno = Errno;
2130 sizeof(DisconnectInfo),
2158 ULONG TdiAddressSize;
2173 if (!
Name || !NameLength)
2193 if ( TdiAddress ==
NULL )
2200 SocketAddress = &TdiAddress->
Address;
2232 TRACE(
"NameLength %d Address: %x Port %x\n",
2260 ULONG TdiAddressSize;
2280 if (!
Name || !NameLength)
2299 if ( SocketAddress ==
NULL )
2336 TRACE(
"NameLength %d Address: %x Port %x\n",
2417 NeedsCompletion =
FALSE;
2425 cbRet =
sizeof(
ULONG);
2429 if (cbOutBuffer <
sizeof(
ULONG))
2434 NeedsCompletion =
FALSE;
2438 cbRet =
sizeof(
ULONG);
2445 cbRet =
sizeof(
BOOL);
2449 if (cbOutBuffer <
sizeof(
BOOL))
2465 cbRet =
sizeof(
BOOL);
2470 if (cbOutBuffer == 0)
2472 cbRet =
sizeof(
PVOID);
2477 if (cbInBuffer <
sizeof(
GUID) ||
2478 cbOutBuffer <
sizeof(
PVOID))
2486 GUID ConnectExGUID = WSAID_CONNECTEX;
2487 GUID DisconnectExGUID = WSAID_DISCONNECTEX;
2493 cbRet =
sizeof(
PVOID);
2497 else if (
IsEqualGUID(&ConnectExGUID, lpvInBuffer))
2500 cbRet =
sizeof(
PVOID);
2504 else if (
IsEqualGUID(&DisconnectExGUID, lpvInBuffer))
2507 cbRet =
sizeof(
PVOID);
2511 else if (
IsEqualGUID(&GetAcceptExSockaddrsGUID, lpvInBuffer))
2514 cbRet =
sizeof(
PVOID);
2520 ERR(
"Querying unknown extension function: %x\n", ((
GUID*)lpvInBuffer)->Data1);
2533 if (cbOutBuffer <
sizeof(
INT))
2567 lpCompletionRoutine,
2578 if (lpCompletionRoutine !=
NULL)
2592 if (lpcbBytesReturned)
2593 *lpcbBytesReturned = cbRet;
2623 if (!OptionLength || !OptionValue)
2741 DbgPrint(
"MSAFD: Get unknown optname %x\n", OptionName);
2769 (
LPINT)OptionLength);
2770 if (lpErrno) *lpErrno = Errno;
2807 if (optlen <
sizeof(
BOOL))
2816 if (optlen <
sizeof(
BOOL))
2825 if (optlen <
sizeof(
BOOL))
2834 if (optlen <
sizeof(
BOOL))
2843 if (optlen <
sizeof(
BOOL))
2852 if (optlen <
sizeof(
struct linger))
2863 if (optlen <
sizeof(
ULONG))
2887 if (optlen <
sizeof(
ULONG))
2894 if (*(
PULONG)optval > 0x2000)
2895 *(
PULONG)optval = 0x2000;
2915 if (optlen <
sizeof(
INT))
2927 if (optlen <
sizeof(
DWORD))
2939 if (optlen <
sizeof(
DWORD))
2957 ERR(
"MSAFD: Set unknown optname %x\n", optname);
2971 if (lpErrno) *lpErrno = Errno;
2998 if (((
LOBYTE(wVersionRequested) == 2) && (
HIBYTE(wVersionRequested) < 2)) ||
2999 (
LOBYTE(wVersionRequested) < 2))
3001 ERR(
"WSPStartup NOT SUPPORTED for version 0x%X\n", wVersionRequested);
3014 lpProcTable->lpWSPBind =
WSPBind;
3027 lpProcTable->lpWSPIoctl =
WSPIoctl;
3030 lpProcTable->lpWSPRecv =
WSPRecv;
3034 lpProcTable->lpWSPSend =
WSPSend;
3041 lpWSPData->wVersion =
MAKEWORD(2, 2);
3042 lpWSPData->wHighVersion =
MAKEWORD(2, 2);
3065 if (!lpsaAddress || !lpszAddressString || !lpdwAddressStringLength)
3071 switch (lpsaAddress->sa_family)
3081 (
unsigned int)(
ntohl(((
SOCKADDR_IN *)lpsaAddress)->sin_addr.s_addr) >> 24 & 0xff),
3082 (
unsigned int)(
ntohl(((
SOCKADDR_IN *)lpsaAddress)->sin_addr.s_addr) >> 16 & 0xff),
3083 (
unsigned int)(
ntohl(((
SOCKADDR_IN *)lpsaAddress)->sin_addr.s_addr) >> 8 & 0xff),
3084 (
unsigned int)(
ntohl(((
SOCKADDR_IN *)lpsaAddress)->sin_addr.s_addr) & 0xff),
3100 if (*lpdwAddressStringLength <
size)
3102 *lpdwAddressStringLength =
size;
3107 *lpdwAddressStringLength =
size;
3123 LONG inetaddr = 0, ip_part;
3127 if (!lpAddressLength || !lpAddress || !AddressString)
3136 if (lpProtocolInfo !=
NULL)
3138 sockaddr->sin_family = lpProtocolInfo->iAddressFamily;
3157 bp = &AddressString;
3160 while (*bp < &AddressString[
wcslen(AddressString)])
3162 ip_part =
wcstol(*bp, bp, 10);
3164 if (ip_part < 0 || ip_part > 255)
3169 inetaddr = (inetaddr << 8) + ip_part;
3171 if ((*bp)[0] == 0 || (*bp)[0] ==
L':')
3174 if ((*bp)[0] !=
L'.')
3193 if ((*bp)[0] ==
L':')
3198 if ((*bp)[0] <
L'0' || (*bp)[0] >
L'9')
3213 *lpAddressLength =
sizeof(*sockaddr);
3216 sockaddr->sin_addr.s_addr = inetaddr;
3221 if (lpErrno && !*lpErrno)
3241 TRACE(
"Leaving.\n");
3262 ULONG AfdInformationClass,
3291 if (Overlapped ==
NULL)
3304 TRACE(
"Opened without flag WSA_FLAG_OVERLAPPED. Do nothing.\n");
3313 Event = Overlapped->hEvent;
3322 ERR(
"Not enough memory for APC Context\n");
3361 TRACE(
"Leaving (Pending)\n");
3373 if (LargeInteger !=
NULL)
3377 if (Boolean !=
NULL)
3389 ULONG AfdInformationClass,
3422 if (LargeInteger !=
NULL)
3426 if (Boolean !=
NULL)
3432 if (Overlapped ==
NULL)
3445 TRACE(
"Opened without flag WSA_FLAG_OVERLAPPED. Do nothing.\n");
3454 Event = Overlapped->hEvent;
3463 ERR(
"Not enough memory for APC Context\n");
3502 TRACE(
"Leaving (Pending)\n");
3518 while (CurrentSocket)
3523 return CurrentSocket;
3568 sizeof(ContextData),
3587 DWORD AsyncThreadId;
3608 ERR(
"Failed to create completion port: 0x%08x\n",
Status);
3615 ObjectHandleFlagInformation,
3617 sizeof(HandleFlags));
3659 (
PVOID*)&AsyncCompletionRoutine,
3666 (*AsyncCompletionRoutine)(AsyncContext, &IOSB);
3723 sizeof(CompletionInfo),
3731 ObjectHandleFlagInformation,
3733 sizeof(HandleFlags));
3764 for (
x = 1;
x;
x<<=1)
3873 ULONG lNetworkEvents;
3898 if (lNetworkEvents &
FD_OOB)
3919 if (lNetworkEvents &
FD_QOS)
3972 FreeContext =
FALSE;
3993 if (!(Socket->SharedData->AsyncDisabledEvents &
Event))
3999 Socket->SharedData->AsyncDisabledEvents &= ~
Event;
4002 if ((Socket->SharedData->AsyncEvents & (~Socket->SharedData->AsyncDisabledEvents)) == 0 )
4009 if (!AsyncData)
return;
4015 Socket->SharedData->SequenceNumber++;
4043 TRACE(
"Loading MSAFD.DLL \n");
4058 TRACE(
"MSAFD.DLL has been loaded\n");
4076 TRACE(
"DllMain of msafd.dll (leaving)\n");
#define SIO_ADDRESS_LIST_QUERY
PWSH_GET_WILDCARD_SOCKADDR WSHGetWildcardSockaddr
SOCKET fd_array[FD_SETSIZE]
INT WSPAPI WSPCloseSocket(IN SOCKET Handle, OUT LPINT lpErrno)
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
INT WSPAPI WSPRecvDisconnect(IN SOCKET s, OUT LPWSABUF lpInboundDisconnectData, OUT LPINT lpErrno)
#define STATUS_INVALID_CONNECTION
NTSYSAPI LONGLONG WINAPI RtlConvertLongToLargeInteger(LONG)
#define STATUS_PROTOCOL_NOT_SUPPORTED
int(CALLBACK * LPCONDITIONPROC)(IN LPWSABUF lpCallerId, IN LPWSABUF lpCallerData, IN OUT LPQOS lpSQOS, IN OUT LPQOS lpGQOS, IN LPWSABUF lpCalleeId, IN LPWSABUF lpCalleeData, OUT GROUP FAR *g, IN DWORD_PTR dwCallbackData)
_In_opt_ HANDLE _In_opt_ PIO_APC_ROUTINE _In_opt_ PVOID ApcContext
#define XP1_MESSAGE_ORIENTED
VOID WINAPI GetSystemTimeAsFileTime(OUT PFILETIME lpFileTime)
TRANSPORT_ADDRESS Address
#define _Must_inspect_result_
VOID SockProcessAsyncSelect(PSOCKET_INFORMATION Socket, PASYNC_DATA AsyncData)
IN PCO_ADDRESS_FAMILY AddressFamily
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
VOID(* PIO_APC_ROUTINE)(IN PVOID ApcContext, IN PIO_STATUS_BLOCK IoStatusBlock, IN ULONG Reserved)
BOOL WSPAPI WSPAcceptEx(IN SOCKET sListenSocket, IN SOCKET sAcceptSocket, OUT PVOID lpOutputBuffer, IN DWORD dwReceiveDataLength, IN DWORD dwLocalAddressLength, IN DWORD dwRemoteAddressLength, OUT LPDWORD lpdwBytesReceived, IN OUT LPOVERLAPPED lpOverlapped)
#define STATUS_INSUFFICIENT_RESOURCES
#define IO_COMPLETION_ALL_ACCESS
NTSTATUS NTAPI NtSetInformationFile(HANDLE hFile, PIO_STATUS_BLOCK io, PVOID ptr, ULONG len, FILE_INFORMATION_CLASS FileInformationClass)
BOOLEAN ExclusiveAddressUse
#define AFD_EVENT_CONNECT_FAIL
#define OBJ_CASE_INSENSITIVE
INT WSPAPI WSPEnumNetworkEvents(IN SOCKET Handle, IN WSAEVENT hEventObject, OUT LPWSANETWORKEVENTS lpNetworkEvents, OUT LPINT lpErrno)
BOOLEAN SockGetAsyncSelectHelperAfdHandle(VOID)
IN BOOLEAN OUT PSTR Buffer
VOID SockReenableAsyncSelectEvent(IN PSOCKET_INFORMATION Socket, IN ULONG Event)
struct _AFD_HANDLE_ AFD_HANDLE
#define WSA_OPERATION_ABORTED
#define STATUS_INVALID_PARAMETER
#define DLL_THREAD_ATTACH
BOOL WSPAPI WSPGetOverlappedResult(IN SOCKET Handle, IN LPWSAOVERLAPPED lpOverlapped, OUT LPDWORD lpdwBytes, IN BOOL fWait, OUT LPDWORD lpdwFlags, OUT LPINT lpErrno)
#define AFD_ENDPOINT_C_ROOT
#define AFD_EVENT_DISCONNECT
BOOLEAN UseDelayedAcceptance
PSOCKET_INFORMATION GetSocketStructure(SOCKET Handle)
HANDLE SockAsyncCompletionPort
struct _AFD_RECEIVED_ACCEPT_DATA * PAFD_RECEIVED_ACCEPT_DATA
_In_ USHORT _In_ ULONG Protocol
#define SO_PROTOCOL_INFOW
#define CreateFileMapping
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
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
#define SIO_GET_EXTENSION_FUNCTION_POINTER
INT WSPAPI WSPAsyncSelect(IN SOCKET Handle, IN HWND hWnd, IN UINT wMsg, IN LONG lEvent, OUT LPINT lpErrno)
#define INVALID_HANDLE_VALUE
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
DWORD WINAPI GetLastError(VOID)
_In_ BOOL _In_ HANDLE hProcess
GLint GLint GLint GLint GLint x
#define XP1_QOS_SUPPORTED
#define IOCTL_AFD_START_LISTEN
BOOLEAN UseDelayedAcceptance
#define WSH_NOTIFY_ACCEPT
#define IOCTL_AFD_GET_PENDING_CONNECT_DATA
#define WSA_FLAG_MULTIPOINT_D_ROOT
BOOL WSPAPI WSPGetQOSByName(IN SOCKET s, IN OUT LPWSABUF lpQOSName, OUT LPQOS lpQOS, OUT LPINT lpErrno)
#define DLL_PROCESS_ATTACH
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
#define SO_CONDITIONAL_ACCEPT
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)
_Check_return_ long __cdecl wcstol(_In_z_ const wchar_t *_Str, _Out_opt_ _Deref_post_z_ wchar_t **_EndPtr, _In_ int _Radix)
#define WSAID_GETACCEPTEXSOCKADDRS
BOOL WINAPI DllMain(HINSTANCE hDLLInst, DWORD fdwReason, LPVOID lpvReserved)
void WINAPI EnterCriticalSection(LPCRITICAL_SECTION)
#define IOCTL_AFD_WAIT_FOR_LISTEN
DWORD GetCurrentTimeInSeconds(VOID)
BOOLEAN SockCreateOrReferenceAsyncThread(VOID)
int GetSocketInformation(PSOCKET_INFORMATION Socket, ULONG AfdInformationClass, PBOOLEAN Boolean OPTIONAL, PULONG Ulong OPTIONAL, PLARGE_INTEGER LargeInteger OPTIONAL, LPWSAOVERLAPPED Overlapped OPTIONAL, LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine OPTIONAL)
struct GroupData GroupData
#define DLL_THREAD_DETACH
#define STATUS_HOST_UNREACHABLE
LPWPUMODIFYIFSHANDLE lpWPUModifyIFSHandle
#define STATUS_ADDRESS_ALREADY_EXISTS
#define WSAVERNOTSUPPORTED
#define STATUS_BUFFER_TOO_SMALL
INT WSPAPI WSPCancelBlockingCall(OUT LPINT lpErrno)
INT WSPAPI WSPCleanup(OUT LPINT lpErrno)
#define STATUS_END_OF_FILE
#define SO_EXCLUSIVEADDRUSE
int WSPAPI WSPRecv(SOCKET Handle, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRead, LPDWORD ReceiveFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, LPWSATHREADID lpThreadId, LPINT lpErrno)
#define IOCTL_AFD_DISCONNECT
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
#define WSAMAKESELECTREPLY(e, error)
#define AFD_ENDPOINT_CONNECTIONLESS
INT WSPAPI WSPDuplicateSocket(IN SOCKET Handle, IN DWORD dwProcessId, OUT LPWSAPROTOCOL_INFOW lpProtocolInfo, OUT LPINT lpErrno)
return STATUS_NOT_IMPLEMENTED
#define AFD_SHARE_WILDCARD
#define THREAD_PRIORITY_ABOVE_NORMAL
VOID SockProcessQueuedAsyncSelect(PVOID Context, PIO_STATUS_BLOCK IoStatusBlock)
#define _Out_writes_bytes_to_opt_(s, c)
#define DUPLICATE_SAME_ACCESS
#define WSA_FLAG_MULTIPOINT_C_LEAF
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
LARGE_INTEGER LargeInteger
#define STATUS_REMOTE_DISCONNECT
HANDLE WINAPI GetCurrentThread(VOID)
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)
enum _SOCKET_STATE SOCKET_STATE
_Must_inspect_result_ int WSPAPI WSPStartup(_In_ WORD wVersionRequested, _In_ LPWSPDATA lpWSPData, _In_ LPWSAPROTOCOL_INFOW lpProtocolInfo, _In_ WSPUPCALLTABLE UpcallTable, _Out_ LPWSPPROC_TABLE lpProcTable)
#define PROCESS_DUP_HANDLE
NTSTATUS NTAPI NtSetInformationObject(IN HANDLE ObjectHandle, IN OBJECT_INFORMATION_CLASS ObjectInformationClass, IN PVOID ObjectInformation, IN ULONG Length)
#define IOCTL_AFD_SET_CONNECT_DATA_SIZE
SOCKADDR_ENDPOINT_INFO EndpointInfo
TRANSPORT_ADDRESS RemoteAddress
#define WSH_NOTIFY_CONNECT_ERROR
SOCKET WSPAPI WSPJoinLeaf(IN SOCKET s, IN CONST SOCKADDR *name, IN INT namelen, IN LPWSABUF lpCallerData, OUT LPWSABUF lpCalleeData, IN LPQOS lpSQOS, IN LPQOS lpGQOS, IN DWORD dwFlags, OUT LPINT lpErrno)
#define XP1_MULTIPOINT_DATA_PLANE
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
VOID WINAPI InitializeCriticalSection(OUT LPCRITICAL_SECTION lpCriticalSection)
#define XP1_MULTIPOINT_CONTROL_PLANE
#define AFD_EVENT_RECEIVE
#define FILE_MAP_ALL_ACCESS
PWSH_GET_SOCKADDR_TYPE WSHGetSockaddrType
DWORD SizeOfTransportName
#define IOCTL_AFD_SET_CONNECT_DATA
_Reserved_ PVOID Reserved
#define AFD_ENDPOINT_D_ROOT
#define AFD_EVENT_CONNECT
LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest
AFD_POLL_INFO AsyncSelectInfo
BOOLEAN UseDelayedAcceptance
#define AFD_INFO_BLOCKING_MODE
BOOL WINAPI SetThreadPriority(IN HANDLE hThread, IN int nPriority)
#define AFD_DISCONNECT_SEND
#define DLL_PROCESS_DETACH
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define AFD_INFO_SEND_WINDOW_SIZE
#define AFD_INFO_RECEIVE_CONTENT_SIZE
int WSPAPI WSPListen(SOCKET Handle, int Backlog, LPINT lpErrno)
#define IOCTL_AFD_CONNECT
#define IOCTL_AFD_SET_INFO
#define IOCTL_AFD_DEFER_ACCEPT
#define IS_INTRESOURCE(i)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
NTSTATUS NTAPI NtCreateFile(OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PLARGE_INTEGER AllocationSize OPTIONAL, IN ULONG FileAttributes, IN ULONG ShareAccess, IN ULONG CreateDisposition, IN ULONG CreateOptions, IN PVOID EaBuffer OPTIONAL, IN ULONG EaLength)
struct _TRANSPORT_ADDRESS TRANSPORT_ADDRESS
_CONST_RETURN wchar_t *__cdecl wcschr(_In_z_ const wchar_t *_Str, wchar_t _Ch)
INT WSPAPI WSPGetSockName(IN SOCKET Handle, OUT LPSOCKADDR Name, IN OUT LPINT NameLength, OUT LPINT lpErrno)
#define WSA_FLAG_MULTIPOINT_D_LEAF
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)
#define NT_SUCCESS(StatCode)
#define IOCTL_AFD_GET_PEER_NAME
#define UlongToHandle(ul)
int SockGetTdiName(PINT AddressFamily, PINT SocketType, PINT Protocol, GROUP Group, DWORD Flags, PUNICODE_STRING TransportName, PVOID *HelperDllContext, PHELPER_DATA *HelperDllData, PDWORD Events)
#define IOCTL_AFD_GET_SOCK_NAME
SOCKET WSPAPI WSPSocket(int AddressFamily, int SocketType, int Protocol, LPWSAPROTOCOL_INFOW lpProtocolInfo, GROUP g, DWORD dwFlags, LPINT lpErrno)
#define AFD_ENDPOINT_MULTIPOINT
LPWSAOVERLAPPED lpOverlapped
FORCEINLINE DWORD MsafdReturnWithErrno(NTSTATUS Status, LPINT Errno, DWORD Received, LPDWORD ReturnedBytes)
#define STATUS_ACCESS_DENIED
struct _IO_STATUS_BLOCK * PIO_STATUS_BLOCK
int WSPAPI WSPShutdown(SOCKET Handle, int HowTo, LPINT lpErrno)
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)
#define XP1_PSEUDO_STREAM
LIST_ENTRY SockHelpersListHead
int WSPAPI WSPSend(SOCKET Handle, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD iFlags, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine, LPWSATHREADID lpThreadId, LPINT lpErrno)