[MSAFD]
authorCameron Gutman <aicommander@gmail.com>
Mon, 31 May 2010 18:17:05 +0000 (18:17 +0000)
committerCameron Gutman <aicommander@gmail.com>
Mon, 31 May 2010 18:17:05 +0000 (18:17 +0000)
- Msafd is really just a stub that points to mswsock

svn path=/branches/aicom-network-branch/; revision=47501

dll/win32/msafd/include/debug.h [deleted file]
dll/win32/msafd/include/helpers.h [deleted file]
dll/win32/msafd/misc/dllmain.c [deleted file]
dll/win32/msafd/misc/event.c [deleted file]
dll/win32/msafd/misc/helpers.c [deleted file]
dll/win32/msafd/misc/sndrcv.c [deleted file]
dll/win32/msafd/misc/stubs.c [deleted file]
dll/win32/msafd/msafd.h [deleted file]
dll/win32/msafd/msafd.rbuild
dll/win32/msafd/msafd.spec

diff --git a/dll/win32/msafd/include/debug.h b/dll/win32/msafd/include/debug.h
deleted file mode 100644 (file)
index 2be8a15..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * COPYRIGHT:   See COPYING in the top level directory
- * PROJECT:     ReactOS Ancillary Function Driver DLL
- * FILE:        include/debug.h
- * PURPOSE:     Debugging support macros
- * DEFINES:     DBG     - Enable debug output
- *              NASSERT - Disable assertions
- */
-#ifndef __DEBUG_H
-#define __DEBUG_H
-
-#define NORMAL_MASK    0x000000FF
-#define SPECIAL_MASK   0xFFFFFF00
-#define MIN_TRACE      0x00000001
-#define MID_TRACE      0x00000002
-#define MAX_TRACE      0x00000003
-
-#define DEBUG_CHECK    0x00000100
-#define DEBUG_ULTRA    0xFFFFFFFF
-
-#ifdef ASSERT
-#undef ASSERT
-#endif
-
-#if DBG
-
-extern DWORD DebugTraceLevel;
-
-#define AFD_DbgPrint(_t_, _x_) \
-    if (((DebugTraceLevel & NORMAL_MASK) >= _t_) || \
-        ((DebugTraceLevel & _t_) > NORMAL_MASK)) { \
-        DbgPrint("(%hS:%d)(%hS) ", __FILE__, __LINE__, __FUNCTION__); \
-               DbgPrint _x_; \
-    }
-
-#ifdef NASSERT
-#define ASSERT(x)
-#else /* NASSERT */
-#define ASSERT(x) if (!(x)) { AFD_DbgPrint(MIN_TRACE, ("Assertion "#x" failed at %s:%d\n", __FILE__, __LINE__)); ExitProcess(0); }
-#endif /* NASSERT */
-
-#else /* DBG */
-
-#define AFD_DbgPrint(_t_, _x_)
-
-#define ASSERT_IRQL(x)
-#define ASSERT(x)
-
-#endif /* DBG */
-
-#ifdef assert
-#undef assert
-#endif
-#define assert(x) ASSERT(x)
-
-
-#define UNIMPLEMENTED \
-    AFD_DbgPrint(MIN_TRACE, ("is unimplemented, please try again later.\n"));
-
-#define CHECKPOINT \
-    AFD_DbgPrint(DEBUG_CHECK, ("\n"));
-
-#define CP CHECKPOINT
-
-#endif /* __DEBUG_H */
-
-/* EOF */
diff --git a/dll/win32/msafd/include/helpers.h b/dll/win32/msafd/include/helpers.h
deleted file mode 100644 (file)
index 7fa8e0c..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * COPYRIGHT:   See COPYING in the top level directory
- * PROJECT:     ReactOS Ancillary Function Driver DLL
- * FILE:        include/helpers.h
- * PURPOSE:     Definitions for helper DLL management
- */
-#ifndef __HELPERS_H
-#define __HELPERS_H
-
-//#include <msafd.h>
-
-typedef struct _HELPER_DATA {
-    LIST_ENTRY                                         Helpers;
-       LONG                                                    RefCount;
-    HANDLE                                                     hInstance;
-    INT                                                                MinWSAddressLength;
-    INT                                                                MaxWSAddressLength;
-    INT                                                                MinTDIAddressLength;
-    INT                                                                MaxTDIAddressLength;
-    BOOLEAN                                                    UseDelayedAcceptance;
-    PWINSOCK_MAPPING                           Mapping;
-       PWSH_OPEN_SOCKET                                WSHOpenSocket;
-       PWSH_OPEN_SOCKET2                               WSHOpenSocket2;
-       PWSH_JOIN_LEAF                                  WSHJoinLeaf;
-       PWSH_NOTIFY                                             WSHNotify;
-       PWSH_GET_SOCKET_INFORMATION             WSHGetSocketInformation;
-       PWSH_SET_SOCKET_INFORMATION             WSHSetSocketInformation;
-       PWSH_GET_SOCKADDR_TYPE                  WSHGetSockaddrType;
-       PWSH_GET_WILDCARD_SOCKADDR              WSHGetWildcardSockaddr;
-       PWSH_GET_BROADCAST_SOCKADDR             WSHGetBroadcastSockaddr;
-       PWSH_ADDRESS_TO_STRING                  WSHAddressToString;
-       PWSH_STRING_TO_ADDRESS                  WSHStringToAddress;
-       PWSH_IOCTL                                              WSHIoctl;
-    WCHAR                                                      TransportName[1];
-} HELPER_DATA, *PHELPER_DATA;
-
-int SockLoadHelperDll(
-       PWSTR TransportName, 
-       PWINSOCK_MAPPING Mapping, 
-       PHELPER_DATA *HelperDllData
-);
-
-int SockLoadTransportMapping(
-       PWSTR TransportName, 
-       PWINSOCK_MAPPING *Mapping
-);
-
-int SockLoadTransportList(
-       PWSTR *TransportList
-);
-
-BOOL SockIsTripleInMapping(
-       PWINSOCK_MAPPING Mapping, 
-       INT AddressFamily, 
-       INT SocketType, 
-       INT Protocol
-);
-
-int SockGetTdiName(
-       PINT AddressFamily, 
-       PINT SocketType, 
-       PINT Protocol, 
-       GROUP Group, 
-       DWORD Flags, 
-       PUNICODE_STRING TransportName, 
-       PVOID *HelperDllContext, 
-       PHELPER_DATA *HelperDllData, 
-       PDWORD Events
-);
-
-#endif /* __HELPERS_H */
-
-/* EOF */
diff --git a/dll/win32/msafd/misc/dllmain.c b/dll/win32/msafd/misc/dllmain.c
deleted file mode 100644 (file)
index e43ab50..0000000
+++ /dev/null
@@ -1,2758 +0,0 @@
-/*
- * COPYRIGHT:   See COPYING in the top level directory
- * PROJECT:     ReactOS Ancillary Function Driver DLL
- * FILE:        misc/dllmain.c
- * PURPOSE:     DLL entry point
- * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
- *              Alex Ionescu (alex@relsoft.net)
- * REVISIONS:
- *              CSH 01/09-2000 Created
- *              Alex 16/07/2004 - Complete Rewrite
- */
-
-#include <msafd.h>
-
-#include <debug.h>
-
-#if DBG
-//DWORD DebugTraceLevel = DEBUG_ULTRA;
-DWORD DebugTraceLevel = 0;
-#endif /* DBG */
-
-HANDLE GlobalHeap;
-WSPUPCALLTABLE Upcalls;
-LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest;
-ULONG SocketCount = 0;
-PSOCKET_INFORMATION *Sockets = NULL;
-LIST_ENTRY SockHelpersListHead = { NULL, NULL };
-ULONG SockAsyncThreadRefCount;
-HANDLE SockAsyncHelperAfdHandle;
-HANDLE SockAsyncCompletionPort;
-BOOLEAN SockAsyncSelectCalled;
-
-
-
-/*
- * FUNCTION: Creates a new socket
- * ARGUMENTS:
- *     af             = Address family
- *     type           = Socket type
- *     protocol       = Protocol type
- *     lpProtocolInfo = Pointer to protocol information
- *     g              = Reserved
- *     dwFlags        = Socket flags
- *     lpErrno        = Address of buffer for error information
- * RETURNS:
- *     Created socket, or INVALID_SOCKET if it could not be created
- */
-SOCKET 
-WSPAPI 
-WSPSocket(int AddressFamily,
-          int SocketType,
-          int Protocol,
-          LPWSAPROTOCOL_INFOW lpProtocolInfo,
-          GROUP g,
-          DWORD dwFlags,
-          LPINT lpErrno)
-{
-    OBJECT_ATTRIBUTES           Object;
-    IO_STATUS_BLOCK             IOSB;
-    USHORT                      SizeOfPacket;
-    ULONG                       SizeOfEA;
-    PAFD_CREATE_PACKET          AfdPacket;
-    HANDLE                      Sock;
-    PSOCKET_INFORMATION         Socket = NULL, PrevSocket = NULL;
-    PFILE_FULL_EA_INFORMATION   EABuffer = NULL;
-    PHELPER_DATA                HelperData;
-    PVOID                       HelperDLLContext;
-    DWORD                       HelperEvents;
-    UNICODE_STRING              TransportName;
-    UNICODE_STRING              DevName;
-    LARGE_INTEGER               GroupData;
-    INT                         Status;
-
-    AFD_DbgPrint(MAX_TRACE, ("Creating Socket, getting TDI Name\n"));
-    AFD_DbgPrint(MAX_TRACE, ("AddressFamily (%d)  SocketType (%d)  Protocol (%d).\n",
-                             AddressFamily, SocketType, Protocol));
-
-    /* Get Helper Data and Transport */
-    Status = SockGetTdiName (&AddressFamily,
-                             &SocketType,
-                             &Protocol,
-                             g,
-                             dwFlags,
-                             &TransportName,
-                             &HelperDLLContext,
-                             &HelperData,
-                             &HelperEvents);
-
-    /* Check for error */
-    if (Status != NO_ERROR)
-    {
-        AFD_DbgPrint(MID_TRACE,("SockGetTdiName: Status %x\n", Status));
-        goto error;
-    }
-
-    /* AFD Device Name */
-    RtlInitUnicodeString(&DevName, L"\\Device\\Afd\\Endpoint");
-
-    /* Set Socket Data */
-    Socket = HeapAlloc(GlobalHeap, 0, sizeof(*Socket));
-    if (!Socket)
-        return MsafdReturnWithErrno(STATUS_INSUFFICIENT_RESOURCES, lpErrno, 0, NULL);
-
-    RtlZeroMemory(Socket, sizeof(*Socket));
-    Socket->RefCount = 2;
-    Socket->Handle = -1;
-    Socket->SharedData.Listening = FALSE;
-    Socket->SharedData.State = SocketOpen;
-    Socket->SharedData.AddressFamily = AddressFamily;
-    Socket->SharedData.SocketType = SocketType;
-    Socket->SharedData.Protocol = Protocol;
-    Socket->HelperContext = HelperDLLContext;
-    Socket->HelperData = HelperData;
-    Socket->HelperEvents = HelperEvents;
-    Socket->LocalAddress = &Socket->WSLocalAddress;
-    Socket->SharedData.SizeOfLocalAddress = HelperData->MaxWSAddressLength;
-    Socket->RemoteAddress = &Socket->WSRemoteAddress;
-    Socket->SharedData.SizeOfRemoteAddress = HelperData->MaxWSAddressLength;
-    Socket->SharedData.UseDelayedAcceptance = HelperData->UseDelayedAcceptance;
-    Socket->SharedData.CreateFlags = dwFlags;
-    Socket->SharedData.CatalogEntryId = lpProtocolInfo->dwCatalogEntryId;
-    Socket->SharedData.ServiceFlags1 = lpProtocolInfo->dwServiceFlags1;
-    Socket->SharedData.ProviderFlags = lpProtocolInfo->dwProviderFlags;
-    Socket->SharedData.GroupID = g;
-    Socket->SharedData.GroupType = 0;
-    Socket->SharedData.UseSAN = FALSE;
-    Socket->SharedData.NonBlocking = FALSE; /* Sockets start blocking */
-    Socket->SanData = NULL;
-
-    /* Ask alex about this */
-    if( Socket->SharedData.SocketType == SOCK_DGRAM ||
-        Socket->SharedData.SocketType == SOCK_RAW )
-    {
-        AFD_DbgPrint(MID_TRACE,("Connectionless socket\n"));
-        Socket->SharedData.ServiceFlags1 |= XP1_CONNECTIONLESS;
-    }
-
-    /* Packet Size */
-    SizeOfPacket = TransportName.Length + sizeof(AFD_CREATE_PACKET) + sizeof(WCHAR);
-
-    /* EA Size */
-    SizeOfEA = SizeOfPacket + sizeof(FILE_FULL_EA_INFORMATION) + AFD_PACKET_COMMAND_LENGTH;
-
-    /* Set up EA Buffer */
-    EABuffer = HeapAlloc(GlobalHeap, 0, SizeOfEA);
-    if (!EABuffer)
-        return MsafdReturnWithErrno(STATUS_INSUFFICIENT_RESOURCES, lpErrno, 0, NULL);
-
-    RtlZeroMemory(EABuffer, SizeOfEA);
-    EABuffer->NextEntryOffset = 0;
-    EABuffer->Flags = 0;
-    EABuffer->EaNameLength = AFD_PACKET_COMMAND_LENGTH;
-    RtlCopyMemory (EABuffer->EaName, 
-                   AfdCommand, 
-                   AFD_PACKET_COMMAND_LENGTH + 1);
-    EABuffer->EaValueLength = SizeOfPacket;
-
-    /* Set up AFD Packet */
-    AfdPacket = (PAFD_CREATE_PACKET)(EABuffer->EaName + EABuffer->EaNameLength + 1);
-    AfdPacket->SizeOfTransportName = TransportName.Length;
-    RtlCopyMemory (AfdPacket->TransportName,
-                   TransportName.Buffer, 
-                   TransportName.Length + sizeof(WCHAR));
-    AfdPacket->GroupID = g;
-
-    /* Set up Endpoint Flags */
-    if ((Socket->SharedData.ServiceFlags1 & XP1_CONNECTIONLESS) != 0)
-    {
-        if ((SocketType != SOCK_DGRAM) && (SocketType != SOCK_RAW))
-        {
-            /* Only RAW or UDP can be Connectionless */
-            goto error;
-        }
-        AfdPacket->EndpointFlags |= AFD_ENDPOINT_CONNECTIONLESS;
-    }
-
-    if ((Socket->SharedData.ServiceFlags1 & XP1_MESSAGE_ORIENTED) != 0)
-    {
-        if (SocketType == SOCK_STREAM)
-        {
-            if ((Socket->SharedData.ServiceFlags1 & XP1_PSEUDO_STREAM) == 0)
-            {
-                /* The Provider doesn't actually support Message Oriented Streams */
-                goto error;
-            }
-        }
-        AfdPacket->EndpointFlags |= AFD_ENDPOINT_MESSAGE_ORIENTED;
-    }
-
-    if (SocketType == SOCK_RAW) AfdPacket->EndpointFlags |= AFD_ENDPOINT_RAW;
-
-    if (dwFlags & (WSA_FLAG_MULTIPOINT_C_ROOT |
-                   WSA_FLAG_MULTIPOINT_C_LEAF |
-                   WSA_FLAG_MULTIPOINT_D_ROOT |
-                   WSA_FLAG_MULTIPOINT_D_LEAF))
-    {
-        if ((Socket->SharedData.ServiceFlags1 & XP1_SUPPORT_MULTIPOINT) == 0)
-        {
-            /* The Provider doesn't actually support Multipoint */
-            goto error;
-        }
-        AfdPacket->EndpointFlags |= AFD_ENDPOINT_MULTIPOINT;
-
-        if (dwFlags & WSA_FLAG_MULTIPOINT_C_ROOT)
-        {
-            if (((Socket->SharedData.ServiceFlags1 & XP1_MULTIPOINT_CONTROL_PLANE) == 0)
-                || ((dwFlags & WSA_FLAG_MULTIPOINT_C_LEAF) != 0))
-            {
-                /* The Provider doesn't support Control Planes, or you already gave a leaf */
-                goto error;
-            }
-            AfdPacket->EndpointFlags |= AFD_ENDPOINT_C_ROOT;
-        }
-
-        if (dwFlags & WSA_FLAG_MULTIPOINT_D_ROOT)
-        {
-            if (((Socket->SharedData.ServiceFlags1 & XP1_MULTIPOINT_DATA_PLANE) == 0)
-                || ((dwFlags & WSA_FLAG_MULTIPOINT_D_LEAF) != 0))
-            {
-                /* The Provider doesn't support Data Planes, or you already gave a leaf */
-                goto error;
-            }
-            AfdPacket->EndpointFlags |= AFD_ENDPOINT_D_ROOT;
-        }
-    }
-
-    /* Set up Object Attributes */
-    InitializeObjectAttributes (&Object,
-                                &DevName,
-                                OBJ_CASE_INSENSITIVE | OBJ_INHERIT,
-                                0,
-                                0);
-
-    /* Create the Socket as asynchronous. That means we have to block
-    ourselves after every call to NtDeviceIoControlFile. This is
-    because the kernel doesn't support overlapping synchronous I/O
-    requests (made from multiple threads) at this time (Sep 2005) */
-    Status = NtCreateFile(&Sock,
-                          GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE,
-                          &Object,
-                          &IOSB,
-                          NULL,
-                          0,
-                          FILE_SHARE_READ | FILE_SHARE_WRITE,
-                          FILE_OPEN_IF,
-                          0,
-                          EABuffer,
-                          SizeOfEA);
-
-    HeapFree(GlobalHeap, 0, EABuffer);
-
-    if (Status != STATUS_SUCCESS)
-    {
-        AFD_DbgPrint(MIN_TRACE, ("Failed to open socket\n"));
-
-        HeapFree(GlobalHeap, 0, Socket);
-
-        return MsafdReturnWithErrno(Status, lpErrno, 0, NULL);
-    }
-
-    /* Save Handle */
-    Socket->Handle = (SOCKET)Sock;
-
-    /* XXX See if there's a structure we can reuse -- We need to do this
-    * more properly. */
-    PrevSocket = GetSocketStructure( (SOCKET)Sock );
-
-    if( PrevSocket )
-    {
-        RtlCopyMemory( PrevSocket, Socket, sizeof(*Socket) );
-        RtlFreeHeap( GlobalHeap, 0, Socket );
-        Socket = PrevSocket;
-    }
-
-    /* Save Group Info */
-    if (g != 0)
-    {
-        GetSocketInformation(Socket, AFD_INFO_GROUP_ID_TYPE, 0, &GroupData);
-        Socket->SharedData.GroupID = GroupData.u.LowPart;
-        Socket->SharedData.GroupType = GroupData.u.HighPart;
-    }
-
-    /* Get Window Sizes and Save them */
-    GetSocketInformation (Socket,
-                          AFD_INFO_SEND_WINDOW_SIZE,
-                          &Socket->SharedData.SizeOfSendBuffer,
-                          NULL);
-
-    GetSocketInformation (Socket,
-                          AFD_INFO_RECEIVE_WINDOW_SIZE,
-                          &Socket->SharedData.SizeOfRecvBuffer,
-                          NULL);
-
-    /* Save in Process Sockets List */
-    Sockets[SocketCount] = Socket;
-    SocketCount ++;
-
-    /* Create the Socket Context */
-    CreateContext(Socket);
-
-    /* Notify Winsock */
-    Upcalls.lpWPUModifyIFSHandle(1, (SOCKET)Sock, lpErrno);
-
-    /* Return Socket Handle */
-    AFD_DbgPrint(MID_TRACE,("Success %x\n", Sock));
-
-    return (SOCKET)Sock;
-
-error:
-    AFD_DbgPrint(MID_TRACE,("Ending %x\n", Status));
-
-    if( Socket )
-        HeapFree(GlobalHeap, 0, Socket);
-
-    if( lpErrno )
-        *lpErrno = Status;
-
-    return INVALID_SOCKET;
-}
-
-
-DWORD MsafdReturnWithErrno(NTSTATUS Status,
-                           LPINT Errno,
-                           DWORD Received,
-                           LPDWORD ReturnedBytes)
-{
-    if( ReturnedBytes )
-        *ReturnedBytes = 0;
-    if( Errno )
-    {
-        switch (Status)
-        {
-        case STATUS_CANT_WAIT: 
-            *Errno = WSAEWOULDBLOCK;
-            break;
-        case STATUS_TIMEOUT:
-            *Errno = WSAETIMEDOUT;
-            break;
-        case STATUS_SUCCESS: 
-            /* Return Number of bytes Read */
-            if( ReturnedBytes ) 
-                *ReturnedBytes = Received;
-            break;
-        case STATUS_FILE_CLOSED:
-        case STATUS_END_OF_FILE:
-            *Errno = WSAESHUTDOWN;
-            break;
-        case STATUS_PENDING: 
-            *Errno = WSA_IO_PENDING;
-            break;
-        case STATUS_BUFFER_TOO_SMALL:
-        case STATUS_BUFFER_OVERFLOW:
-            DbgPrint("MSAFD: STATUS_BUFFER_TOO_SMALL/STATUS_BUFFER_OVERFLOW\n");
-            *Errno = WSAEMSGSIZE;
-            break;
-        case STATUS_NO_MEMORY: /* Fall through to STATUS_INSUFFICIENT_RESOURCES */
-        case STATUS_INSUFFICIENT_RESOURCES:
-            DbgPrint("MSAFD: STATUS_NO_MEMORY/STATUS_INSUFFICIENT_RESOURCES\n");
-            *Errno = WSAENOBUFS;
-            break;
-        case STATUS_INVALID_CONNECTION:
-            DbgPrint("MSAFD: STATUS_INVALID_CONNECTION\n");
-            *Errno = WSAEAFNOSUPPORT;
-            break;
-        case STATUS_INVALID_ADDRESS:
-            DbgPrint("MSAFD: STATUS_INVALID_ADDRESS\n");
-            *Errno = WSAEADDRNOTAVAIL;
-            break;
-        case STATUS_REMOTE_NOT_LISTENING:
-            DbgPrint("MSAFD: STATUS_REMOTE_NOT_LISTENING\n");
-            *Errno = WSAECONNREFUSED;
-            break;
-        case STATUS_NETWORK_UNREACHABLE:
-            DbgPrint("MSAFD: STATUS_NETWORK_UNREACHABLE\n");
-            *Errno = WSAENETUNREACH;
-            break;
-        case STATUS_INVALID_PARAMETER:
-            DbgPrint("MSAFD: STATUS_INVALID_PARAMETER\n");
-            *Errno = WSAEINVAL;
-            break;
-        case STATUS_CANCELLED:
-            DbgPrint("MSAFD: STATUS_CANCELLED\n");
-            *Errno = WSA_OPERATION_ABORTED;
-            break;
-        default:
-            DbgPrint("MSAFD: Error %x is unknown\n", Status);
-            *Errno = WSAEINVAL;
-            break;
-        }
-    }
-
-    /* Success */
-    return Status == STATUS_SUCCESS ? 0 : SOCKET_ERROR;
-}
-
-/*
- * FUNCTION: Closes an open socket
- * ARGUMENTS:
- *     s       = Socket descriptor
- *     lpErrno = Address of buffer for error information
- * RETURNS:
- *     NO_ERROR, or SOCKET_ERROR if the socket could not be closed
- */
-INT
-WSPAPI
-WSPCloseSocket(IN SOCKET Handle,
-               OUT LPINT lpErrno)
-{
-    IO_STATUS_BLOCK IoStatusBlock;
-    PSOCKET_INFORMATION Socket = NULL;
-    NTSTATUS Status;
-    HANDLE SockEvent;
-    AFD_DISCONNECT_INFO DisconnectInfo;
-    SOCKET_STATE OldState;
-
-    /* Create the Wait Event */
-    Status = NtCreateEvent(&SockEvent,
-                           GENERIC_READ | GENERIC_WRITE,
-                           NULL,
-                           1,
-                           FALSE);
-
-    if(!NT_SUCCESS(Status))
-        return SOCKET_ERROR;
-
-    /* Get the Socket Structure associate to this Socket*/
-    Socket = GetSocketStructure(Handle);
-
-    if (Socket->HelperEvents & WSH_NOTIFY_CLOSE)
-    {
-        Status = Socket->HelperData->WSHNotify(Socket->HelperContext,
-                                               Socket->Handle,
-                                               Socket->TdiAddressHandle,
-                                               Socket->TdiConnectionHandle,
-                                               WSH_NOTIFY_CLOSE);
-
-        if (Status)
-        {
-            if (lpErrno) *lpErrno = Status;
-            NtClose(SockEvent);
-            return SOCKET_ERROR;
-        }
-    }
-
-    /* If a Close is already in Process, give up */
-    if (Socket->SharedData.State == SocketClosed)
-    {
-        NtClose(SockEvent);
-        *lpErrno = WSAENOTSOCK;
-        return SOCKET_ERROR;
-    }
-
-    /* Set the state to close */
-    OldState = Socket->SharedData.State;
-    Socket->SharedData.State = SocketClosed;
-
-    /* If SO_LINGER is ON and the Socket is connected, we need to disconnect */
-    /* FIXME: Should we do this on Datagram Sockets too? */
-    if ((OldState == SocketConnected) && (Socket->SharedData.LingerData.l_onoff))
-    {
-        ULONG LingerWait;
-        ULONG SendsInProgress;
-        ULONG SleepWait;
-
-        /* We need to respect the timeout */
-        SleepWait = 100;
-        LingerWait = Socket->SharedData.LingerData.l_linger * 1000;
-
-        /* Loop until no more sends are pending, within the timeout */
-        while (LingerWait)
-        {
-            /* Find out how many Sends are in Progress */
-            if (GetSocketInformation(Socket,
-                                     AFD_INFO_SENDS_IN_PROGRESS,
-                                     &SendsInProgress,
-                                     NULL))
-            {
-                /* Bail out if anything but NO_ERROR */
-                LingerWait = 0;
-                break;
-            }
-
-            /* Bail out if no more sends are pending */
-            if (!SendsInProgress)
-                break;
-            /* 
-             * We have to execute a sleep, so it's kind of like
-             * a block. If the socket is Nonblock, we cannot
-             * go on since asyncronous operation is expected
-             * and we cannot offer it
-             */
-            if (Socket->SharedData.NonBlocking)
-            {
-                NtClose(SockEvent);
-                Socket->SharedData.State = OldState;
-                *lpErrno = WSAEWOULDBLOCK;
-                return SOCKET_ERROR;
-            }
-
-            /* Now we can sleep, and decrement the linger wait */
-            /* 
-            * FIXME: It seems Windows does some funky acceleration
-            * since the waiting seems to be longer and longer. I
-            * don't think this improves performance so much, so we
-            * wait a fixed time instead.
-            */
-            Sleep(SleepWait);
-            LingerWait -= SleepWait;
-        }
-
-        /*
-        * We have reached the timeout or sends are over.
-        * Disconnect if the timeout has been reached. 
-        */
-        if (LingerWait <= 0)
-        {
-            DisconnectInfo.Timeout = RtlConvertLongToLargeInteger(0);
-            DisconnectInfo.DisconnectType = AFD_DISCONNECT_ABORT;
-
-            /* Send IOCTL */
-            Status = NtDeviceIoControlFile((HANDLE)Handle,
-                                           SockEvent,
-                                           NULL,
-                                           NULL,
-                                           &IoStatusBlock,
-                                           IOCTL_AFD_DISCONNECT,
-                                           &DisconnectInfo,
-                                           sizeof(DisconnectInfo),
-                                           NULL,
-                                           0);
-
-            /* Wait for return */
-            if (Status == STATUS_PENDING)
-            {
-                WaitForSingleObject(SockEvent, INFINITE);
-                Status = IoStatusBlock.Status;
-            }
-        }
-    }
-
-    /* Cleanup Time! */
-    Socket->HelperContext = NULL;
-    Socket->SharedData.AsyncDisabledEvents = -1;
-    NtClose(Socket->TdiAddressHandle);
-    Socket->TdiAddressHandle = NULL;
-    NtClose(Socket->TdiConnectionHandle);
-    Socket->TdiConnectionHandle = NULL;
-
-    /* Close the handle */
-    NtClose((HANDLE)Handle);
-    NtClose(SockEvent);
-
-    return NO_ERROR;
-}
-
-
-/*
- * FUNCTION: Associates a local address with a socket
- * ARGUMENTS:
- *     s       = Socket descriptor
- *     name    = Pointer to local address
- *     namelen = Length of name
- *     lpErrno = Address of buffer for error information
- * RETURNS:
- *     0, or SOCKET_ERROR if the socket could not be bound
- */
-INT
-WSPAPI
-WSPBind(SOCKET Handle,
-        const struct sockaddr *SocketAddress,
-        int SocketAddressLength,
-        LPINT lpErrno)
-{
-    IO_STATUS_BLOCK         IOSB;
-    PAFD_BIND_DATA          BindData;
-    PSOCKET_INFORMATION     Socket = NULL;
-    NTSTATUS                Status;
-    SOCKADDR_INFO           SocketInfo;
-    HANDLE                  SockEvent;
-
-    /* See below */
-    BindData = HeapAlloc(GlobalHeap, 0, 0xA + SocketAddressLength);
-    if (!BindData)
-    {
-        return MsafdReturnWithErrno(STATUS_INSUFFICIENT_RESOURCES, lpErrno, 0, NULL);
-    }
-
-    Status = NtCreateEvent(&SockEvent,
-                           GENERIC_READ | GENERIC_WRITE,
-                           NULL,
-                           1,
-                           FALSE);
-
-    if (!NT_SUCCESS(Status))
-    {
-        HeapFree(GlobalHeap, 0, BindData);
-        return SOCKET_ERROR;
-    }
-
-    /* Get the Socket Structure associate to this Socket*/
-    Socket = GetSocketStructure(Handle);
-
-    /* Set up Address in TDI Format */
-    BindData->Address.TAAddressCount = 1;
-    BindData->Address.Address[0].AddressLength = SocketAddressLength - sizeof(SocketAddress->sa_family);
-    BindData->Address.Address[0].AddressType = SocketAddress->sa_family;
-    RtlCopyMemory (BindData->Address.Address[0].Address,
-                   SocketAddress->sa_data,
-                   SocketAddressLength - sizeof(SocketAddress->sa_family));
-
-    /* Get Address Information */
-    Socket->HelperData->WSHGetSockaddrType ((PSOCKADDR)SocketAddress,
-                                            SocketAddressLength,
-                                            &SocketInfo);
-
-    /* Set the Share Type */
-    if (Socket->SharedData.ExclusiveAddressUse)
-    {
-        BindData->ShareType = AFD_SHARE_EXCLUSIVE;
-    }
-    else if (SocketInfo.EndpointInfo == SockaddrEndpointInfoWildcard)
-    {
-        BindData->ShareType = AFD_SHARE_WILDCARD;
-    }
-    else if (Socket->SharedData.ReuseAddresses)
-    {
-        BindData->ShareType = AFD_SHARE_REUSE;
-    }
-    else
-    {
-        BindData->ShareType = AFD_SHARE_UNIQUE;
-    }
-
-    /* Send IOCTL */
-    Status = NtDeviceIoControlFile((HANDLE)Socket->Handle,
-                                   SockEvent,
-                                   NULL,
-                                   NULL,
-                                   &IOSB,
-                                   IOCTL_AFD_BIND,
-                                   BindData,
-                                   0xA + Socket->SharedData.SizeOfLocalAddress, /* Can't figure out a way to calculate this in C*/
-                                   BindData,
-                                   0xA + Socket->SharedData.SizeOfLocalAddress); /* Can't figure out a way to calculate this C */
-
-    /* Wait for return */
-    if (Status == STATUS_PENDING)
-    {
-        WaitForSingleObject(SockEvent, INFINITE);
-        Status = IOSB.Status;
-    }
-
-    /* Set up Socket Data */
-    Socket->SharedData.State = SocketBound;
-    Socket->TdiAddressHandle = (HANDLE)IOSB.Information;
-
-    NtClose( SockEvent );
-    HeapFree(GlobalHeap, 0, BindData);
-    if (Status == STATUS_SUCCESS && (Socket->HelperEvents & WSH_NOTIFY_BIND))
-    {
-        Status = Socket->HelperData->WSHNotify(Socket->HelperContext,
-                                               Socket->Handle,
-                                               Socket->TdiAddressHandle,
-                                               Socket->TdiConnectionHandle,
-                                               WSH_NOTIFY_BIND);
-
-        if (Status)
-        {
-            if (lpErrno) *lpErrno = Status;
-            return SOCKET_ERROR;
-        }
-    }
-
-    return MsafdReturnWithErrno ( Status, lpErrno, 0, NULL );
-}
-
-int 
-WSPAPI
-WSPListen(SOCKET Handle,
-          int Backlog,
-          LPINT lpErrno)
-{
-    IO_STATUS_BLOCK         IOSB;
-    AFD_LISTEN_DATA         ListenData;
-    PSOCKET_INFORMATION     Socket = NULL;
-    HANDLE                  SockEvent;
-    NTSTATUS                Status;
-
-    /* Get the Socket Structure associate to this Socket*/
-    Socket = GetSocketStructure(Handle);
-
-    if (Socket->SharedData.Listening)
-        return 0;
-
-    Status = NtCreateEvent(&SockEvent,
-                           GENERIC_READ | GENERIC_WRITE,
-                           NULL,
-                           1,
-                           FALSE);
-
-    if( !NT_SUCCESS(Status) )
-        return -1;
-
-    /* Set Up Listen Structure */
-    ListenData.UseSAN = FALSE;
-    ListenData.UseDelayedAcceptance = Socket->SharedData.UseDelayedAcceptance;
-    ListenData.Backlog = Backlog;
-
-    /* Send IOCTL */
-    Status = NtDeviceIoControlFile((HANDLE)Socket->Handle,
-                                   SockEvent,
-                                   NULL,
-                                   NULL,
-                                   &IOSB,
-                                   IOCTL_AFD_START_LISTEN,
-                                   &ListenData,
-                                   sizeof(ListenData),
-                                   NULL,
-                                   0);
-
-    /* Wait for return */
-    if (Status == STATUS_PENDING)
-    {
-        WaitForSingleObject(SockEvent, INFINITE);
-        Status = IOSB.Status;
-    }         
-
-    /* Set to Listening */
-    Socket->SharedData.Listening = TRUE;
-
-    NtClose( SockEvent );
-
-    if (Status == STATUS_SUCCESS && (Socket->HelperEvents & WSH_NOTIFY_LISTEN))
-    {
-        Status = Socket->HelperData->WSHNotify(Socket->HelperContext,
-                                               Socket->Handle,
-                                               Socket->TdiAddressHandle,
-                                               Socket->TdiConnectionHandle,
-                                               WSH_NOTIFY_LISTEN);
-
-        if (Status)
-        {
-           if (lpErrno) *lpErrno = Status;
-           return SOCKET_ERROR;
-        }
-    }
-
-    return MsafdReturnWithErrno ( Status, lpErrno, 0, NULL );
-}
-
-
-int
-WSPAPI
-WSPSelect(int nfds,
-          fd_set *readfds,
-          fd_set *writefds,
-          fd_set *exceptfds,
-          const LPTIMEVAL timeout,
-          LPINT lpErrno)
-{
-    IO_STATUS_BLOCK     IOSB;
-    PAFD_POLL_INFO      PollInfo;
-    NTSTATUS            Status;
-    LONG                HandleCount, OutCount = 0;
-    ULONG               PollBufferSize;
-    PVOID               PollBuffer;
-    ULONG               i, j = 0, x;
-    HANDLE              SockEvent;
-    BOOL                HandleCounted;
-    LARGE_INTEGER       Timeout;
-
-    /* Find out how many sockets we have, and how large the buffer needs 
-     * to be */
-
-    HandleCount = ( readfds ? readfds->fd_count : 0 ) +
-                  ( writefds ? writefds->fd_count : 0 ) +
-                  ( exceptfds ? exceptfds->fd_count : 0 );
-
-    if ( HandleCount == 0 )
-    {
-        AFD_DbgPrint(MAX_TRACE,("HandleCount: %d. Return SOCKET_ERROR\n",
-                     HandleCount));
-        if (lpErrno) *lpErrno = WSAEINVAL;
-        return SOCKET_ERROR;
-    }
-
-    PollBufferSize = sizeof(*PollInfo) + ((HandleCount - 1) * sizeof(AFD_HANDLE));
-
-    AFD_DbgPrint(MID_TRACE,("HandleCount: %d BufferSize: %d\n", 
-                 HandleCount, PollBufferSize));
-
-    /* Convert Timeout to NT Format */
-    if (timeout == NULL)
-    {
-        Timeout.u.LowPart = -1;
-        Timeout.u.HighPart = 0x7FFFFFFF;
-        AFD_DbgPrint(MAX_TRACE,("Infinite timeout\n"));
-    }
-    else
-    {
-        Timeout = RtlEnlargedIntegerMultiply
-            ((timeout->tv_sec * 1000) + (timeout->tv_usec / 1000), -10000);
-        /* Negative timeouts are illegal.  Since the kernel represents an 
-         * incremental timeout as a negative number, we check for a positive
-         * result.
-         */
-        if (Timeout.QuadPart > 0)
-        {
-            if (lpErrno) *lpErrno = WSAEINVAL;
-                return SOCKET_ERROR;
-        }
-        AFD_DbgPrint(MAX_TRACE,("Timeout: Orig %d.%06d kernel %d\n",
-                     timeout->tv_sec, timeout->tv_usec,
-                     Timeout.u.LowPart));
-    }
-
-    Status = NtCreateEvent(&SockEvent,
-                           GENERIC_READ | GENERIC_WRITE,
-                           NULL,
-                           1,
-                           FALSE);
-
-    if( !NT_SUCCESS(Status) )
-        return SOCKET_ERROR;
-
-    /* Allocate */
-    PollBuffer = HeapAlloc(GlobalHeap, 0, PollBufferSize);
-
-    if (!PollBuffer)
-    {
-        if (lpErrno)
-            *lpErrno = WSAEFAULT;
-        NtClose(SockEvent);
-        return SOCKET_ERROR;
-    }
-
-    PollInfo = (PAFD_POLL_INFO)PollBuffer;
-
-    RtlZeroMemory( PollInfo, PollBufferSize );
-
-    /* Number of handles for AFD to Check */
-    PollInfo->Exclusive = FALSE;
-    PollInfo->Timeout = Timeout;
-
-    if (readfds != NULL) {
-        for (i = 0; i < readfds->fd_count; i++, j++)
-        {
-            PollInfo->Handles[j].Handle = readfds->fd_array[i];
-            PollInfo->Handles[j].Events = AFD_EVENT_RECEIVE |
-                                          AFD_EVENT_DISCONNECT |
-                                          AFD_EVENT_ABORT |
-                                          AFD_EVENT_CLOSE |
-                                          AFD_EVENT_ACCEPT;
-        }
-    }
-    if (writefds != NULL)
-    {
-        for (i = 0; i < writefds->fd_count; i++, j++)
-        {
-            PollInfo->Handles[j].Handle = writefds->fd_array[i];
-            PollInfo->Handles[j].Events = AFD_EVENT_SEND | AFD_EVENT_CONNECT;
-        }
-    }
-    if (exceptfds != NULL)
-    {
-        for (i = 0; i < exceptfds->fd_count; i++, j++)
-        {
-            PollInfo->Handles[j].Handle = exceptfds->fd_array[i];
-            PollInfo->Handles[j].Events = AFD_EVENT_OOB_RECEIVE | AFD_EVENT_CONNECT_FAIL;
-        }
-    }
-
-    PollInfo->HandleCount = j;
-    PollBufferSize = ((PCHAR)&PollInfo->Handles[j+1]) - ((PCHAR)PollInfo);
-
-    /* Send IOCTL */
-    Status = NtDeviceIoControlFile((HANDLE)PollInfo->Handles[0].Handle,
-                                   SockEvent,
-                                   NULL,
-                                   NULL,
-                                   &IOSB,
-                                   IOCTL_AFD_SELECT,
-                                   PollInfo,
-                                   PollBufferSize,
-                                   PollInfo,
-                                   PollBufferSize);
-
-    AFD_DbgPrint(MID_TRACE,("DeviceIoControlFile => %x\n", Status));
-
-    /* Wait for Completition */
-    if (Status == STATUS_PENDING)
-    {
-        WaitForSingleObject(SockEvent, INFINITE);
-    }
-
-    /* Clear the Structures */
-    if( readfds )
-        FD_ZERO(readfds);
-    if( writefds )
-        FD_ZERO(writefds);
-    if( exceptfds )
-        FD_ZERO(exceptfds);
-
-    /* Loop through return structure */
-    HandleCount = PollInfo->HandleCount;
-
-    /* Return in FDSET Format */
-    for (i = 0; i < HandleCount; i++)
-    {
-        HandleCounted = FALSE;
-        for(x = 1; x; x<<=1)
-        {
-            switch (PollInfo->Handles[i].Events & x)
-            {
-                case AFD_EVENT_RECEIVE:
-                case AFD_EVENT_DISCONNECT:
-                case AFD_EVENT_ABORT:
-                case AFD_EVENT_ACCEPT:
-                case AFD_EVENT_CLOSE:
-                    AFD_DbgPrint(MID_TRACE,("Event %x on handle %x\n",
-                                 PollInfo->Handles[i].Events,
-                                 PollInfo->Handles[i].Handle));
-                    if (! HandleCounted)
-                    {
-                        OutCount++;
-                        HandleCounted = TRUE;
-                    }
-                    if( readfds )
-                        FD_SET(PollInfo->Handles[i].Handle, readfds);
-                    break;
-                case AFD_EVENT_SEND:
-                case AFD_EVENT_CONNECT:
-                    AFD_DbgPrint(MID_TRACE,("Event %x on handle %x\n",
-                                 PollInfo->Handles[i].Events,
-                                 PollInfo->Handles[i].Handle));
-                    if (! HandleCounted)
-                    {
-                        OutCount++;
-                        HandleCounted = TRUE;
-                    }
-                    if( writefds )
-                        FD_SET(PollInfo->Handles[i].Handle, writefds);
-                    break;
-                case AFD_EVENT_OOB_RECEIVE:
-                case AFD_EVENT_CONNECT_FAIL:
-                    AFD_DbgPrint(MID_TRACE,("Event %x on handle %x\n",
-                                 PollInfo->Handles[i].Events,
-                                 PollInfo->Handles[i].Handle));
-                    if (! HandleCounted)
-                    {
-                        OutCount++;
-                        HandleCounted = TRUE;
-                    }
-                    if( exceptfds )
-                        FD_SET(PollInfo->Handles[i].Handle, exceptfds);
-                    break;
-            }
-        }
-    }
-
-    HeapFree( GlobalHeap, 0, PollBuffer );
-    NtClose( SockEvent );
-
-    if( lpErrno )
-    {
-        switch( IOSB.Status )
-        {
-            case STATUS_SUCCESS: 
-            case STATUS_TIMEOUT:
-                *lpErrno = 0;
-                break;
-            default:
-                *lpErrno = WSAEINVAL;
-                break;
-        }
-        AFD_DbgPrint(MID_TRACE,("*lpErrno = %x\n", *lpErrno));
-    }
-
-    AFD_DbgPrint(MID_TRACE,("%d events\n", OutCount));
-
-    return OutCount;
-}
-
-SOCKET
-WSPAPI 
-WSPAccept(SOCKET Handle,
-          struct sockaddr *SocketAddress,
-          int *SocketAddressLength,
-          LPCONDITIONPROC lpfnCondition,
-          DWORD dwCallbackData,
-          LPINT lpErrno)
-{
-    IO_STATUS_BLOCK             IOSB;
-    PAFD_RECEIVED_ACCEPT_DATA   ListenReceiveData;
-    AFD_ACCEPT_DATA             AcceptData;
-    AFD_DEFER_ACCEPT_DATA       DeferData;
-    AFD_PENDING_ACCEPT_DATA     PendingAcceptData;
-    PSOCKET_INFORMATION         Socket = NULL;
-    NTSTATUS                    Status;
-    struct fd_set               ReadSet;
-    struct timeval              Timeout;
-    PVOID                       PendingData = NULL;
-    ULONG                       PendingDataLength = 0;
-    PVOID                       CalleeDataBuffer;
-    WSABUF                      CallerData, CalleeID, CallerID, CalleeData;
-    PSOCKADDR                   RemoteAddress =  NULL;
-    GROUP                       GroupID = 0;
-    ULONG                       CallBack;
-    WSAPROTOCOL_INFOW           ProtocolInfo;
-    SOCKET                      AcceptSocket;
-    UCHAR                       ReceiveBuffer[0x1A];
-    HANDLE                      SockEvent;
-
-    Status = NtCreateEvent(&SockEvent,
-                           GENERIC_READ | GENERIC_WRITE,
-                           NULL,
-                           1,
-                           FALSE);
-
-    if( !NT_SUCCESS(Status) )
-    {
-        MsafdReturnWithErrno( Status, lpErrno, 0, NULL );
-        return INVALID_SOCKET;
-    }
-
-    /* Dynamic Structure...ugh */
-    ListenReceiveData = (PAFD_RECEIVED_ACCEPT_DATA)ReceiveBuffer;
-
-    /* Get the Socket Structure associate to this Socket*/
-    Socket = GetSocketStructure(Handle);
-
-    /* If this is non-blocking, make sure there's something for us to accept */
-    FD_ZERO(&ReadSet);
-    FD_SET(Socket->Handle, &ReadSet);
-    Timeout.tv_sec=0;
-    Timeout.tv_usec=0;
-
-    WSPSelect(0, &ReadSet, NULL, NULL, &Timeout, NULL);
-
-    if (ReadSet.fd_array[0] != Socket->Handle)
-    {
-        NtClose(SockEvent);
-        return 0;
-    }
-
-    /* Send IOCTL */
-    Status = NtDeviceIoControlFile((HANDLE)Socket->Handle,
-                                   SockEvent,
-                                   NULL,
-                                   NULL,
-                                   &IOSB,
-                                   IOCTL_AFD_WAIT_FOR_LISTEN,
-                                   NULL,
-                                   0,
-                                   ListenReceiveData,
-                                   0xA + sizeof(*ListenReceiveData));
-
-    /* Wait for return */
-    if (Status == STATUS_PENDING)
-    {
-        WaitForSingleObject(SockEvent, INFINITE);
-        Status = IOSB.Status;
-    }
-
-    if (!NT_SUCCESS(Status))
-    {
-        NtClose( SockEvent );
-        MsafdReturnWithErrno( Status, lpErrno, 0, NULL );
-        return INVALID_SOCKET;
-    }
-
-    if (lpfnCondition != NULL)
-    {
-        if ((Socket->SharedData.ServiceFlags1 & XP1_CONNECT_DATA) != 0) 
-        {
-            /* Find out how much data is pending */
-            PendingAcceptData.SequenceNumber = ListenReceiveData->SequenceNumber;
-            PendingAcceptData.ReturnSize = TRUE;
-
-            /* Send IOCTL */
-            Status = NtDeviceIoControlFile((HANDLE)Socket->Handle,
-                                           SockEvent,
-                                           NULL,
-                                           NULL,
-                                           &IOSB,
-                                           IOCTL_AFD_GET_PENDING_CONNECT_DATA,
-                                           &PendingAcceptData,
-                                           sizeof(PendingAcceptData),
-                                           &PendingAcceptData,
-                                           sizeof(PendingAcceptData));
-
-            /* Wait for return */
-            if (Status == STATUS_PENDING)
-            {
-                WaitForSingleObject(SockEvent, INFINITE);
-                Status = IOSB.Status;
-            }
-
-            if (!NT_SUCCESS(Status))
-            {
-                NtClose( SockEvent );
-                MsafdReturnWithErrno( Status, lpErrno, 0, NULL );
-                return INVALID_SOCKET;
-            }
-
-            /* How much data to allocate */
-            PendingDataLength = IOSB.Information;
-
-            if (PendingDataLength)
-            {
-                /* Allocate needed space */
-                PendingData = HeapAlloc(GlobalHeap, 0, PendingDataLength);
-                if (!PendingData)
-                {
-                    MsafdReturnWithErrno( STATUS_INSUFFICIENT_RESOURCES, lpErrno, 0, NULL );
-                    return INVALID_SOCKET;
-                }
-
-                /* We want the data now */
-                PendingAcceptData.ReturnSize = FALSE;
-
-                /* Send IOCTL */
-                Status = NtDeviceIoControlFile((HANDLE)Socket->Handle,
-                                               SockEvent,
-                                               NULL,
-                                               NULL,
-                                               &IOSB,
-                                               IOCTL_AFD_GET_PENDING_CONNECT_DATA,
-                                               &PendingAcceptData,
-                                               sizeof(PendingAcceptData),
-                                               PendingData,
-                                               PendingDataLength);
-
-                /* Wait for return */
-                if (Status == STATUS_PENDING)
-                {
-                    WaitForSingleObject(SockEvent, INFINITE);
-                    Status = IOSB.Status;
-                }
-
-                if (!NT_SUCCESS(Status))
-                {
-                    NtClose( SockEvent );
-                    MsafdReturnWithErrno( Status, lpErrno, 0, NULL );
-                    return INVALID_SOCKET;
-                }
-            }
-        }
-
-        if ((Socket->SharedData.ServiceFlags1 & XP1_QOS_SUPPORTED) != 0)
-        {
-            /* I don't support this yet */
-        }
-
-        /* Build Callee ID */
-        CalleeID.buf = (PVOID)Socket->LocalAddress;
-        CalleeID.len = Socket->SharedData.SizeOfLocalAddress;
-
-        RemoteAddress = HeapAlloc(GlobalHeap, 0, sizeof(*RemoteAddress));
-        if (!RemoteAddress)
-        {
-            MsafdReturnWithErrno(STATUS_INSUFFICIENT_RESOURCES, lpErrno, 0, NULL);
-            return INVALID_SOCKET;
-        }
-
-        /* Set up Address in SOCKADDR Format */
-        RtlCopyMemory (RemoteAddress, 
-                       &ListenReceiveData->Address.Address[0].AddressType, 
-                       sizeof(*RemoteAddress));
-
-        /* Build Caller ID */
-        CallerID.buf = (PVOID)RemoteAddress;
-        CallerID.len = sizeof(*RemoteAddress);
-
-        /* Build Caller Data */
-        CallerData.buf = PendingData;
-        CallerData.len = PendingDataLength;
-
-        /* Check if socket supports Conditional Accept */
-        if (Socket->SharedData.UseDelayedAcceptance != 0)
-        {
-            /* Allocate Buffer for Callee Data */
-            CalleeDataBuffer = HeapAlloc(GlobalHeap, 0, 4096);
-            if (!CalleeDataBuffer) {
-                MsafdReturnWithErrno( STATUS_INSUFFICIENT_RESOURCES, lpErrno, 0, NULL );
-                return INVALID_SOCKET;
-            }
-            CalleeData.buf = CalleeDataBuffer;
-            CalleeData.len = 4096;
-        } 
-        else
-        {
-            /* Nothing */
-            CalleeData.buf = 0;
-            CalleeData.len = 0;
-        }
-
-        /* Call the Condition Function */
-        CallBack = (lpfnCondition)(&CallerID,
-                                   CallerData.buf == NULL ? NULL : &CallerData,
-                                   NULL,
-                                   NULL,
-                                   &CalleeID,
-                                   CalleeData.buf == NULL ? NULL : &CalleeData,
-                                   &GroupID,
-                                   dwCallbackData);
-
-        if (((CallBack == CF_ACCEPT) && GroupID) != 0)
-        {
-            /* TBD: Check for Validity */
-        }
-
-        if (CallBack == CF_ACCEPT)
-        {
-            if ((Socket->SharedData.ServiceFlags1 & XP1_QOS_SUPPORTED) != 0)
-            {
-                /* I don't support this yet */
-            }
-            if (CalleeData.buf)
-            {
-                // SockSetConnectData Sockets(SocketID), IOCTL_AFD_SET_CONNECT_DATA, CalleeData.Buffer, CalleeData.BuffSize, 0
-            }
-        }
-        else
-        {
-            /* Callback rejected. Build Defer Structure */
-            DeferData.SequenceNumber = ListenReceiveData->SequenceNumber;
-            DeferData.RejectConnection = (CallBack == CF_REJECT);
-
-            /* Send IOCTL */
-            Status = NtDeviceIoControlFile((HANDLE)Socket->Handle,
-                                           SockEvent,
-                                           NULL,
-                                           NULL,
-                                           &IOSB,
-                                           IOCTL_AFD_DEFER_ACCEPT,
-                                           &DeferData,
-                                           sizeof(DeferData),
-                                           NULL,
-                                           0);
-
-            /* Wait for return */
-            if (Status == STATUS_PENDING)
-            {
-                WaitForSingleObject(SockEvent, INFINITE);
-                Status = IOSB.Status;
-            }
-
-            NtClose( SockEvent );
-
-            if (!NT_SUCCESS(Status))
-            {
-                MsafdReturnWithErrno( Status, lpErrno, 0, NULL );
-                return INVALID_SOCKET;
-            }
-
-            if (CallBack == CF_REJECT )
-            {
-                *lpErrno = WSAECONNREFUSED;
-                return INVALID_SOCKET;
-            }
-            else
-            {
-                *lpErrno = WSAECONNREFUSED;
-                return INVALID_SOCKET;
-            }
-        }
-    }
-
-    /* Create a new Socket */
-    ProtocolInfo.dwCatalogEntryId = Socket->SharedData.CatalogEntryId;
-    ProtocolInfo.dwServiceFlags1 = Socket->SharedData.ServiceFlags1;
-    ProtocolInfo.dwProviderFlags = Socket->SharedData.ProviderFlags;
-
-    AcceptSocket = WSPSocket (Socket->SharedData.AddressFamily,
-                              Socket->SharedData.SocketType,
-                              Socket->SharedData.Protocol,
-                              &ProtocolInfo,
-                              GroupID,
-                              Socket->SharedData.CreateFlags,
-                              NULL);
-
-    /* Set up the Accept Structure */
-    AcceptData.ListenHandle = (HANDLE)AcceptSocket;
-    AcceptData.SequenceNumber = ListenReceiveData->SequenceNumber;
-
-    /* Send IOCTL to Accept */
-    Status = NtDeviceIoControlFile((HANDLE)Socket->Handle,
-                                   SockEvent,
-                                   NULL,
-                                   NULL,
-                                   &IOSB,
-                                   IOCTL_AFD_ACCEPT,
-                                   &AcceptData,
-                                   sizeof(AcceptData),
-                                   NULL,
-                                   0);
-
-    /* Wait for return */
-    if (Status == STATUS_PENDING)
-    {
-        WaitForSingleObject(SockEvent, INFINITE);
-        Status = IOSB.Status;
-    }
-
-    if (!NT_SUCCESS(Status))
-    {
-        NtClose(SockEvent);
-        WSPCloseSocket( AcceptSocket, lpErrno );
-        MsafdReturnWithErrno( Status, lpErrno, 0, NULL );
-        return INVALID_SOCKET;
-    }
-
-    /* Return Address in SOCKADDR FORMAT */
-    if( SocketAddress )
-    {
-        RtlCopyMemory (SocketAddress,
-                       &ListenReceiveData->Address.Address[0].AddressType,
-                       sizeof(*RemoteAddress));
-        if( SocketAddressLength )
-            *SocketAddressLength = ListenReceiveData->Address.Address[0].AddressLength;
-    }
-
-    NtClose( SockEvent );
-
-    /* Re-enable Async Event */
-    SockReenableAsyncSelectEvent(Socket, FD_ACCEPT);
-
-    AFD_DbgPrint(MID_TRACE,("Socket %x\n", AcceptSocket));
-
-    if (Status == STATUS_SUCCESS && (Socket->HelperEvents & WSH_NOTIFY_ACCEPT))
-    {
-        Status = Socket->HelperData->WSHNotify(Socket->HelperContext,
-                                               Socket->Handle,
-                                               Socket->TdiAddressHandle,
-                                               Socket->TdiConnectionHandle,
-                                               WSH_NOTIFY_ACCEPT);
-
-        if (Status)
-        {
-            if (lpErrno) *lpErrno = Status;
-            return INVALID_SOCKET;
-        }
-    }
-
-    *lpErrno = 0;
-
-    /* Return Socket */
-    return AcceptSocket;
-}
-
-int
-WSPAPI 
-WSPConnect(SOCKET Handle,
-           const struct sockaddr * SocketAddress,
-           int SocketAddressLength,
-           LPWSABUF lpCallerData,
-           LPWSABUF lpCalleeData,
-           LPQOS lpSQOS,
-           LPQOS lpGQOS,
-           LPINT lpErrno)
-{
-    IO_STATUS_BLOCK         IOSB;
-    PAFD_CONNECT_INFO       ConnectInfo;
-    PSOCKET_INFORMATION     Socket = NULL;
-    NTSTATUS                Status;
-    UCHAR                   ConnectBuffer[0x22];
-    ULONG                   ConnectDataLength;
-    ULONG                   InConnectDataLength;
-    INT                     BindAddressLength;
-    PSOCKADDR               BindAddress;
-    HANDLE                  SockEvent;
-
-    Status = NtCreateEvent(&SockEvent,
-                           GENERIC_READ | GENERIC_WRITE,
-                           NULL,
-                           1,
-                           FALSE);
-
-    if( !NT_SUCCESS(Status) )
-        return -1;
-
-    AFD_DbgPrint(MID_TRACE,("Called\n"));
-
-    /* Get the Socket Structure associate to this Socket*/
-    Socket = GetSocketStructure(Handle);
-
-    /* Bind us First */
-    if (Socket->SharedData.State == SocketOpen)
-    {
-        /* Get the Wildcard Address */
-        BindAddressLength = Socket->HelperData->MaxWSAddressLength;
-        BindAddress = HeapAlloc(GetProcessHeap(), 0, BindAddressLength);
-        if (!BindAddress)
-        {
-            MsafdReturnWithErrno( STATUS_INSUFFICIENT_RESOURCES, lpErrno, 0, NULL );
-            return INVALID_SOCKET;
-        }
-        Socket->HelperData->WSHGetWildcardSockaddr (Socket->HelperContext, 
-                                                    BindAddress, 
-                                                    &BindAddressLength);
-        /* Bind it */
-        WSPBind(Handle, BindAddress, BindAddressLength, NULL);
-    }
-
-    /* Set the Connect Data */
-    if (lpCallerData != NULL)
-    {
-        ConnectDataLength = lpCallerData->len;
-        Status = NtDeviceIoControlFile((HANDLE)Handle,
-                                        SockEvent,
-                                        NULL,
-                                        NULL,
-                                        &IOSB,
-                                        IOCTL_AFD_SET_CONNECT_DATA,
-                                        lpCallerData->buf,
-                                        ConnectDataLength,
-                                        NULL,
-                                        0);
-        /* Wait for return */
-        if (Status == STATUS_PENDING)
-        {
-            WaitForSingleObject(SockEvent, INFINITE);
-            Status = IOSB.Status;
-        }
-    }
-
-    /* Dynamic Structure...ugh */
-    ConnectInfo = (PAFD_CONNECT_INFO)ConnectBuffer;
-
-    /* Set up Address in TDI Format */
-    ConnectInfo->RemoteAddress.TAAddressCount = 1;
-    ConnectInfo->RemoteAddress.Address[0].AddressLength = SocketAddressLength - sizeof(SocketAddress->sa_family);
-    ConnectInfo->RemoteAddress.Address[0].AddressType = SocketAddress->sa_family;
-    RtlCopyMemory (ConnectInfo->RemoteAddress.Address[0].Address,
-                   SocketAddress->sa_data,
-                   SocketAddressLength - sizeof(SocketAddress->sa_family));
-
-    /* 
-    * Disable FD_WRITE and FD_CONNECT 
-    * The latter fixes a race condition where the FD_CONNECT is re-enabled
-    * at the end of this function right after the Async Thread disables it.
-    * This should only happen at the *next* WSPConnect
-    */
-    if (Socket->SharedData.AsyncEvents & FD_CONNECT)
-    {
-        Socket->SharedData.AsyncDisabledEvents |= FD_CONNECT | FD_WRITE;
-    }
-
-    /* Tell AFD that we want Connection Data back, have it allocate a buffer */
-    if (lpCalleeData != NULL)
-    {
-        InConnectDataLength = lpCalleeData->len;
-        Status = NtDeviceIoControlFile((HANDLE)Handle,
-                                        SockEvent,
-                                        NULL,
-                                        NULL,
-                                        &IOSB,
-                                        IOCTL_AFD_SET_CONNECT_DATA_SIZE,
-                                        &InConnectDataLength,
-                                        sizeof(InConnectDataLength),
-                                        NULL,
-                                        0);
-
-        /* Wait for return */
-        if (Status == STATUS_PENDING)
-        {
-            WaitForSingleObject(SockEvent, INFINITE);
-            Status = IOSB.Status;
-        }
-    }
-
-    /* AFD doesn't seem to care if these are invalid, but let's 0 them anyways */
-    ConnectInfo->Root = 0;
-    ConnectInfo->UseSAN = FALSE;
-    ConnectInfo->Unknown = 0;
-
-    /* FIXME: Handle Async Connect */
-    if (Socket->SharedData.NonBlocking)
-    {
-        AFD_DbgPrint(MIN_TRACE, ("Async Connect UNIMPLEMENTED!\n"));
-    }
-
-    /* Send IOCTL */
-    Status = NtDeviceIoControlFile((HANDLE)Handle,
-                                   SockEvent,
-                                   NULL,
-                                   NULL,
-                                   &IOSB,
-                                   IOCTL_AFD_CONNECT,
-                                   ConnectInfo,
-                                   0x22,
-                                   NULL,
-                                   0);
-    /* Wait for return */
-    if (Status == STATUS_PENDING)
-    {
-        WaitForSingleObject(SockEvent, INFINITE);
-        Status = IOSB.Status;
-    }
-
-    Socket->TdiConnectionHandle = (HANDLE)IOSB.Information;
-
-    /* Get any pending connect data */
-    if (lpCalleeData != NULL)
-    {
-        Status = NtDeviceIoControlFile((HANDLE)Handle,
-                                       SockEvent,
-                                       NULL,
-                                       NULL,
-                                       &IOSB,
-                                       IOCTL_AFD_GET_CONNECT_DATA,
-                                       NULL,
-                                       0,
-                                       lpCalleeData->buf,
-                                       lpCalleeData->len);
-        /* Wait for return */
-        if (Status == STATUS_PENDING)
-        {
-            WaitForSingleObject(SockEvent, INFINITE);
-            Status = IOSB.Status;
-        }
-    }
-
-    /* Re-enable Async Event */
-    SockReenableAsyncSelectEvent(Socket, FD_WRITE);
-
-    /* FIXME: THIS IS NOT RIGHT!!! HACK HACK HACK! */
-    SockReenableAsyncSelectEvent(Socket, FD_CONNECT);
-
-    AFD_DbgPrint(MID_TRACE,("Ending\n"));
-
-    NtClose( SockEvent );
-
-    if (Status == STATUS_SUCCESS && (Socket->HelperEvents & WSH_NOTIFY_CONNECT))
-    {
-        Status = Socket->HelperData->WSHNotify(Socket->HelperContext,
-                                               Socket->Handle,
-                                               Socket->TdiAddressHandle,
-                                               Socket->TdiConnectionHandle,
-                                               WSH_NOTIFY_CONNECT);
-
-        if (Status)
-        {
-            if (lpErrno) *lpErrno = Status;
-            return SOCKET_ERROR;
-        }
-    }
-    else if (Status != STATUS_SUCCESS && (Socket->HelperEvents & WSH_NOTIFY_CONNECT_ERROR))
-    {
-        Status = Socket->HelperData->WSHNotify(Socket->HelperContext,
-                                               Socket->Handle,
-                                               Socket->TdiAddressHandle,
-                                               Socket->TdiConnectionHandle,
-                                               WSH_NOTIFY_CONNECT_ERROR);
-
-        if (Status)
-        {
-            if (lpErrno) *lpErrno = Status;
-            return SOCKET_ERROR;
-        }
-    }
-
-    return MsafdReturnWithErrno( Status, lpErrno, 0, NULL );
-}
-int
-WSPAPI 
-WSPShutdown(SOCKET Handle,
-            int HowTo,
-            LPINT lpErrno)
-
-{
-    IO_STATUS_BLOCK         IOSB;
-    AFD_DISCONNECT_INFO     DisconnectInfo;
-    PSOCKET_INFORMATION     Socket = NULL;
-    NTSTATUS                Status;
-    HANDLE                  SockEvent;
-
-    Status = NtCreateEvent(&SockEvent,
-                           GENERIC_READ | GENERIC_WRITE,
-                           NULL,
-                           1,
-                           FALSE);
-
-    if( !NT_SUCCESS(Status) )
-        return -1;
-
-    AFD_DbgPrint(MID_TRACE,("Called\n"));
-
-    /* Get the Socket Structure associate to this Socket*/
-    Socket = GetSocketStructure(Handle);
-
-    /* Set AFD Disconnect Type */
-    switch (HowTo)
-    {
-        case SD_RECEIVE:
-            DisconnectInfo.DisconnectType = AFD_DISCONNECT_RECV;
-            Socket->SharedData.ReceiveShutdown = TRUE;
-            break;
-        case SD_SEND:
-            DisconnectInfo.DisconnectType= AFD_DISCONNECT_SEND;
-            Socket->SharedData.SendShutdown = TRUE;
-            break;
-        case SD_BOTH:
-            DisconnectInfo.DisconnectType = AFD_DISCONNECT_RECV | AFD_DISCONNECT_SEND;
-            Socket->SharedData.ReceiveShutdown = TRUE;
-            Socket->SharedData.SendShutdown = TRUE;
-            break;
-    }
-
-    DisconnectInfo.Timeout = RtlConvertLongToLargeInteger(-1);
-
-    /* Send IOCTL */
-    Status = NtDeviceIoControlFile((HANDLE)Handle,
-                                   SockEvent,
-                                   NULL,
-                                   NULL,
-                                   &IOSB,
-                                   IOCTL_AFD_DISCONNECT,
-                                   &DisconnectInfo,
-                                   sizeof(DisconnectInfo),
-                                   NULL,
-                                   0);
-
-    /* Wait for return */
-    if (Status == STATUS_PENDING)
-    {
-        WaitForSingleObject(SockEvent, INFINITE);
-        Status = IOSB.Status;
-    }
-
-    AFD_DbgPrint(MID_TRACE,("Ending\n"));
-
-    NtClose( SockEvent );
-
-    return MsafdReturnWithErrno( Status, lpErrno, 0, NULL );
-}
-
-
-INT
-WSPAPI
-WSPGetSockName(IN SOCKET Handle,
-               OUT LPSOCKADDR Name,
-               IN OUT LPINT NameLength,
-               OUT LPINT lpErrno)
-{
-    IO_STATUS_BLOCK         IOSB;
-    ULONG                   TdiAddressSize;
-       PTDI_ADDRESS_INFO       TdiAddress;
-    PTRANSPORT_ADDRESS      SocketAddress;
-    PSOCKET_INFORMATION     Socket = NULL;
-    NTSTATUS                Status;
-    HANDLE                  SockEvent;
-
-    Status = NtCreateEvent(&SockEvent,
-                           GENERIC_READ | GENERIC_WRITE,
-                           NULL,
-                           1,
-                           FALSE);
-
-    if( !NT_SUCCESS(Status) )
-        return SOCKET_ERROR;
-
-    /* Get the Socket Structure associate to this Socket*/
-    Socket = GetSocketStructure(Handle);
-
-    /* Allocate a buffer for the address */
-    TdiAddressSize = 
-               sizeof(TRANSPORT_ADDRESS) + Socket->SharedData.SizeOfLocalAddress;
-    TdiAddress = HeapAlloc(GlobalHeap, 0, TdiAddressSize);
-
-    if ( TdiAddress == NULL )
-    {
-        NtClose( SockEvent );
-        *lpErrno = WSAENOBUFS;
-        return SOCKET_ERROR;
-    }
-
-    SocketAddress = &TdiAddress->Address;
-
-    /* Send IOCTL */
-    Status = NtDeviceIoControlFile((HANDLE)Socket->Handle,
-                                   SockEvent,
-                                   NULL,
-                                   NULL,
-                                   &IOSB,
-                                   IOCTL_AFD_GET_SOCK_NAME,
-                                   NULL,
-                                   0,
-                                   TdiAddress,
-                                   TdiAddressSize);
-
-    /* Wait for return */
-    if (Status == STATUS_PENDING)
-    {
-        WaitForSingleObject(SockEvent, INFINITE);
-        Status = IOSB.Status;
-    }
-
-    NtClose( SockEvent );
-
-    if (NT_SUCCESS(Status))
-    {
-        if (*NameLength >= SocketAddress->Address[0].AddressLength)
-        {
-            Name->sa_family = SocketAddress->Address[0].AddressType;
-            RtlCopyMemory (Name->sa_data,
-                           SocketAddress->Address[0].Address, 
-                           SocketAddress->Address[0].AddressLength);
-            *NameLength = 2 + SocketAddress->Address[0].AddressLength;
-            AFD_DbgPrint (MID_TRACE, ("NameLength %d Address: %x Port %x\n",
-                          *NameLength, ((struct sockaddr_in *)Name)->sin_addr.s_addr,
-                          ((struct sockaddr_in *)Name)->sin_port));
-            HeapFree(GlobalHeap, 0, TdiAddress);
-            return 0;
-        }
-        else
-        {
-            HeapFree(GlobalHeap, 0, TdiAddress);
-            *lpErrno = WSAEFAULT;
-            return SOCKET_ERROR;
-        }
-    }
-
-    return MsafdReturnWithErrno ( Status, lpErrno, 0, NULL );
-}
-
-
-INT
-WSPAPI
-WSPGetPeerName(IN SOCKET s,
-               OUT LPSOCKADDR Name,
-               IN OUT LPINT NameLength,
-               OUT LPINT lpErrno)
-{
-    IO_STATUS_BLOCK         IOSB;
-    ULONG                   TdiAddressSize;
-    PTRANSPORT_ADDRESS      SocketAddress;
-    PSOCKET_INFORMATION     Socket = NULL;
-    NTSTATUS                Status;
-    HANDLE                  SockEvent;
-
-    Status = NtCreateEvent(&SockEvent,
-                           GENERIC_READ | GENERIC_WRITE,
-                           NULL,
-                           1,
-                           FALSE);
-
-    if( !NT_SUCCESS(Status) )
-        return SOCKET_ERROR;
-
-    /* Get the Socket Structure associate to this Socket*/
-    Socket = GetSocketStructure(s);
-
-    /* Allocate a buffer for the address */
-    TdiAddressSize = sizeof(TRANSPORT_ADDRESS) + *NameLength;
-    SocketAddress = HeapAlloc(GlobalHeap, 0, TdiAddressSize);
-
-    if ( SocketAddress == NULL )
-    {
-        NtClose( SockEvent );
-        *lpErrno = WSAENOBUFS;
-        return SOCKET_ERROR;
-    }
-
-    /* Send IOCTL */
-    Status = NtDeviceIoControlFile((HANDLE)Socket->Handle,
-                                   SockEvent,
-                                   NULL,
-                                   NULL,
-                                   &IOSB,
-                                   IOCTL_AFD_GET_PEER_NAME,
-                                   NULL,
-                                   0,
-                                   SocketAddress,
-                                   TdiAddressSize);
-
-    /* Wait for return */
-    if (Status == STATUS_PENDING)
-    {
-        WaitForSingleObject(SockEvent, INFINITE);
-        Status = IOSB.Status;
-    }
-
-    NtClose( SockEvent );
-
-    if (NT_SUCCESS(Status))
-    {
-        if (*NameLength >= SocketAddress->Address[0].AddressLength)
-        {
-            Name->sa_family = SocketAddress->Address[0].AddressType;
-            RtlCopyMemory (Name->sa_data,
-                           SocketAddress->Address[0].Address, 
-                           SocketAddress->Address[0].AddressLength);
-            *NameLength = 2 + SocketAddress->Address[0].AddressLength;
-            AFD_DbgPrint (MID_TRACE, ("NameLength %d Address: %s Port %x\n",
-                          *NameLength, ((struct sockaddr_in *)Name)->sin_addr.s_addr,
-                          ((struct sockaddr_in *)Name)->sin_port));
-            HeapFree(GlobalHeap, 0, SocketAddress);
-            return 0;
-        }
-        else
-        {
-            HeapFree(GlobalHeap, 0, SocketAddress);
-            *lpErrno = WSAEFAULT;
-            return SOCKET_ERROR;
-        }
-    }
-
-    return MsafdReturnWithErrno ( Status, lpErrno, 0, NULL );
-}
-
-INT
-WSPAPI
-WSPIoctl(IN  SOCKET Handle,
-         IN  DWORD dwIoControlCode,
-         IN  LPVOID lpvInBuffer,
-         IN  DWORD cbInBuffer,
-         OUT LPVOID lpvOutBuffer,
-         IN  DWORD cbOutBuffer,
-         OUT LPDWORD lpcbBytesReturned,
-         IN  LPWSAOVERLAPPED lpOverlapped,
-         IN  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
-         IN  LPWSATHREADID lpThreadId,
-         OUT LPINT lpErrno)
-{
-    PSOCKET_INFORMATION Socket = NULL;
-
-    /* Get the Socket Structure associate to this Socket*/
-    Socket = GetSocketStructure(Handle);
-
-    switch( dwIoControlCode )
-    {
-        case FIONBIO:
-            if( cbInBuffer < sizeof(INT) || IS_INTRESOURCE(lpvInBuffer) )
-            {
-                *lpErrno = WSAEFAULT;
-                return SOCKET_ERROR;
-            }
-            Socket->SharedData.NonBlocking = *((PULONG)lpvInBuffer) ? 1 : 0;
-            return SetSocketInformation(Socket, AFD_INFO_BLOCKING_MODE, (PULONG)lpvInBuffer, NULL);
-        case FIONREAD:
-            if( cbOutBuffer < sizeof(INT) || IS_INTRESOURCE(lpvOutBuffer) )
-            {
-                *lpErrno = WSAEFAULT;
-                return SOCKET_ERROR;
-            }
-            return GetSocketInformation(Socket, AFD_INFO_RECEIVE_CONTENT_SIZE, (PULONG)lpvOutBuffer, NULL);
-        default:
-            *lpErrno = WSAEINVAL;
-            return SOCKET_ERROR;
-    }
-}
-
-
-INT
-WSPAPI
-WSPGetSockOpt(IN SOCKET Handle,
-              IN INT Level,
-              IN INT OptionName,
-              OUT CHAR FAR* OptionValue,
-              IN OUT LPINT OptionLength,
-              OUT LPINT lpErrno)
-{
-    PSOCKET_INFORMATION Socket = NULL;
-    PVOID Buffer;
-    INT BufferSize;
-    BOOLEAN BoolBuffer;
-
-    /* Get the Socket Structure associate to this Socket*/
-    Socket = GetSocketStructure(Handle);
-    if (Socket == NULL)
-    {
-        *lpErrno = WSAENOTSOCK;
-        return SOCKET_ERROR;
-    }
-
-    AFD_DbgPrint(MID_TRACE, ("Called\n"));
-
-    switch (Level)
-    {
-        case SOL_SOCKET:
-            switch (OptionName)
-            {
-                case SO_TYPE:
-                    Buffer = &Socket->SharedData.SocketType;
-                    BufferSize = sizeof(INT);
-                    break;
-
-                case SO_RCVBUF:
-                    Buffer = &Socket->SharedData.SizeOfRecvBuffer;
-                    BufferSize = sizeof(INT);
-                    break;
-
-                case SO_SNDBUF:
-                    Buffer = &Socket->SharedData.SizeOfSendBuffer;
-                    BufferSize = sizeof(INT);
-                    break;
-
-                case SO_ACCEPTCONN:
-                    BoolBuffer = Socket->SharedData.Listening;
-                    Buffer = &BoolBuffer;
-                    BufferSize = sizeof(BOOLEAN);
-                    break;
-
-                case SO_BROADCAST:
-                    BoolBuffer = Socket->SharedData.Broadcast;
-                    Buffer = &BoolBuffer;
-                    BufferSize = sizeof(BOOLEAN);
-                    break;
-
-                case SO_DEBUG:
-                    BoolBuffer = Socket->SharedData.Debug;
-                    Buffer = &BoolBuffer;
-                    BufferSize = sizeof(BOOLEAN);
-                    break;
-
-                /* case SO_CONDITIONAL_ACCEPT: */
-                case SO_DONTLINGER:
-                case SO_DONTROUTE:
-                case SO_ERROR:
-                case SO_GROUP_ID:
-                case SO_GROUP_PRIORITY:
-                case SO_KEEPALIVE:
-                case SO_LINGER:
-                case SO_MAX_MSG_SIZE:
-                case SO_OOBINLINE:
-                case SO_PROTOCOL_INFO:
-                case SO_REUSEADDR:
-                    AFD_DbgPrint(MID_TRACE, ("Unimplemented option (%x)\n",
-                                 OptionName));
-
-                default:
-                    *lpErrno = WSAEINVAL;
-                    return SOCKET_ERROR;
-            }
-            
-            if (*OptionLength < BufferSize)
-            {
-                *lpErrno = WSAEFAULT;
-                *OptionLength = BufferSize;
-                return SOCKET_ERROR;
-            }
-            RtlCopyMemory(OptionValue, Buffer, BufferSize);
-
-            return 0;
-
-        case IPPROTO_TCP: /* FIXME */
-        default:
-            *lpErrno = Socket->HelperData->WSHGetSocketInformation(Socket->HelperContext,
-                                                                   Handle,
-                                                                   Socket->TdiAddressHandle,
-                                                                   Socket->TdiConnectionHandle,
-                                                                   Level,
-                                                                   OptionName,
-                                                                   OptionValue,
-                                                                   (LPINT)OptionLength);
-            return (*lpErrno == 0) ? 0 : SOCKET_ERROR;
-    }
-}
-
-INT
-WSPAPI
-WSPSetSockOpt(
-    IN  SOCKET s,
-    IN  INT level,
-    IN  INT optname,
-    IN  CONST CHAR FAR* optval,
-    IN  INT optlen,
-    OUT LPINT lpErrno)
-{
-    PSOCKET_INFORMATION Socket;
-
-    /* Get the Socket Structure associate to this Socket*/
-    Socket = GetSocketStructure(s);
-    if (Socket == NULL)
-    {
-        *lpErrno = WSAENOTSOCK;
-        return SOCKET_ERROR;
-    }
-
-
-    /* FIXME: We should handle some cases here */
-
-
-    *lpErrno = Socket->HelperData->WSHSetSocketInformation(Socket->HelperContext,
-                                                           s,
-                                                           Socket->TdiAddressHandle,
-                                                           Socket->TdiConnectionHandle,
-                                                           level,
-                                                           optname,
-                                                           (PCHAR)optval,
-                                                           optlen);
-    return (*lpErrno == 0) ? 0 : SOCKET_ERROR;
-}
-
-/*
- * FUNCTION: Initialize service provider for a client
- * ARGUMENTS:
- *     wVersionRequested = Highest WinSock SPI version that the caller can use
- *     lpWSPData         = Address of WSPDATA structure to initialize
- *     lpProtocolInfo    = Pointer to structure that defines the desired protocol
- *     UpcallTable       = Pointer to upcall table of the WinSock DLL
- *     lpProcTable       = Address of procedure table to initialize
- * RETURNS:
- *     Status of operation
- */
-INT
-WSPAPI
-WSPStartup(IN  WORD wVersionRequested,
-           OUT LPWSPDATA lpWSPData,
-           IN  LPWSAPROTOCOL_INFOW lpProtocolInfo,
-           IN  WSPUPCALLTABLE UpcallTable,
-           OUT LPWSPPROC_TABLE lpProcTable)
-
-{
-    NTSTATUS Status;
-
-    AFD_DbgPrint(MAX_TRACE, ("wVersionRequested (0x%X) \n", wVersionRequested));
-    Status = NO_ERROR;
-    Upcalls = UpcallTable;
-
-    if (Status == NO_ERROR)
-    {
-        lpProcTable->lpWSPAccept = WSPAccept;
-        lpProcTable->lpWSPAddressToString = WSPAddressToString;
-        lpProcTable->lpWSPAsyncSelect = WSPAsyncSelect;
-        lpProcTable->lpWSPBind = WSPBind;
-        lpProcTable->lpWSPCancelBlockingCall = WSPCancelBlockingCall;
-        lpProcTable->lpWSPCleanup = WSPCleanup;
-        lpProcTable->lpWSPCloseSocket = WSPCloseSocket;
-        lpProcTable->lpWSPConnect = WSPConnect;
-        lpProcTable->lpWSPDuplicateSocket = WSPDuplicateSocket;
-        lpProcTable->lpWSPEnumNetworkEvents = WSPEnumNetworkEvents;
-        lpProcTable->lpWSPEventSelect = WSPEventSelect;
-        lpProcTable->lpWSPGetOverlappedResult = WSPGetOverlappedResult;
-        lpProcTable->lpWSPGetPeerName = WSPGetPeerName;
-        lpProcTable->lpWSPGetSockName = WSPGetSockName;
-        lpProcTable->lpWSPGetSockOpt = WSPGetSockOpt;
-        lpProcTable->lpWSPGetQOSByName = WSPGetQOSByName;
-        lpProcTable->lpWSPIoctl = WSPIoctl;
-        lpProcTable->lpWSPJoinLeaf = WSPJoinLeaf;
-        lpProcTable->lpWSPListen = WSPListen;
-        lpProcTable->lpWSPRecv = WSPRecv;
-        lpProcTable->lpWSPRecvDisconnect = WSPRecvDisconnect;
-        lpProcTable->lpWSPRecvFrom = WSPRecvFrom;
-        lpProcTable->lpWSPSelect = WSPSelect;
-        lpProcTable->lpWSPSend = WSPSend;
-        lpProcTable->lpWSPSendDisconnect = WSPSendDisconnect;
-        lpProcTable->lpWSPSendTo = WSPSendTo;
-        lpProcTable->lpWSPSetSockOpt = WSPSetSockOpt;
-        lpProcTable->lpWSPShutdown = WSPShutdown;
-        lpProcTable->lpWSPSocket = WSPSocket;
-        lpProcTable->lpWSPStringToAddress = WSPStringToAddress;
-        lpWSPData->wVersion     = MAKEWORD(2, 2);
-        lpWSPData->wHighVersion = MAKEWORD(2, 2);
-    }
-
-    AFD_DbgPrint(MAX_TRACE, ("Status (%d).\n", Status));
-
-    return Status;
-}
-
-
-/*
- * FUNCTION: Cleans up service provider for a client
- * ARGUMENTS:
- *     lpErrno = Address of buffer for error information
- * RETURNS:
- *     0 if successful, or SOCKET_ERROR if not
- */
-INT
-WSPAPI
-WSPCleanup(OUT LPINT lpErrno)
-
-{
-    AFD_DbgPrint(MAX_TRACE, ("\n"));
-    AFD_DbgPrint(MAX_TRACE, ("Leaving.\n"));
-    *lpErrno = NO_ERROR;
-
-    return 0;
-}
-
-
-
-int 
-GetSocketInformation(PSOCKET_INFORMATION Socket, 
-                     ULONG AfdInformationClass, 
-                     PULONG Ulong OPTIONAL, 
-                     PLARGE_INTEGER LargeInteger OPTIONAL)
-{
-    IO_STATUS_BLOCK     IOSB;
-    AFD_INFO            InfoData;
-    NTSTATUS            Status;
-    HANDLE              SockEvent;
-
-    Status = NtCreateEvent(&SockEvent,
-                           GENERIC_READ | GENERIC_WRITE,
-                           NULL,
-                           1,
-                           FALSE);
-
-    if( !NT_SUCCESS(Status) )
-        return -1;
-
-    /* Set Info Class */
-    InfoData.InformationClass = AfdInformationClass;
-
-    /* Send IOCTL */
-    Status = NtDeviceIoControlFile((HANDLE)Socket->Handle,
-                                   SockEvent,
-                                   NULL,
-                                   NULL,
-                                   &IOSB,
-                                   IOCTL_AFD_GET_INFO,
-                                   &InfoData,
-                                   sizeof(InfoData),
-                                   &InfoData,
-                                   sizeof(InfoData));
-
-    /* Wait for return */
-    if (Status == STATUS_PENDING)
-    {
-        WaitForSingleObject(SockEvent, INFINITE);
-    }
-
-    /* Return Information */
-    if (Ulong != NULL)
-    {
-        *Ulong = InfoData.Information.Ulong;
-    }
-    if (LargeInteger != NULL)
-    {
-        *LargeInteger = InfoData.Information.LargeInteger;
-    }
-
-    NtClose( SockEvent );
-
-    return 0;
-
-}
-
-
-int 
-SetSocketInformation(PSOCKET_INFORMATION Socket, 
-                     ULONG AfdInformationClass, 
-                     PULONG Ulong OPTIONAL, 
-                     PLARGE_INTEGER LargeInteger OPTIONAL)
-{
-    IO_STATUS_BLOCK     IOSB;
-    AFD_INFO            InfoData;
-    NTSTATUS            Status;
-    HANDLE              SockEvent;
-
-    Status = NtCreateEvent(&SockEvent,
-                           GENERIC_READ | GENERIC_WRITE,
-                           NULL,
-                           1,
-                           FALSE);
-
-    if( !NT_SUCCESS(Status) )
-        return -1;
-
-    /* Set Info Class */
-    InfoData.InformationClass = AfdInformationClass;
-
-    /* Set Information */
-    if (Ulong != NULL)
-    {
-        InfoData.Information.Ulong = *Ulong;
-    }
-    if (LargeInteger != NULL)
-    {
-        InfoData.Information.LargeInteger = *LargeInteger;
-    }
-
-    AFD_DbgPrint(MID_TRACE,("XXX Info %x (Data %x)\n",
-        AfdInformationClass, *Ulong));
-
-    /* Send IOCTL */
-    Status = NtDeviceIoControlFile((HANDLE)Socket->Handle,
-                                   SockEvent,
-                                   NULL,
-                                   NULL,
-                                   &IOSB,
-                                   IOCTL_AFD_SET_INFO,
-                                   &InfoData,
-                                   sizeof(InfoData),
-                                   NULL,
-                                   0);
-
-    /* Wait for return */
-    if (Status == STATUS_PENDING)
-    {
-        WaitForSingleObject(SockEvent, INFINITE);
-    }
-
-    NtClose( SockEvent );
-
-    return 0;
-
-}
-
-PSOCKET_INFORMATION
-GetSocketStructure(SOCKET Handle)
-{
-    ULONG i;
-
-    for (i=0; i<SocketCount; i++) 
-    {
-        if (Sockets[i]->Handle == Handle)
-        {
-            return Sockets[i];
-        }
-    }
-    return 0;
-}
-
-int CreateContext(PSOCKET_INFORMATION Socket)
-{
-    IO_STATUS_BLOCK     IOSB;
-    SOCKET_CONTEXT      ContextData;
-    NTSTATUS            Status;
-    HANDLE              SockEvent;
-
-    Status = NtCreateEvent(&SockEvent,
-                           GENERIC_READ | GENERIC_WRITE,
-                           NULL,
-                           1,
-                           FALSE);
-
-    if( !NT_SUCCESS(Status) )
-        return -1;
-
-    /* Create Context */
-    ContextData.SharedData = Socket->SharedData;
-    ContextData.SizeOfHelperData = 0;
-    RtlCopyMemory (&ContextData.LocalAddress, 
-                   Socket->LocalAddress, 
-                   Socket->SharedData.SizeOfLocalAddress);
-    RtlCopyMemory (&ContextData.RemoteAddress, 
-                   Socket->RemoteAddress, 
-                   Socket->SharedData.SizeOfRemoteAddress);
-
-    /* Send IOCTL */
-    Status = NtDeviceIoControlFile((HANDLE)Socket->Handle,
-                                   SockEvent,
-                                   NULL,
-                                   NULL,
-                                   &IOSB,
-                                   IOCTL_AFD_SET_CONTEXT,
-                                   &ContextData,
-                                   sizeof(ContextData),
-                                   NULL,
-                                   0);
-
-    /* Wait for Completition */
-    if (Status == STATUS_PENDING)
-    {
-        WaitForSingleObject(SockEvent, INFINITE);
-    }
-
-    NtClose( SockEvent );
-
-    return 0;
-}
-
-BOOLEAN SockCreateOrReferenceAsyncThread(VOID)
-{
-    HANDLE hAsyncThread;
-    DWORD AsyncThreadId;
-    HANDLE AsyncEvent;
-    OBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleFlags;
-    NTSTATUS Status;
-
-    /* Check if the Thread Already Exists */
-    if (SockAsyncThreadRefCount)
-    {
-        return TRUE;
-    }
-
-    /* Create the Completion Port */
-    if (!SockAsyncCompletionPort)
-    {
-        Status = NtCreateIoCompletion(&SockAsyncCompletionPort,
-                                      IO_COMPLETION_ALL_ACCESS,
-                                      NULL,
-                                      2); // Allow 2 threads only
-
-        /* Protect Handle */   
-        HandleFlags.ProtectFromClose = TRUE;
-        HandleFlags.Inherit = FALSE;
-        Status = NtSetInformationObject(SockAsyncCompletionPort,
-                                        ObjectHandleFlagInformation,
-                                        &HandleFlags,
-                                        sizeof(HandleFlags));
-    }
-
-    /* Create the Async Event */
-    Status = NtCreateEvent(&AsyncEvent,
-                           EVENT_ALL_ACCESS,
-                           NULL,
-                           NotificationEvent,
-                           FALSE);
-
-    /* Create the Async Thread */
-    hAsyncThread = CreateThread(NULL,
-                                0,
-                                (LPTHREAD_START_ROUTINE)SockAsyncThread,
-                                NULL,
-                                0,
-                                &AsyncThreadId);
-
-    /* Close the Handle */
-    NtClose(hAsyncThread);
-
-    /* Increase the Reference Count */
-    SockAsyncThreadRefCount++;
-    return TRUE;
-}
-
-int SockAsyncThread(PVOID ThreadParam)
-{
-    PVOID AsyncContext;
-    PASYNC_COMPLETION_ROUTINE AsyncCompletionRoutine;
-    IO_STATUS_BLOCK IOSB;
-    NTSTATUS Status;
-
-    /* Make the Thread Higher Priority */
-    SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_ABOVE_NORMAL);
-
-    /* Do a KQUEUE/WorkItem Style Loop, thanks to IoCompletion Ports */
-    do 
-    {
-        Status =  NtRemoveIoCompletion (SockAsyncCompletionPort,
-                                        (PVOID*)&AsyncCompletionRoutine,
-                                        &AsyncContext,
-                                        &IOSB,
-                                        NULL);
-        /* Call the Async Function */
-        if (NT_SUCCESS(Status))
-        {
-            (*AsyncCompletionRoutine)(AsyncContext, &IOSB);
-        }
-        else
-        {
-            /* It Failed, sleep for a second */
-            Sleep(1000);
-        }
-    } while ((Status != STATUS_TIMEOUT));
-
-    /* The Thread has Ended */
-    return 0;
-}
-
-BOOLEAN SockGetAsyncSelectHelperAfdHandle(VOID)
-{
-    UNICODE_STRING AfdHelper;
-    OBJECT_ATTRIBUTES ObjectAttributes;
-    IO_STATUS_BLOCK IoSb;
-    NTSTATUS Status;
-    FILE_COMPLETION_INFORMATION CompletionInfo;
-    OBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleFlags;
-
-    /* First, make sure we're not already intialized */
-    if (SockAsyncHelperAfdHandle)
-    {
-        return TRUE;
-    }
-
-    /* Set up Handle Name and Object */
-    RtlInitUnicodeString(&AfdHelper, L"\\Device\\Afd\\AsyncSelectHlp" );
-                         InitializeObjectAttributes(&ObjectAttributes,
-                         &AfdHelper,
-                         OBJ_INHERIT | OBJ_CASE_INSENSITIVE,
-                         NULL,
-                         NULL);
-
-    /* Open the Handle to AFD */
-    Status = NtCreateFile(&SockAsyncHelperAfdHandle,
-                          GENERIC_READ | GENERIC_WRITE | SYNCHRONIZE,
-                          &ObjectAttributes,
-                          &IoSb,
-                          NULL,
-                          0,
-                          FILE_SHARE_READ | FILE_SHARE_WRITE,
-                          FILE_OPEN_IF,
-                          0,
-                          NULL,
-                          0);
-
-    /* 
-     * Now Set up the Completion Port Information 
-     * This means that whenever a Poll is finished, the routine will be executed
-     */
-    CompletionInfo.Port = SockAsyncCompletionPort;
-    CompletionInfo.Key = SockAsyncSelectCompletionRoutine;
-    Status = NtSetInformationFile(SockAsyncHelperAfdHandle,
-                                  &IoSb,
-                                  &CompletionInfo,
-                                  sizeof(CompletionInfo),
-                                  FileCompletionInformation);
-
-
-    /* Protect the Handle */
-    HandleFlags.ProtectFromClose = TRUE;
-    HandleFlags.Inherit = FALSE;
-    Status = NtSetInformationObject(SockAsyncCompletionPort,
-                                    ObjectHandleFlagInformation,
-                                    &HandleFlags,
-                                    sizeof(HandleFlags));
-
-
-    /* Set this variable to true so that Send/Recv/Accept will know wether to renable disabled events */
-    SockAsyncSelectCalled = TRUE;
-    return TRUE;
-}
-
-VOID SockAsyncSelectCompletionRoutine(PVOID Context, PIO_STATUS_BLOCK IoStatusBlock)
-{
-
-    PASYNC_DATA AsyncData = Context;
-    PSOCKET_INFORMATION Socket;
-    ULONG x;
-
-    /* Get the Socket */
-    Socket = AsyncData->ParentSocket;
-
-    /* Check if the Sequence  Number Changed behind our back */
-    if (AsyncData->SequenceNumber != Socket->SharedData.SequenceNumber )
-    {
-        return;
-    }
-
-    /* Check we were manually called b/c of a failure */
-    if (!NT_SUCCESS(IoStatusBlock->Status))
-    {
-        /* FIXME: Perform Upcall */
-        return;
-    }
-
-    for (x = 1; x; x<<=1)
-    {
-        switch (AsyncData->AsyncSelectInfo.Handles[0].Events & x)
-        {
-            case AFD_EVENT_RECEIVE:
-                if (0 != (Socket->SharedData.AsyncEvents & FD_READ) &&
-                    0 == (Socket->SharedData.AsyncDisabledEvents & FD_READ))
-                {
-                    /* Make the Notifcation */
-                    (Upcalls.lpWPUPostMessage)(Socket->SharedData.hWnd,
-                                               Socket->SharedData.wMsg,
-                                               Socket->Handle,
-                                               WSAMAKESELECTREPLY(FD_READ, 0));
-                    /* Disable this event until the next read(); */
-                    Socket->SharedData.AsyncDisabledEvents |= FD_READ;
-                }
-            break;
-
-            case AFD_EVENT_OOB_RECEIVE:
-            if (0 != (Socket->SharedData.AsyncEvents & FD_OOB) &&
-                0 == (Socket->SharedData.AsyncDisabledEvents & FD_OOB))
-            {
-                /* Make the Notifcation */
-                (Upcalls.lpWPUPostMessage)(Socket->SharedData.hWnd,
-                                           Socket->SharedData.wMsg,
-                                           Socket->Handle,
-                                           WSAMAKESELECTREPLY(FD_OOB, 0));
-                /* Disable this event until the next read(); */
-                Socket->SharedData.AsyncDisabledEvents |= FD_OOB;
-            }
-            break;
-
-            case AFD_EVENT_SEND:
-                if (0 != (Socket->SharedData.AsyncEvents & FD_WRITE) &&
-                    0 == (Socket->SharedData.AsyncDisabledEvents & FD_WRITE))
-                {
-                    /* Make the Notifcation */
-                    (Upcalls.lpWPUPostMessage)(Socket->SharedData.hWnd,
-                                               Socket->SharedData.wMsg,
-                                               Socket->Handle,
-                                               WSAMAKESELECTREPLY(FD_WRITE, 0));
-                    /* Disable this event until the next write(); */
-                    Socket->SharedData.AsyncDisabledEvents |= FD_WRITE;
-                }
-                break;
-
-                /* FIXME: THIS IS NOT RIGHT!!! HACK HACK HACK! */
-            case AFD_EVENT_CONNECT:
-            case AFD_EVENT_CONNECT_FAIL:
-                if (0 != (Socket->SharedData.AsyncEvents & FD_CONNECT) &&
-                    0 == (Socket->SharedData.AsyncDisabledEvents & FD_CONNECT))
-                {
-                    /* Make the Notifcation */
-                    (Upcalls.lpWPUPostMessage)(Socket->SharedData.hWnd,
-                        Socket->SharedData.wMsg,
-                        Socket->Handle,
-                        WSAMAKESELECTREPLY(FD_CONNECT, 0));
-                    /* Disable this event forever; */
-                    Socket->SharedData.AsyncDisabledEvents |= FD_CONNECT;
-                }
-                break;
-
-            case AFD_EVENT_ACCEPT:
-                if (0 != (Socket->SharedData.AsyncEvents & FD_ACCEPT) &&
-                    0 == (Socket->SharedData.AsyncDisabledEvents & FD_ACCEPT))
-                {
-                    /* Make the Notifcation */
-                    (Upcalls.lpWPUPostMessage)(Socket->SharedData.hWnd,
-                                               Socket->SharedData.wMsg,
-                                               Socket->Handle,
-                                               WSAMAKESELECTREPLY(FD_ACCEPT, 0));
-                    /* Disable this event until the next accept(); */
-                    Socket->SharedData.AsyncDisabledEvents |= FD_ACCEPT;
-                }
-                break;
-
-            case AFD_EVENT_DISCONNECT:
-            case AFD_EVENT_ABORT:
-            case AFD_EVENT_CLOSE:
-                if (0 != (Socket->SharedData.AsyncEvents & FD_CLOSE) &&
-                    0 == (Socket->SharedData.AsyncDisabledEvents & FD_CLOSE))
-                {
-                    /* Make the Notifcation */
-                    (Upcalls.lpWPUPostMessage)(Socket->SharedData.hWnd,
-                                               Socket->SharedData.wMsg,
-                                               Socket->Handle,
-                                               WSAMAKESELECTREPLY(FD_CLOSE, 0));
-                    /* Disable this event forever; */
-                    Socket->SharedData.AsyncDisabledEvents |= FD_CLOSE;
-                }
-                 break;
-            /* FIXME: Support QOS */
-        }
-    }
-
-    /* Check if there are any events left for us to check */
-    if ((Socket->SharedData.AsyncEvents & (~Socket->SharedData.AsyncDisabledEvents)) == 0 )
-    {
-        return;
-    }
-
-    /* Keep Polling */
-    SockProcessAsyncSelect(Socket, AsyncData);
-    return;
-}
-
-VOID SockProcessAsyncSelect(PSOCKET_INFORMATION Socket, PASYNC_DATA AsyncData)
-{
-
-    ULONG lNetworkEvents;
-    NTSTATUS Status;
-
-    /* Set up the Async Data Event Info */
-    AsyncData->AsyncSelectInfo.Timeout.HighPart = 0x7FFFFFFF;
-    AsyncData->AsyncSelectInfo.Timeout.LowPart = 0xFFFFFFFF;
-    AsyncData->AsyncSelectInfo.HandleCount = 1;
-    AsyncData->AsyncSelectInfo.Exclusive = TRUE;
-    AsyncData->AsyncSelectInfo.Handles[0].Handle = Socket->Handle;
-    AsyncData->AsyncSelectInfo.Handles[0].Events = 0;
-
-    /* Remove unwanted events */
-    lNetworkEvents = Socket->SharedData.AsyncEvents & (~Socket->SharedData.AsyncDisabledEvents);
-
-    /* Set Events to wait for */
-    if (lNetworkEvents & FD_READ)
-    {
-        AsyncData->AsyncSelectInfo.Handles[0].Events |= AFD_EVENT_RECEIVE;
-    }
-
-    if (lNetworkEvents & FD_WRITE)
-    {
-        AsyncData->AsyncSelectInfo.Handles[0].Events |= AFD_EVENT_SEND;
-    }
-
-    if (lNetworkEvents & FD_OOB)
-    {
-        AsyncData->AsyncSelectInfo.Handles[0].Events |= AFD_EVENT_OOB_RECEIVE;
-    }
-
-    if (lNetworkEvents & FD_ACCEPT)
-    {
-        AsyncData->AsyncSelectInfo.Handles[0].Events |= AFD_EVENT_ACCEPT;
-    }
-
-    /* FIXME: THIS IS NOT RIGHT!!! HACK HACK HACK! */
-    if (lNetworkEvents & FD_CONNECT)
-    {
-        AsyncData->AsyncSelectInfo.Handles[0].Events |= AFD_EVENT_CONNECT | AFD_EVENT_CONNECT_FAIL;
-    }
-
-    if (lNetworkEvents & FD_CLOSE)
-    {
-        AsyncData->AsyncSelectInfo.Handles[0].Events |= AFD_EVENT_DISCONNECT | AFD_EVENT_ABORT | AFD_EVENT_CLOSE;
-    }
-
-    if (lNetworkEvents & FD_QOS)
-    {
-        AsyncData->AsyncSelectInfo.Handles[0].Events |= AFD_EVENT_QOS;
-    }
-
-    if (lNetworkEvents & FD_GROUP_QOS)
-    {
-        AsyncData->AsyncSelectInfo.Handles[0].Events |= AFD_EVENT_GROUP_QOS;
-    }
-
-    /* Send IOCTL */
-    Status = NtDeviceIoControlFile (SockAsyncHelperAfdHandle,
-                                    NULL,
-                                    NULL,
-                                    AsyncData,
-                                    &AsyncData->IoStatusBlock,
-                                    IOCTL_AFD_SELECT,
-                                    &AsyncData->AsyncSelectInfo,
-                                    sizeof(AsyncData->AsyncSelectInfo),
-                                    &AsyncData->AsyncSelectInfo,
-                                    sizeof(AsyncData->AsyncSelectInfo));
-
-    /* I/O Manager Won't call the completion routine, let's do it manually */
-    if (NT_SUCCESS(Status))
-    {
-        return;
-    }
-    else
-    {
-        AsyncData->IoStatusBlock.Status = Status;
-        SockAsyncSelectCompletionRoutine(AsyncData, &AsyncData->IoStatusBlock);
-    }
-}
-
-VOID SockProcessQueuedAsyncSelect(PVOID Context, PIO_STATUS_BLOCK IoStatusBlock)
-{
-    PASYNC_DATA AsyncData = Context;
-    BOOL FreeContext = TRUE;
-    PSOCKET_INFORMATION Socket;
-
-    /* Get the Socket */       
-    Socket = AsyncData->ParentSocket;
-
-    /* If someone closed it, stop the function */
-    if (Socket->SharedData.State != SocketClosed)
-    {
-        /* Check if the Sequence Number changed by now, in which case quit */
-        if (AsyncData->SequenceNumber == Socket->SharedData.SequenceNumber)
-        {
-            /* Do the actuall select, if needed */
-            if ((Socket->SharedData.AsyncEvents & (~Socket->SharedData.AsyncDisabledEvents)))
-            {
-                SockProcessAsyncSelect(Socket, AsyncData);
-                FreeContext = FALSE;
-            }
-        }
-    }
-
-    /* Free the Context */
-    if (FreeContext)
-    {
-        HeapFree(GetProcessHeap(), 0, AsyncData);
-    }
-
-    return;
-}
-
-VOID
-SockReenableAsyncSelectEvent (IN PSOCKET_INFORMATION Socket,
-                              IN ULONG Event)
-{
-    PASYNC_DATA AsyncData;
-
-    /* Make sure the event is actually disabled */
-    if (!(Socket->SharedData.AsyncDisabledEvents & Event))
-    {
-        return;
-    }
-
-    /* Re-enable it */
-    Socket->SharedData.AsyncDisabledEvents &= ~Event;
-
-    /* Return if no more events are being polled */
-    if ((Socket->SharedData.AsyncEvents & (~Socket->SharedData.AsyncDisabledEvents)) == 0 )
-    {
-        return;
-    }
-
-    /* Wait on new events */
-    AsyncData = HeapAlloc(GetProcessHeap(), 0, sizeof(ASYNC_DATA));
-    if (!AsyncData) return;
-
-    /* Create the Asynch Thread if Needed */  
-    SockCreateOrReferenceAsyncThread();
-
-    /* Increase the sequence number to stop anything else */
-    Socket->SharedData.SequenceNumber++;
-
-    /* Set up the Async Data */
-    AsyncData->ParentSocket = Socket;
-    AsyncData->SequenceNumber = Socket->SharedData.SequenceNumber;
-
-    /* Begin Async Select by using I/O Completion */
-    NtSetIoCompletion(SockAsyncCompletionPort,
-                     (PVOID)&SockProcessQueuedAsyncSelect,
-                     AsyncData,
-                     0,
-                     0);
-
-    /* All done */
-    return;
-}
-
-BOOL
-WINAPI
-DllMain(HANDLE hInstDll,
-        ULONG dwReason,
-        PVOID Reserved)
-{
-
-    switch (dwReason)
-    {
-    case DLL_PROCESS_ATTACH:
-
-        AFD_DbgPrint(MAX_TRACE, ("Loading MSAFD.DLL \n"));
-
-        /* Don't need thread attach notifications
-        so disable them to improve performance */
-        DisableThreadLibraryCalls(hInstDll);
-
-        /* List of DLL Helpers */
-        InitializeListHead(&SockHelpersListHead);
-
-        /* Heap to use when allocating */
-        GlobalHeap = GetProcessHeap();
-
-        /* Allocate Heap for 1024 Sockets, can be expanded later */
-        Sockets = HeapAlloc(GetProcessHeap(), 0, sizeof(PSOCKET_INFORMATION) * 1024);
-        if (!Sockets) return FALSE;
-
-        AFD_DbgPrint(MAX_TRACE, ("MSAFD.DLL has been loaded\n"));
-
-        break;
-
-    case DLL_THREAD_ATTACH:
-        break;
-
-    case DLL_THREAD_DETACH:
-        break;
-
-    case DLL_PROCESS_DETACH:
-        break;
-    }
-
-    AFD_DbgPrint(MAX_TRACE, ("DllMain of msafd.dll (leaving)\n"));
-
-    return TRUE;
-}
-
-/* EOF */
-
-
diff --git a/dll/win32/msafd/misc/event.c b/dll/win32/msafd/misc/event.c
deleted file mode 100644 (file)
index 9a49e31..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * COPYRIGHT:   See COPYING in the top level directory
- * PROJECT:     ReactOS Ancillary Function Driver DLL
- * FILE:        misc/event.c
- * PURPOSE:     Event handling
- * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
- *                             Alex Ionescu (alex@relsoft.net)
- * REVISIONS:
- *   CSH 15/06-2001 Created
- *      Alex 16/07/2004 - Complete Rewrite
- */
-
-#include <msafd.h>
-
-#include <debug.h>
-
-int 
-WSPAPI 
-WSPEventSelect(
-       SOCKET Handle, 
-       WSAEVENT hEventObject, 
-       long lNetworkEvents, 
-       LPINT lpErrno)
-{
-       IO_STATUS_BLOCK                         IOSB;
-       AFD_EVENT_SELECT_INFO           EventSelectInfo;
-       PSOCKET_INFORMATION                     Socket = NULL;
-       NTSTATUS                                        Status;
-       ULONG                                           BlockMode;
-       HANDLE                                  SockEvent;
-
-       Status = NtCreateEvent( &SockEvent, GENERIC_READ | GENERIC_WRITE,
-                               NULL, 1, FALSE );
-
-       if( !NT_SUCCESS(Status) ) return -1;
-
-       /* Get the Socket Structure associate to this Socket*/
-       Socket = GetSocketStructure(Handle);
-
-       /* Set Socket to Non-Blocking */
-       BlockMode = 1;
-       SetSocketInformation(Socket, AFD_INFO_BLOCKING_MODE, &BlockMode, NULL);
-       Socket->SharedData.NonBlocking = TRUE;
-
-       /* Deactivate Async Select if there is one */
-       if (Socket->EventObject) {
-               Socket->SharedData.hWnd = NULL;
-               Socket->SharedData.wMsg = 0;
-               Socket->SharedData.AsyncEvents = 0;
-               Socket->SharedData.SequenceNumber++; // This will kill Async Select after the next completion
-       }
-
-       /* Set Structure Info */
-       EventSelectInfo.EventObject = hEventObject;
-       EventSelectInfo.Events = 0;
-
-       /* Set Events to wait for */
-       if (lNetworkEvents & FD_READ) {
-               EventSelectInfo.Events |= AFD_EVENT_RECEIVE;
-    }
-
-    if (lNetworkEvents & FD_WRITE) {
-       EventSelectInfo.Events |= AFD_EVENT_SEND;
-    }
-
-    if (lNetworkEvents & FD_OOB) {
-        EventSelectInfo.Events |= AFD_EVENT_OOB_RECEIVE;
-    }
-
-    if (lNetworkEvents & FD_ACCEPT) {
-       EventSelectInfo.Events |= AFD_EVENT_ACCEPT;
-    }
-
-    if (lNetworkEvents & FD_CONNECT) {
-        EventSelectInfo.Events |= AFD_EVENT_CONNECT | AFD_EVENT_CONNECT_FAIL;
-    }
-
-    if (lNetworkEvents & FD_CLOSE) {
-       EventSelectInfo.Events |= AFD_EVENT_DISCONNECT | AFD_EVENT_ABORT | AFD_EVENT_CLOSE;
-    }
-
-    if (lNetworkEvents & FD_QOS) {
-       EventSelectInfo.Events |= AFD_EVENT_QOS;
-    }
-
-    if (lNetworkEvents & FD_GROUP_QOS) {
-       EventSelectInfo.Events |= AFD_EVENT_GROUP_QOS;
-    }
-
-    /* Send IOCTL */
-    Status = NtDeviceIoControlFile((HANDLE)Handle,
-                                  SockEvent,
-                                  NULL,
-                                  NULL,
-                                  &IOSB,
-                                  IOCTL_AFD_EVENT_SELECT,
-                                  &EventSelectInfo,
-                                  sizeof(EventSelectInfo),
-                                  NULL,
-                                  0);
-
-    AFD_DbgPrint(MID_TRACE,("AFD: %x\n", Status));
-
-    /* Wait for return */
-    if (Status == STATUS_PENDING) {
-       WaitForSingleObject(SockEvent, INFINITE);
-    }
-
-    AFD_DbgPrint(MID_TRACE,("Waited\n"));
-
-    NtClose( SockEvent );
-
-    AFD_DbgPrint(MID_TRACE,("Closed event\n"));
-
-    /* Set Socket Data*/
-    Socket->EventObject = hEventObject;
-    Socket->NetworkEvents = lNetworkEvents;
-
-    AFD_DbgPrint(MID_TRACE,("Leaving\n"));
-
-    return 0;
-}
-
-
-INT
-WSPAPI
-WSPEnumNetworkEvents(
-  IN  SOCKET Handle, 
-  IN  WSAEVENT hEventObject, 
-  OUT LPWSANETWORKEVENTS lpNetworkEvents, 
-  OUT LPINT lpErrno)
-{
-    AFD_ENUM_NETWORK_EVENTS_INFO EnumReq;
-    IO_STATUS_BLOCK                            IOSB;
-    PSOCKET_INFORMATION                        Socket = NULL;
-    NTSTATUS                                   Status;
-    HANDLE                                  SockEvent;
-
-    AFD_DbgPrint(MID_TRACE,("Called (lpNetworkEvents %x)\n", lpNetworkEvents));
-
-    Status = NtCreateEvent( &SockEvent, GENERIC_READ | GENERIC_WRITE,
-                           NULL, 1, FALSE );
-
-    if( !NT_SUCCESS(Status) ) {
-       AFD_DbgPrint(MID_TRACE,("Could not make an event %x\n", Status));
-       return -1;
-    }
-
-    /* Get the Socket Structure associate to this Socket*/
-    Socket = GetSocketStructure(Handle);
-
-    EnumReq.Event = hEventObject;
-
-    /* Send IOCTL */
-    Status = NtDeviceIoControlFile((HANDLE)Handle,
-                                  SockEvent,
-                                  NULL,
-                                  NULL,
-                                  &IOSB,
-                                  IOCTL_AFD_ENUM_NETWORK_EVENTS,
-                                  &EnumReq,
-                                  sizeof(EnumReq),
-                                  NULL,
-                                  0);
-
-    AFD_DbgPrint(MID_TRACE,("AFD: %x\n", Status));
-
-    /* Wait for return */
-    if (Status == STATUS_PENDING) {
-       WaitForSingleObject(SockEvent, INFINITE);
-       Status = STATUS_SUCCESS;
-    }
-
-    AFD_DbgPrint(MID_TRACE,("Waited\n"));
-
-    NtClose( SockEvent );
-
-    AFD_DbgPrint(MID_TRACE,("Closed event\n"));
-    AFD_DbgPrint(MID_TRACE,("About to touch struct at %x (%d)\n", 
-                           lpNetworkEvents, sizeof(*lpNetworkEvents)));
-
-    lpNetworkEvents->lNetworkEvents = 0;
-
-    AFD_DbgPrint(MID_TRACE,("Zeroed struct\n"));
-
-    /* Set Events to wait for */
-    if (EnumReq.PollEvents & AFD_EVENT_RECEIVE) {
-       lpNetworkEvents->lNetworkEvents |= FD_READ;
-    }
-
-    if (EnumReq.PollEvents & AFD_EVENT_SEND) {
-       lpNetworkEvents->lNetworkEvents |= FD_WRITE;
-    }
-
-    if (EnumReq.PollEvents & AFD_EVENT_OOB_RECEIVE) {
-        lpNetworkEvents->lNetworkEvents |= FD_OOB;
-    }
-
-    if (EnumReq.PollEvents & AFD_EVENT_ACCEPT) {
-       lpNetworkEvents->lNetworkEvents |= FD_ACCEPT;
-    }
-
-    if (EnumReq.PollEvents & 
-       (AFD_EVENT_CONNECT | AFD_EVENT_CONNECT_FAIL)) {
-        lpNetworkEvents->lNetworkEvents |= FD_CONNECT;
-    }
-
-    if (EnumReq.PollEvents & 
-       (AFD_EVENT_DISCONNECT | AFD_EVENT_ABORT | AFD_EVENT_CLOSE)) {
-       lpNetworkEvents->lNetworkEvents |= FD_CLOSE;
-    }
-
-    if (EnumReq.PollEvents & AFD_EVENT_QOS) {
-       lpNetworkEvents->lNetworkEvents |= FD_QOS;
-    }
-
-    if (EnumReq.PollEvents & AFD_EVENT_GROUP_QOS) {
-       lpNetworkEvents->lNetworkEvents |= FD_GROUP_QOS;
-    }
-
-    if( NT_SUCCESS(Status) ) *lpErrno = 0;
-    else *lpErrno = WSAEINVAL;
-
-    AFD_DbgPrint(MID_TRACE,("Leaving\n"));
-
-    return 0;
-}
-
-/* EOF */
diff --git a/dll/win32/msafd/misc/helpers.c b/dll/win32/msafd/misc/helpers.c
deleted file mode 100644 (file)
index 89b1d6a..0000000
+++ /dev/null
@@ -1,520 +0,0 @@
-/*
- * COPYRIGHT:   See COPYING in the top level directory
- * PROJECT:     ReactOS Ancillary Function Driver DLL
- * FILE:        misc/helpers.c
- * PURPOSE:     Helper DLL management
- * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
- *                             Alex Ionescu (alex@relsoft.net)
- * REVISIONS:
- *   CSH 01/09-2000 Created
- *      Alex 16/07/2004 - Complete Rewrite
- */
-#include <msafd.h>
-
-#include <debug.h>
-
-CRITICAL_SECTION HelperDLLDatabaseLock;
-LIST_ENTRY HelperDLLDatabaseListHead;
-
-
-INT 
-SockGetTdiName(
-    PINT AddressFamily, 
-    PINT SocketType, 
-    PINT Protocol, 
-    GROUP Group, 
-    DWORD Flags, 
-    PUNICODE_STRING TransportName, 
-    PVOID *HelperDllContext, 
-    PHELPER_DATA *HelperDllData, 
-    PDWORD Events)
-{
-    PHELPER_DATA        HelperData;
-    PWSTR               Transports;
-    PWSTR               Transport;
-    PWINSOCK_MAPPING   Mapping;
-    PLIST_ENTRY                Helpers;
-    INT                 Status;
-
-    AFD_DbgPrint(MID_TRACE,("Called\n"));
-
-    /* Check in our Current Loaded Helpers */
-    for (Helpers = SockHelpersListHead.Flink;
-         Helpers != &SockHelpersListHead; 
-         Helpers = Helpers->Flink ) {
-
-        HelperData = CONTAINING_RECORD(Helpers, HELPER_DATA, Helpers);
-
-        /* See if this Mapping works for us */
-        if (SockIsTripleInMapping (HelperData->Mapping, 
-                                   *AddressFamily, 
-                                   *SocketType, 
-                                   *Protocol)) {
-
-            /* Call the Helper Dll function get the Transport Name */
-            if (HelperData->WSHOpenSocket2 == NULL ) {
-
-                /* DLL Doesn't support WSHOpenSocket2, call the old one */
-                HelperData->WSHOpenSocket(AddressFamily,
-                                          SocketType,
-                                          Protocol,
-                                          TransportName,
-                                          HelperDllContext,
-                                          Events
-                                          );
-            } else {
-                HelperData->WSHOpenSocket2(AddressFamily,
-                                           SocketType,
-                                           Protocol,
-                                           Group,
-                                           Flags,
-                                           TransportName,
-                                           HelperDllContext,
-                                           Events
-                                           );
-            }
-
-            /* Return the Helper Pointers */
-            *HelperDllData = HelperData;
-            return NO_ERROR;
-        }
-    }
-
-    /* Get the Transports available */
-    Status = SockLoadTransportList(&Transports);
-
-    /* Check for error */
-    if (Status) {
-        AFD_DbgPrint(MIN_TRACE, ("Can't get transport list\n"));
-        return Status;
-    }
-    
-    /* Loop through each transport until we find one that can satisfy us */
-    for (Transport = Transports; 
-         *Transports != 0; 
-         Transport += wcslen(Transport) + 1) {
-       AFD_DbgPrint(MID_TRACE, ("Transport: %S\n", Transports));
-
-        /* See what mapping this Transport supports */
-        Status = SockLoadTransportMapping(Transport, &Mapping);
-        
-        /* Check for error */
-        if (Status) {
-            AFD_DbgPrint(MIN_TRACE, ("Can't get mapping\n"));
-            HeapFree(GlobalHeap, 0, Transports);
-            return Status;
-        }
-
-        /* See if this Mapping works for us */
-        if (SockIsTripleInMapping(Mapping, *AddressFamily, *SocketType, *Protocol)) {
-
-            /* It does, so load the DLL associated with it */
-            Status = SockLoadHelperDll(Transport, Mapping, &HelperData);
-
-            /* Check for error */
-            if (Status) {
-                AFD_DbgPrint(MIN_TRACE, ("Can't load helper DLL\n"));
-                HeapFree(GlobalHeap, 0, Transports);
-                HeapFree(GlobalHeap, 0, Mapping);
-                return Status;
-            }
-
-            /* Call the Helper Dll function get the Transport Name */
-            if (HelperData->WSHOpenSocket2 == NULL) {
-                /* DLL Doesn't support WSHOpenSocket2, call the old one */
-                HelperData->WSHOpenSocket(AddressFamily,
-                                          SocketType,
-                                          Protocol,
-                                          TransportName,
-                                          HelperDllContext,
-                                          Events
-                                          );
-            } else {
-                HelperData->WSHOpenSocket2(AddressFamily,
-                                           SocketType,
-                                           Protocol,
-                                           Group,
-                                           Flags,
-                                           TransportName,
-                                           HelperDllContext,
-                                           Events
-                                           );
-            }
-
-            /* Return the Helper Pointers */
-            *HelperDllData = HelperData;
-           /* We actually cache these ... the can't be freed yet */
-            /*HeapFree(GlobalHeap, 0, Transports);*/
-            /*HeapFree(GlobalHeap, 0, Mapping);*/
-            return NO_ERROR;
-        }
-        
-        HeapFree(GlobalHeap, 0, Mapping);
-    }
-    HeapFree(GlobalHeap, 0, Transports);
-    return WSAEINVAL;
-}
-
-INT
-SockLoadTransportMapping(
-    PWSTR TransportName, 
-    PWINSOCK_MAPPING *Mapping)
-{
-    PWSTR               TransportKey;
-    HKEY                KeyHandle;
-    ULONG               MappingSize;
-    LONG                Status;
-
-    AFD_DbgPrint(MID_TRACE,("Called: TransportName %ws\n", TransportName));
-
-    /* Allocate a Buffer */
-    TransportKey = HeapAlloc(GlobalHeap, 0, (54 + wcslen(TransportName)) * sizeof(WCHAR));
-
-    /* Check for error */
-    if (TransportKey == NULL) {
-        AFD_DbgPrint(MIN_TRACE, ("Buffer allocation failed\n"));
-        return WSAEINVAL;
-    }
-
-    /* Generate the right key name */
-    wcscpy(TransportKey, L"System\\CurrentControlSet\\Services\\");
-    wcscat(TransportKey, TransportName);
-    wcscat(TransportKey, L"\\Parameters\\Winsock");
-
-    /* Open the Key */
-    Status = RegOpenKeyExW(HKEY_LOCAL_MACHINE, TransportKey, 0, KEY_READ, &KeyHandle);
-
-    /* We don't need the Transport Key anymore */
-    HeapFree(GlobalHeap, 0, TransportKey);
-
-    /* Check for error */
-    if (Status) {
-        AFD_DbgPrint(MIN_TRACE, ("Error reading transport mapping registry\n"));
-        return WSAEINVAL;
-    }
-
-    /* Find out how much space we need for the Mapping */
-    Status = RegQueryValueExW(KeyHandle, L"Mapping", NULL, NULL, NULL, &MappingSize);
-
-    /* Check for error */
-    if (Status) {
-        AFD_DbgPrint(MIN_TRACE, ("Error reading transport mapping registry\n"));
-        return WSAEINVAL;
-    }
-
-    /* Allocate Memory for the Mapping */
-    *Mapping = HeapAlloc(GlobalHeap, 0, MappingSize);
-
-    /* Check for error */
-    if (*Mapping == NULL) {
-        AFD_DbgPrint(MIN_TRACE, ("Buffer allocation failed\n"));
-        return WSAEINVAL;
-    }
-
-    /* Read the Mapping */
-    Status = RegQueryValueExW(KeyHandle, L"Mapping", NULL, NULL, (LPBYTE)*Mapping, &MappingSize);
-    
-    /* Check for error */
-    if (Status) {
-        AFD_DbgPrint(MIN_TRACE, ("Error reading transport mapping registry\n"));
-        HeapFree(GlobalHeap, 0, *Mapping);
-        return WSAEINVAL;
-    }
-
-    /* Close key and return */
-    RegCloseKey(KeyHandle);
-    return 0;
-}
-
-INT 
-SockLoadTransportList(
-    PWSTR *TransportList)
-{
-    ULONG      TransportListSize;
-    HKEY       KeyHandle;
-    LONG       Status;
-
-    AFD_DbgPrint(MID_TRACE,("Called\n"));
-    
-    /* Open the Transports Key */
-    Status = RegOpenKeyExW (HKEY_LOCAL_MACHINE,
-                            L"SYSTEM\\CurrentControlSet\\Services\\Winsock\\Parameters",  
-                            0, 
-                            KEY_READ, 
-                            &KeyHandle);
-
-    /* Check for error */
-    if (Status) {
-        AFD_DbgPrint(MIN_TRACE, ("Error reading transport list registry\n"));
-        return WSAEINVAL;
-    }
-    
-    /* Get the Transport List Size */
-    Status = RegQueryValueExW(KeyHandle,
-                              L"Transports",
-                              NULL,
-                              NULL,
-                              NULL,
-                              &TransportListSize);
-
-    /* Check for error */
-    if (Status) {
-        AFD_DbgPrint(MIN_TRACE, ("Error reading transport list registry\n"));
-        return WSAEINVAL;
-    }
-
-    /* Allocate Memory for the Transport List */
-    *TransportList = HeapAlloc(GlobalHeap, 0, TransportListSize);
-
-    /* Check for error */
-    if (*TransportList == NULL) {
-        AFD_DbgPrint(MIN_TRACE, ("Buffer allocation failed\n"));
-        return WSAEINVAL;
-    }
-
-    /* Get the Transports */
-    Status = RegQueryValueExW (KeyHandle, 
-                               L"Transports", 
-                               NULL, 
-                               NULL, 
-                               (LPBYTE)*TransportList, 
-                               &TransportListSize);
-
-    /* Check for error */
-    if (Status) {
-        AFD_DbgPrint(MIN_TRACE, ("Error reading transport list registry\n"));
-        HeapFree(GlobalHeap, 0, *TransportList);
-        return WSAEINVAL;
-    }
-
-    /* Close key and return */
-    RegCloseKey(KeyHandle);
-    return 0;
-}
-
-INT
-SockLoadHelperDll(
-    PWSTR TransportName, 
-    PWINSOCK_MAPPING Mapping, 
-    PHELPER_DATA *HelperDllData)
-{
-    PHELPER_DATA       HelperData;
-    PWSTR               HelperDllName;
-    PWSTR               FullHelperDllName;
-    ULONG               HelperDllNameSize;
-    PWSTR               HelperKey;
-    HKEY                KeyHandle;
-    ULONG               DataSize;
-    LONG                Status;
-    
-    /* Allocate space for the Helper Structure and TransportName */
-    HelperData = HeapAlloc(GlobalHeap, 0, sizeof(*HelperData) + (wcslen(TransportName) + 1) * sizeof(WCHAR));
-
-    /* Check for error */
-    if (HelperData == NULL) {
-        AFD_DbgPrint(MIN_TRACE, ("Buffer allocation failed\n"));
-        return WSAEINVAL;
-    }
-    
-    /* Allocate Space for the Helper DLL Key */
-    HelperKey = HeapAlloc(GlobalHeap, 0, (54 + wcslen(TransportName)) * sizeof(WCHAR));
-       
-    /* Check for error */
-    if (HelperKey == NULL) {
-        AFD_DbgPrint(MIN_TRACE, ("Buffer allocation failed\n"));
-        HeapFree(GlobalHeap, 0, HelperData);
-        return WSAEINVAL;
-    }
-
-    /* Generate the right key name */
-    wcscpy(HelperKey, L"System\\CurrentControlSet\\Services\\");
-    wcscat(HelperKey, TransportName);
-    wcscat(HelperKey, L"\\Parameters\\Winsock");
-
-    /* Open the Key */
-    Status = RegOpenKeyExW(HKEY_LOCAL_MACHINE, HelperKey, 0, KEY_READ, &KeyHandle);
-
-    HeapFree(GlobalHeap, 0, HelperKey);
-
-    /* Check for error */
-    if (Status) {
-        AFD_DbgPrint(MIN_TRACE, ("Error reading helper DLL parameters\n"));
-        HeapFree(GlobalHeap, 0, HelperData);
-        return WSAEINVAL;
-    }
-    
-    /* Read Size of SockAddr Structures */
-    DataSize = sizeof(HelperData->MinWSAddressLength);
-    HelperData->MinWSAddressLength = 16;
-    RegQueryValueExW (KeyHandle, 
-                      L"MinSockaddrLength", 
-                      NULL, 
-                      NULL, 
-                      (LPBYTE)&HelperData->MinWSAddressLength, 
-                      &DataSize);
-    DataSize = sizeof(HelperData->MinWSAddressLength);
-    HelperData->MaxWSAddressLength = 16;
-    RegQueryValueExW (KeyHandle, 
-                      L"MaxSockaddrLength", 
-                      NULL, 
-                      NULL, 
-                      (LPBYTE)&HelperData->MaxWSAddressLength, 
-                      &DataSize);
-
-    /* Size of TDI Structures */
-    HelperData->MinTDIAddressLength = HelperData->MinWSAddressLength + 6;
-    HelperData->MaxTDIAddressLength = HelperData->MaxWSAddressLength + 6;
-    
-    /* Read Delayed Acceptance Setting */
-    DataSize = sizeof(DWORD);
-    HelperData->UseDelayedAcceptance = FALSE;
-    RegQueryValueExW (KeyHandle, 
-                      L"UseDelayedAcceptance", 
-                      NULL, 
-                      NULL, 
-                      (LPBYTE)&HelperData->UseDelayedAcceptance, 
-                      &DataSize);
-
-    /* Allocate Space for the Helper DLL Names */
-    HelperDllName = HeapAlloc(GlobalHeap, 0, 512);
-
-    /* Check for error */
-    if (HelperDllName == NULL) {
-        AFD_DbgPrint(MIN_TRACE, ("Buffer allocation failed\n"));
-        HeapFree(GlobalHeap, 0, HelperData);
-        return WSAEINVAL;
-    }
-
-    FullHelperDllName = HeapAlloc(GlobalHeap, 0, 512);
-       
-    /* Check for error */
-    if (FullHelperDllName == NULL) {
-        AFD_DbgPrint(MIN_TRACE, ("Buffer allocation failed\n"));
-        HeapFree(GlobalHeap, 0, HelperDllName);
-        HeapFree(GlobalHeap, 0, HelperData);
-        return WSAEINVAL;
-    }
-
-    /* Get the name of the Helper DLL*/
-    DataSize = 512;
-    Status = RegQueryValueExW (KeyHandle, 
-                               L"HelperDllName", 
-                               NULL, 
-                               NULL, 
-                               (LPBYTE)HelperDllName, 
-                               &DataSize);
-
-    /* Check for error */
-    if (Status) {
-        AFD_DbgPrint(MIN_TRACE, ("Error reading helper DLL parameters\n"));
-        HeapFree(GlobalHeap, 0, FullHelperDllName);
-        HeapFree(GlobalHeap, 0, HelperDllName);
-        HeapFree(GlobalHeap, 0, HelperData);
-        return WSAEINVAL;
-    }
-
-    /* Get the Full name, expanding Environment Strings */
-    HelperDllNameSize = ExpandEnvironmentStringsW (HelperDllName,
-                                                   FullHelperDllName, 
-                                                   256);
-
-    /* Load the DLL */
-    HelperData->hInstance = LoadLibraryW(FullHelperDllName);
-
-    HeapFree(GlobalHeap, 0, HelperDllName);
-    HeapFree(GlobalHeap, 0, FullHelperDllName);
-
-    if (HelperData->hInstance == NULL) {
-        AFD_DbgPrint(MIN_TRACE, ("Error loading helper DLL\n"));
-        HeapFree(GlobalHeap, 0, HelperData);
-        return WSAEINVAL;
-    }
-
-    /* Close Key */
-    RegCloseKey(KeyHandle);
-
-    /* Get the Pointers to the Helper Routines */
-    HelperData->WSHOpenSocket =        (PWSH_OPEN_SOCKET)
-                                                                       GetProcAddress(HelperData->hInstance,
-                                                                       "WSHOpenSocket");
-    HelperData->WSHOpenSocket2 = (PWSH_OPEN_SOCKET2)
-                                                                       GetProcAddress(HelperData->hInstance,
-                                                                       "WSHOpenSocket2");
-    HelperData->WSHJoinLeaf = (PWSH_JOIN_LEAF)
-                                                               GetProcAddress(HelperData->hInstance,
-                                                               "WSHJoinLeaf");
-    HelperData->WSHNotify = (PWSH_NOTIFY)
-                                                               GetProcAddress(HelperData->hInstance, "WSHNotify");
-    HelperData->WSHGetSocketInformation = (PWSH_GET_SOCKET_INFORMATION)
-                                                                                       GetProcAddress(HelperData->hInstance, 
-                                                                                       "WSHGetSocketInformation");
-    HelperData->WSHSetSocketInformation = (PWSH_SET_SOCKET_INFORMATION)
-                                                                                       GetProcAddress(HelperData->hInstance,
-                                                                                       "WSHSetSocketInformation");
-    HelperData->WSHGetSockaddrType = (PWSH_GET_SOCKADDR_TYPE)
-                                                                               GetProcAddress(HelperData->hInstance,
-                                                                               "WSHGetSockaddrType");
-    HelperData->WSHGetWildcardSockaddr = (PWSH_GET_WILDCARD_SOCKADDR)
-                                                                                       GetProcAddress(HelperData->hInstance,
-                                                                                       "WSHGetWildcardSockaddr");
-    HelperData->WSHGetBroadcastSockaddr = (PWSH_GET_BROADCAST_SOCKADDR)
-                                                                                       GetProcAddress(HelperData->hInstance,
-                                                                                       "WSHGetBroadcastSockaddr");
-    HelperData->WSHAddressToString = (PWSH_ADDRESS_TO_STRING)
-                                                                               GetProcAddress(HelperData->hInstance,
-                                                                               "WSHAddressToString");
-    HelperData->WSHStringToAddress = (PWSH_STRING_TO_ADDRESS)
-                                                                               GetProcAddress(HelperData->hInstance,
-                                                                               "WSHStringToAddress");
-    HelperData->WSHIoctl = (PWSH_IOCTL)
-                                                       GetProcAddress(HelperData->hInstance,
-                                                       "WSHIoctl");
-
-    /* Save the Mapping Structure and transport name */
-    HelperData->Mapping = Mapping;
-    wcscpy(HelperData->TransportName, TransportName);
-
-    /* Increment Reference Count */
-    HelperData->RefCount = 1;
-
-    /* Add it to our list */
-    InsertHeadList(&SockHelpersListHead, &HelperData->Helpers);
-
-    /* Return Pointers */
-    *HelperDllData = HelperData;
-    return 0;
-}
-
-BOOL
-SockIsTripleInMapping(
-    PWINSOCK_MAPPING Mapping, 
-    INT AddressFamily, 
-    INT SocketType, 
-    INT Protocol)
-{
-    /* The Windows version returns more detailed information on which of the 3 parameters failed...we should do this later */
-    ULONG    Row;
-    
-    AFD_DbgPrint(MID_TRACE,("Called, Mapping rows = %d\n", Mapping->Rows));
-
-    /* Loop through Mapping to Find a matching one */
-    for (Row = 0; Row < Mapping->Rows; Row++) {
-       AFD_DbgPrint(MID_TRACE,("Examining: row %d: AF %d type %d proto %d\n",
-                               Row,
-                               (INT)Mapping->Mapping[Row].AddressFamily,
-                               (INT)Mapping->Mapping[Row].SocketType,
-                               (INT)Mapping->Mapping[Row].Protocol));
-
-        /* Check of all three values Match */
-        if (((INT)Mapping->Mapping[Row].AddressFamily == AddressFamily) && 
-            ((INT)Mapping->Mapping[Row].SocketType == SocketType) && 
-            ((INT)Mapping->Mapping[Row].Protocol == Protocol)) {
-           AFD_DbgPrint(MID_TRACE,("Found\n"));
-            return TRUE;
-        }
-    }
-    AFD_DbgPrint(MID_TRACE,("Not found\n"));
-    return FALSE;
-}
-
-/* EOF */
diff --git a/dll/win32/msafd/misc/sndrcv.c b/dll/win32/msafd/misc/sndrcv.c
deleted file mode 100644 (file)
index 212b4fc..0000000
+++ /dev/null
@@ -1,671 +0,0 @@
-/*
- * COPYRIGHT:   See COPYING in the top level directory
- * PROJECT:     ReactOS Ancillary Function Driver DLL
- * FILE:        misc/sndrcv.c
- * PURPOSE:     Send/receive routines
- * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
- *              Alex Ionescu (alex@relsoft.net)
- * REVISIONS:
- *              CSH 01/09-2000 Created
- *              Alex 16/07/2004 - Complete Rewrite
- */
-
-#include <msafd.h>
-
-#include <debug.h>
-
-INT
-WSPAPI
-WSPAsyncSelect(IN  SOCKET Handle,
-               IN  HWND hWnd,
-               IN  UINT wMsg,
-               IN  LONG lEvent,
-               OUT LPINT lpErrno)
-{
-    PSOCKET_INFORMATION Socket = NULL;
-    PASYNC_DATA                 AsyncData;
-    NTSTATUS                    Status;
-    ULONG                       BlockMode;
-
-    /* Get the Socket Structure associated to this Socket */
-    Socket = GetSocketStructure(Handle);
-
-    /* Allocate the Async Data Structure to pass on to the Thread later */
-    AsyncData = HeapAlloc(GetProcessHeap(), 0, sizeof(*AsyncData));
-    if (!AsyncData)
-    {
-        MsafdReturnWithErrno( STATUS_INSUFFICIENT_RESOURCES, lpErrno, 0, NULL );
-        return INVALID_SOCKET;
-    }
-
-    /* Change the Socket to Non Blocking */
-    BlockMode = 1;
-    SetSocketInformation(Socket, AFD_INFO_BLOCKING_MODE, &BlockMode, NULL);
-    Socket->SharedData.NonBlocking = TRUE;
-
-    /* Deactive WSPEventSelect */
-    if (Socket->SharedData.AsyncEvents)
-    {
-        WSPEventSelect(Handle, NULL, 0, NULL);
-    }
-
-    /* Create the Asynch Thread if Needed */  
-    SockCreateOrReferenceAsyncThread();
-
-    /* Open a Handle to AFD's Async Helper */
-    SockGetAsyncSelectHelperAfdHandle();
-
-    /* Store Socket Data */
-    Socket->SharedData.hWnd = hWnd;
-    Socket->SharedData.wMsg = wMsg;
-    Socket->SharedData.AsyncEvents = lEvent;
-    Socket->SharedData.AsyncDisabledEvents = 0;
-    Socket->SharedData.SequenceNumber++;
-
-    /* Return if there are no more Events */
-    if ((Socket->SharedData.AsyncEvents & (~Socket->SharedData.AsyncDisabledEvents)) == 0)
-    {
-        HeapFree(GetProcessHeap(), 0, AsyncData);
-        return 0;
-    }
-
-    /* Set up the Async Data */
-    AsyncData->ParentSocket = Socket;
-    AsyncData->SequenceNumber = Socket->SharedData.SequenceNumber;
-
-    /* Begin Async Select by using I/O Completion */
-    Status = NtSetIoCompletion(SockAsyncCompletionPort,
-                               (PVOID)&SockProcessQueuedAsyncSelect,
-                                AsyncData,
-                                0,
-                                0);
-
-    /* Return */
-    return ERROR_SUCCESS;
-}
-
-
-int 
-WSPAPI
-WSPRecv(SOCKET Handle,
-        LPWSABUF lpBuffers,
-        DWORD dwBufferCount,
-        LPDWORD lpNumberOfBytesRead,
-        LPDWORD ReceiveFlags,
-        LPWSAOVERLAPPED lpOverlapped,
-        LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
-        LPWSATHREADID lpThreadId,
-        LPINT lpErrno)
-{
-    PIO_STATUS_BLOCK        IOSB;
-    IO_STATUS_BLOCK         DummyIOSB;
-    AFD_RECV_INFO           RecvInfo;
-    NTSTATUS                Status;
-    PVOID                   APCContext;
-    PVOID                   APCFunction;
-    HANDLE                  Event = NULL;
-    HANDLE                  SockEvent;
-    PSOCKET_INFORMATION     Socket;
-
-    AFD_DbgPrint(MID_TRACE,("Called (%x)\n", Handle));
-
-    /* Get the Socket Structure associate to this Socket*/
-    Socket = GetSocketStructure(Handle);
-
-    Status = NtCreateEvent( &SockEvent, GENERIC_READ | GENERIC_WRITE,
-                            NULL, 1, FALSE );
-
-    if( !NT_SUCCESS(Status) )
-        return -1;
-
-    /* Set up the Receive Structure */
-    RecvInfo.BufferArray = (PAFD_WSABUF)lpBuffers;
-    RecvInfo.BufferCount = dwBufferCount;
-    RecvInfo.TdiFlags = 0;
-    RecvInfo.AfdFlags = Socket->SharedData.NonBlocking ? AFD_IMMEDIATE : 0;
-
-    /* Set the TDI Flags */
-    if (*ReceiveFlags == 0)
-    {
-        RecvInfo.TdiFlags |= TDI_RECEIVE_NORMAL;
-    }
-    else
-    {
-        if (*ReceiveFlags & MSG_OOB)
-        {
-            RecvInfo.TdiFlags |= TDI_RECEIVE_EXPEDITED;
-        }
-
-        if (*ReceiveFlags & MSG_PEEK)
-        {
-            RecvInfo.TdiFlags |= TDI_RECEIVE_PEEK;
-        }
-
-        if (*ReceiveFlags & MSG_PARTIAL)
-        {
-            RecvInfo.TdiFlags |= TDI_RECEIVE_PARTIAL;
-        }
-    }
-
-    /* Verifiy if we should use APC */
-
-    if (lpOverlapped == NULL)
-    {
-        /* Not using Overlapped structure, so use normal blocking on event */
-        APCContext = NULL;
-        APCFunction = NULL;
-        Event = SockEvent;
-        IOSB = &DummyIOSB;
-    } 
-    else
-    {
-        if (lpCompletionRoutine == NULL)
-        {
-            /* Using Overlapped Structure, but no Completition Routine, so no need for APC */
-            APCContext = lpOverlapped;
-            APCFunction = NULL;
-            Event = lpOverlapped->hEvent;
-        }
-        else
-        {
-            /* Using Overlapped Structure and a Completition Routine, so use an APC */
-            APCFunction = NULL; // should be a private io completition function inside us
-            APCContext = lpCompletionRoutine;
-            RecvInfo.AfdFlags |= AFD_SKIP_FIO;
-        }
-
-        IOSB = (PIO_STATUS_BLOCK)&lpOverlapped->Internal;
-        RecvInfo.AfdFlags |= AFD_OVERLAPPED;
-    }
-
-    IOSB->Status = STATUS_PENDING;
-
-    /* Send IOCTL */
-    Status = NtDeviceIoControlFile((HANDLE)Handle,
-        Event ? Event : SockEvent,
-        APCFunction,
-        APCContext,
-        IOSB,
-        IOCTL_AFD_RECV,
-        &RecvInfo,
-        sizeof(RecvInfo),
-        NULL,
-        0);
-
-    /* Wait for completition of not overlapped */
-    if (Status == STATUS_PENDING && lpOverlapped == NULL)
-    {
-        /* It's up to the protocol to time out recv.  We must wait
-         * until the protocol decides it's had enough.
-         */
-        WaitForSingleObject(SockEvent, INFINITE);
-        Status = IOSB->Status;
-    }
-
-    NtClose( SockEvent );
-
-    AFD_DbgPrint(MID_TRACE,("Status %x Information %d\n", Status, IOSB->Information));
-
-    /* Return the Flags */
-    *ReceiveFlags = 0;
-
-    switch (Status)
-    {
-        case STATUS_RECEIVE_EXPEDITED:
-            *ReceiveFlags = MSG_OOB;
-            break;
-        case STATUS_RECEIVE_PARTIAL_EXPEDITED: 
-            *ReceiveFlags = MSG_PARTIAL | MSG_OOB;
-            break;
-        case STATUS_RECEIVE_PARTIAL:
-            *ReceiveFlags = MSG_PARTIAL;
-            break;
-    }
-
-    /* Re-enable Async Event */
-    if (*ReceiveFlags == MSG_OOB)
-    {
-        SockReenableAsyncSelectEvent(Socket, FD_OOB);
-    }
-    else
-    {
-        SockReenableAsyncSelectEvent(Socket, FD_READ);
-    }
-
-    return MsafdReturnWithErrno ( Status, lpErrno, IOSB->Information, lpNumberOfBytesRead );
-}
-
-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 )
-{
-    PIO_STATUS_BLOCK            IOSB;
-    IO_STATUS_BLOCK             DummyIOSB;
-    AFD_RECV_INFO_UDP           RecvInfo;
-    NTSTATUS                    Status;
-    PVOID                       APCContext;
-    PVOID                       APCFunction;
-    HANDLE                      Event = NULL;
-    HANDLE                      SockEvent;
-    PSOCKET_INFORMATION         Socket;
-
-    /* Get the Socket Structure associate to this Socket*/
-    Socket = GetSocketStructure(Handle);
-
-    Status = NtCreateEvent( &SockEvent, GENERIC_READ | GENERIC_WRITE,
-                            NULL, 1, FALSE );
-
-    if( !NT_SUCCESS(Status) )
-        return -1;
-
-    /* Set up the Receive Structure */
-    RecvInfo.BufferArray = (PAFD_WSABUF)lpBuffers;
-    RecvInfo.BufferCount = dwBufferCount;
-    RecvInfo.TdiFlags = 0;
-    RecvInfo.AfdFlags = Socket->SharedData.NonBlocking ? AFD_IMMEDIATE : 0;
-    RecvInfo.AddressLength = SocketAddressLength;
-    RecvInfo.Address = SocketAddress;
-
-    /* Set the TDI Flags */
-    if (*ReceiveFlags == 0)
-    {
-        RecvInfo.TdiFlags |= TDI_RECEIVE_NORMAL;
-    }
-    else
-    {
-        if (*ReceiveFlags & MSG_OOB) 
-        {
-            RecvInfo.TdiFlags |= TDI_RECEIVE_EXPEDITED;
-        }
-
-        if (*ReceiveFlags & MSG_PEEK)
-        {
-            RecvInfo.TdiFlags |= TDI_RECEIVE_PEEK;
-        }
-
-        if (*ReceiveFlags & MSG_PARTIAL)
-        {
-            RecvInfo.TdiFlags |= TDI_RECEIVE_PARTIAL;
-        }
-    }
-
-    /* Verifiy if we should use APC */
-
-    if (lpOverlapped == NULL) 
-    {
-        /* Not using Overlapped structure, so use normal blocking on event */
-        APCContext = NULL;
-        APCFunction = NULL;
-        Event = SockEvent;
-        IOSB = &DummyIOSB;
-    }
-    else
-    {
-        if (lpCompletionRoutine == NULL)
-        {
-            /* Using Overlapped Structure, but no Completition Routine, so no need for APC */
-            APCContext = lpOverlapped;
-            APCFunction = NULL;
-            Event = lpOverlapped->hEvent;
-        }
-        else
-        {
-            /* Using Overlapped Structure and a Completition Routine, so use an APC */
-            APCFunction = NULL; // should be a private io completition function inside us
-            APCContext = lpCompletionRoutine;
-            RecvInfo.AfdFlags |= AFD_SKIP_FIO;
-        }
-
-        IOSB = (PIO_STATUS_BLOCK)&lpOverlapped->Internal;
-        RecvInfo.AfdFlags |= AFD_OVERLAPPED;
-    }
-
-    IOSB->Status = STATUS_PENDING;
-
-    /* Send IOCTL */
-    Status = NtDeviceIoControlFile((HANDLE)Handle,
-                                    Event ? Event : SockEvent,
-                                    APCFunction,
-                                    APCContext,
-                                    IOSB,
-                                    IOCTL_AFD_RECV_DATAGRAM,
-                                    &RecvInfo,
-                                    sizeof(RecvInfo),
-                                    NULL,
-                                    0);
-
-    /* Wait for completition of not overlapped */
-    if (Status == STATUS_PENDING && lpOverlapped == NULL)
-    {
-        WaitForSingleObject(SockEvent, INFINITE); // BUGBUG, shouldn wait infintely for receive...
-        Status = IOSB->Status;
-    }
-
-    NtClose( SockEvent );
-
-    /* Return the Flags */
-    *ReceiveFlags = 0;
-
-    switch (Status)
-    {
-        case STATUS_RECEIVE_EXPEDITED: *ReceiveFlags = MSG_OOB;
-            break;
-        case STATUS_RECEIVE_PARTIAL_EXPEDITED: 
-            *ReceiveFlags = MSG_PARTIAL | MSG_OOB;
-            break;
-        case STATUS_RECEIVE_PARTIAL:
-            *ReceiveFlags = MSG_PARTIAL;
-            break;
-    }
-
-    /* Re-enable Async Event */
-    SockReenableAsyncSelectEvent(Socket, FD_READ);
-
-    return MsafdReturnWithErrno ( Status, lpErrno, IOSB->Information, lpNumberOfBytesRead );
-}
-
-
-int
-WSPAPI 
-WSPSend(SOCKET Handle,
-        LPWSABUF lpBuffers,
-        DWORD dwBufferCount,
-        LPDWORD lpNumberOfBytesSent,
-        DWORD iFlags,
-        LPWSAOVERLAPPED lpOverlapped,
-        LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
-        LPWSATHREADID lpThreadId,
-        LPINT lpErrno)
-{
-    PIO_STATUS_BLOCK        IOSB;
-    IO_STATUS_BLOCK         DummyIOSB;
-    AFD_SEND_INFO           SendInfo;
-    NTSTATUS                Status;
-    PVOID                   APCContext;
-    PVOID                   APCFunction;
-    HANDLE                  Event = NULL;
-    HANDLE                  SockEvent;
-    PSOCKET_INFORMATION     Socket;
-
-    /* Get the Socket Structure associate to this Socket*/
-    Socket = GetSocketStructure(Handle);
-
-    Status = NtCreateEvent( &SockEvent, GENERIC_READ | GENERIC_WRITE,
-                            NULL, 1, FALSE );
-
-    if( !NT_SUCCESS(Status) )
-        return -1;
-
-    AFD_DbgPrint(MID_TRACE,("Called\n"));
-
-    /* Set up the Send Structure */
-    SendInfo.BufferArray = (PAFD_WSABUF)lpBuffers;
-    SendInfo.BufferCount = dwBufferCount;
-    SendInfo.TdiFlags = 0;
-    SendInfo.AfdFlags = Socket->SharedData.NonBlocking ? AFD_IMMEDIATE : 0;
-
-    /* Set the TDI Flags */
-    if (iFlags)
-    {
-        if (iFlags & MSG_OOB)
-        {
-            SendInfo.TdiFlags |= TDI_SEND_EXPEDITED;
-        }
-        if (iFlags & MSG_PARTIAL)
-        {
-            SendInfo.TdiFlags |= TDI_SEND_PARTIAL;
-        }
-    }
-
-    /* Verifiy if we should use APC */
-    if (lpOverlapped == NULL)
-    {
-        /* Not using Overlapped structure, so use normal blocking on event */
-        APCContext = NULL;
-        APCFunction = NULL;
-        Event = SockEvent;
-        IOSB = &DummyIOSB;
-    }
-    else
-    {
-        if (lpCompletionRoutine == NULL)
-        {
-            /* Using Overlapped Structure, but no Completition Routine, so no need for APC */
-            APCContext = lpOverlapped;
-            APCFunction = NULL;
-            Event = lpOverlapped->hEvent;
-        }
-        else
-        {
-            /* Using Overlapped Structure and a Completition Routine, so use an APC */
-            APCFunction = NULL; // should be a private io completition function inside us
-            APCContext = lpCompletionRoutine;
-            SendInfo.AfdFlags |= AFD_SKIP_FIO;
-        }
-
-        IOSB = (PIO_STATUS_BLOCK)&lpOverlapped->Internal;
-        SendInfo.AfdFlags |= AFD_OVERLAPPED;
-    }
-
-    IOSB->Status = STATUS_PENDING;
-
-    /* Send IOCTL */
-    Status = NtDeviceIoControlFile((HANDLE)Handle,
-                                    Event ? Event : SockEvent,
-                                    APCFunction,
-                                    APCContext,
-                                    IOSB,
-                                    IOCTL_AFD_SEND,
-                                    &SendInfo,
-                                    sizeof(SendInfo),
-                                    NULL,
-                                    0);
-
-    /* Wait for completition of not overlapped */
-    if (Status == STATUS_PENDING && lpOverlapped == NULL)
-    {
-        WaitForSingleObject(SockEvent, INFINITE); // BUGBUG, shouldn wait infintely for send...
-        Status = IOSB->Status;
-    }
-
-    NtClose( SockEvent );
-
-    if (Status == STATUS_PENDING)
-    {
-        AFD_DbgPrint(MID_TRACE,("Leaving (Pending)\n"));
-        return WSA_IO_PENDING;
-    }
-
-    /* Re-enable Async Event */
-    SockReenableAsyncSelectEvent(Socket, FD_WRITE);
-
-    AFD_DbgPrint(MID_TRACE,("Leaving (Success, %d)\n", IOSB->Information));
-
-    return MsafdReturnWithErrno( Status, lpErrno, IOSB->Information, lpNumberOfBytesSent );
-}
-
-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)
-{
-    PIO_STATUS_BLOCK        IOSB;
-    IO_STATUS_BLOCK         DummyIOSB;
-    AFD_SEND_INFO_UDP       SendInfo;
-    NTSTATUS                Status;
-    PVOID                   APCContext;
-    PVOID                   APCFunction;
-    HANDLE                  Event = NULL;
-    PTRANSPORT_ADDRESS      RemoteAddress;
-    PSOCKADDR               BindAddress = NULL;
-    INT                     BindAddressLength;
-    HANDLE                  SockEvent;
-    PSOCKET_INFORMATION     Socket;
-
-    /* Get the Socket Structure associate to this Socket */
-    Socket = GetSocketStructure(Handle);
-
-    /* Bind us First */
-    if (Socket->SharedData.State == SocketOpen)
-    {
-        /* Get the Wildcard Address */
-        BindAddressLength = Socket->HelperData->MaxWSAddressLength;
-        BindAddress = HeapAlloc(GlobalHeap, 0, BindAddressLength);
-        if (!BindAddress)
-        {
-            MsafdReturnWithErrno(STATUS_INSUFFICIENT_RESOURCES, lpErrno, 0, NULL);
-            return INVALID_SOCKET;
-        }
-
-        Socket->HelperData->WSHGetWildcardSockaddr(Socket->HelperContext,
-                                                   BindAddress,
-                                                   &BindAddressLength);
-        /* Bind it */
-        WSPBind(Handle, BindAddress, BindAddressLength, NULL);
-    }
-
-    RemoteAddress = HeapAlloc(GlobalHeap, 0, 0x6 + SocketAddressLength);
-    if (!RemoteAddress)
-    {
-        if (BindAddress != NULL)
-        {
-            HeapFree(GlobalHeap, 0, BindAddress);
-        }
-        return MsafdReturnWithErrno(STATUS_INSUFFICIENT_RESOURCES, lpErrno, 0, NULL);
-    }
-
-    Status = NtCreateEvent(&SockEvent,
-                           GENERIC_READ | GENERIC_WRITE,
-                           NULL, 1, FALSE);
-
-    if (!NT_SUCCESS(Status))
-    {
-        HeapFree(GlobalHeap, 0, RemoteAddress);
-        if (BindAddress != NULL)
-        {
-            HeapFree(GlobalHeap, 0, BindAddress);
-        }
-        return SOCKET_ERROR;
-    }
-
-    /* Set up Address in TDI Format */
-    RemoteAddress->TAAddressCount = 1;
-    RemoteAddress->Address[0].AddressLength = SocketAddressLength - sizeof(SocketAddress->sa_family);
-    RtlCopyMemory(&RemoteAddress->Address[0].AddressType, SocketAddress, SocketAddressLength);
-
-    /* Set up Structure */
-    SendInfo.BufferArray = (PAFD_WSABUF)lpBuffers;
-    SendInfo.AfdFlags = Socket->SharedData.NonBlocking ? AFD_IMMEDIATE : 0;
-    SendInfo.BufferCount = dwBufferCount;
-    SendInfo.TdiConnection.RemoteAddress = RemoteAddress;
-    SendInfo.TdiConnection.RemoteAddressLength = Socket->HelperData->MaxTDIAddressLength;
-
-    /* Verifiy if we should use APC */
-    if (lpOverlapped == NULL)
-    {
-        /* Not using Overlapped structure, so use normal blocking on event */
-        APCContext = NULL;
-        APCFunction = NULL;
-        Event = SockEvent;
-        IOSB = &DummyIOSB;
-    }
-    else
-    {
-        if (lpCompletionRoutine == NULL)
-        {
-            /* Using Overlapped Structure, but no Completition Routine, so no need for APC */
-            APCContext = lpOverlapped;
-            APCFunction = NULL;
-            Event = lpOverlapped->hEvent;
-        }
-        else
-        {
-            /* Using Overlapped Structure and a Completition Routine, so use an APC */
-            /* Should be a private io completition function inside us */
-            APCFunction = NULL;
-            APCContext = lpCompletionRoutine;
-            SendInfo.AfdFlags |= AFD_SKIP_FIO;
-        }
-
-        IOSB = (PIO_STATUS_BLOCK)&lpOverlapped->Internal;
-        SendInfo.AfdFlags |= AFD_OVERLAPPED;
-    }
-
-    /* Send IOCTL */
-    Status = NtDeviceIoControlFile((HANDLE)Handle,
-                                   Event ? Event : SockEvent,
-                                   APCFunction,
-                                   APCContext,
-                                   IOSB,
-                                   IOCTL_AFD_SEND_DATAGRAM,
-                                   &SendInfo,
-                                   sizeof(SendInfo),
-                                   NULL,
-                                   0);
-
-    /* Wait for completition of not overlapped */
-    if (Status == STATUS_PENDING && lpOverlapped == NULL)
-    {
-        /* BUGBUG, shouldn't wait infintely for send... */
-        WaitForSingleObject(SockEvent, INFINITE);
-        Status = IOSB->Status;
-    }
-
-    NtClose(SockEvent);
-    HeapFree(GlobalHeap, 0, RemoteAddress);
-    if (BindAddress != NULL)
-    {
-        HeapFree(GlobalHeap, 0, BindAddress);
-    }
-
-    if (Status == STATUS_PENDING)
-        return WSA_IO_PENDING;
-
-    /* Re-enable Async Event */
-    SockReenableAsyncSelectEvent(Socket, FD_WRITE);
-
-    return MsafdReturnWithErrno(Status, lpErrno, IOSB->Information, lpNumberOfBytesSent);
-}
-
-INT
-WSPAPI
-WSPRecvDisconnect(IN  SOCKET s,
-                  OUT LPWSABUF lpInboundDisconnectData,
-                  OUT LPINT lpErrno)
-{
-    UNIMPLEMENTED
-    return 0;
-}
-
-
-
-INT
-WSPAPI
-WSPSendDisconnect(IN  SOCKET s,
-                  IN  LPWSABUF lpOutboundDisconnectData,
-                  OUT LPINT lpErrno)
-{
-    UNIMPLEMENTED
-    return 0;
-}
-
-/* EOF */
diff --git a/dll/win32/msafd/misc/stubs.c b/dll/win32/msafd/misc/stubs.c
deleted file mode 100644 (file)
index 5a9da71..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * COPYRIGHT:   See COPYING in the top level directory
- * PROJECT:     ReactOS Ancillary Function Driver DLL
- * FILE:        misc/stubs.c
- * PURPOSE:     Stubs
- * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
- * REVISIONS:
- *   CSH 01/09-2000 Created
- */
-#include <msafd.h>
-
-#include <debug.h>
-
-INT
-WSPAPI
-WSPAddressToString(
-    IN      LPSOCKADDR lpsaAddress,
-    IN      DWORD dwAddressLength,
-    IN      LPWSAPROTOCOL_INFOW lpProtocolInfo,
-    OUT     LPWSTR lpszAddressString,
-    IN OUT  LPDWORD lpdwAddressStringLength,
-    OUT     LPINT lpErrno)
-{
-    UNIMPLEMENTED
-
-    return 0;
-}
-
-
-INT
-WSPAPI
-WSPCancelBlockingCall(
-    OUT LPINT lpErrno)
-{
-    UNIMPLEMENTED
-
-    return 0;
-}
-
-
-INT
-WSPAPI
-WSPDuplicateSocket(
-    IN  SOCKET s,
-    IN  DWORD dwProcessId,
-    OUT LPWSAPROTOCOL_INFOW lpProtocolInfo,
-    OUT LPINT lpErrno)
-{
-    UNIMPLEMENTED
-
-    return 0;
-}
-
-
-BOOL
-WSPAPI
-WSPGetOverlappedResult(
-    IN  SOCKET s,
-    IN  LPWSAOVERLAPPED lpOverlapped,
-    OUT LPDWORD lpcbTransfer,
-    IN  BOOL fWait,
-    OUT LPDWORD lpdwFlags,
-    OUT LPINT lpErrno)
-{
-    UNIMPLEMENTED
-
-    return FALSE;
-}
-
-
-BOOL
-WSPAPI
-WSPGetQOSByName(
-    IN      SOCKET s, 
-    IN OUT  LPWSABUF lpQOSName, 
-    OUT     LPQOS lpQOS, 
-    OUT     LPINT lpErrno)
-{
-    UNIMPLEMENTED
-
-    return FALSE;
-}
-
-
-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)
-{
-    UNIMPLEMENTED
-
-    return (SOCKET)0;
-}
-
-INT
-WSPAPI
-WSPStringToAddress(
-    IN      LPWSTR AddressString,
-    IN      INT AddressFamily,
-    IN      LPWSAPROTOCOL_INFOW lpProtocolInfo,
-    OUT     LPSOCKADDR lpAddress,
-    IN OUT  LPINT lpAddressLength,
-    OUT     LPINT lpErrno)
-{
-    UNIMPLEMENTED
-
-    return 0;
-}
-
-/* EOF */
diff --git a/dll/win32/msafd/msafd.h b/dll/win32/msafd/msafd.h
deleted file mode 100755 (executable)
index fbef176..0000000
+++ /dev/null
@@ -1,475 +0,0 @@
-/*
- * COPYRIGHT:   See COPYING in the top level directory
- * PROJECT:     ReactOS Ancillary Function Driver DLL
- * FILE:        include/msafd.h
- * PURPOSE:     Ancillary Function Driver DLL header
- */
-#ifndef __MSAFD_H
-#define __MSAFD_H
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#define WIN32_NO_STATUS
-#include <winsock2.h>
-#include <windows.h>
-#include <ws2spi.h>
-#define NTOS_MODE_USER
-#include <ndk/ntndk.h>
-
-/* This includes ntsecapi.h so it needs to come after the NDK */
-#include <wsahelp.h>
-#include <tdi.h>
-#include <afd/shared.h>
-#include <helpers.h>
-
-extern HANDLE GlobalHeap;
-extern WSPUPCALLTABLE Upcalls;
-extern LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest;
-extern LIST_ENTRY SockHelpersListHead;
-extern HANDLE SockEvent;
-extern HANDLE SockAsyncCompletionPort;
-extern BOOLEAN SockAsyncSelectCalled;
-
-typedef enum _SOCKET_STATE {
-    SocketOpen,
-    SocketBound,
-    SocketBoundUdp,
-    SocketConnected,
-    SocketClosed
-} SOCKET_STATE, *PSOCKET_STATE;
-
-typedef struct _SOCK_SHARED_INFO {
-    SOCKET_STATE                               State;
-    INT                                                        AddressFamily;
-    INT                                                        SocketType;
-    INT                                                        Protocol;
-    INT                                                        SizeOfLocalAddress;
-    INT                                                        SizeOfRemoteAddress;
-    struct linger                              LingerData;
-    ULONG                                              SendTimeout;
-    ULONG                                              RecvTimeout;
-    ULONG                                              SizeOfRecvBuffer;
-    ULONG                                              SizeOfSendBuffer;
-    struct {
-        BOOLEAN                                        Listening:1;
-        BOOLEAN                                        Broadcast:1;
-        BOOLEAN                                        Debug:1;
-        BOOLEAN                                        OobInline:1;
-        BOOLEAN                                        ReuseAddresses:1;
-        BOOLEAN                                        ExclusiveAddressUse:1;
-        BOOLEAN                                        NonBlocking:1;
-        BOOLEAN                                        DontUseWildcard:1;
-        BOOLEAN                                        ReceiveShutdown:1;
-        BOOLEAN                                        SendShutdown:1;
-        BOOLEAN                                        UseDelayedAcceptance:1;
-               BOOLEAN                                 UseSAN:1;
-    }; // Flags
-    DWORD                                              CreateFlags;
-    DWORD                                              CatalogEntryId;
-    DWORD                                              ServiceFlags1;
-    DWORD                                              ProviderFlags;
-    GROUP                                              GroupID;
-    DWORD                                              GroupType;
-    INT                                                        GroupPriority;
-    INT                                                        SocketLastError;
-    HWND                                               hWnd;
-    LONG                                               Unknown;
-    DWORD                                              SequenceNumber;
-    UINT                                               wMsg;
-    LONG                                               AsyncEvents;
-    LONG                                               AsyncDisabledEvents;
-} SOCK_SHARED_INFO, *PSOCK_SHARED_INFO;
-
-typedef struct _SOCKET_INFORMATION {
-       ULONG RefCount;
-       SOCKET Handle;
-       SOCK_SHARED_INFO SharedData;
-       DWORD HelperEvents;
-       PHELPER_DATA HelperData;
-       PVOID HelperContext;
-       PSOCKADDR LocalAddress;
-       PSOCKADDR RemoteAddress;
-       HANDLE TdiAddressHandle;
-       HANDLE TdiConnectionHandle;
-       PVOID AsyncData;
-       HANDLE EventObject;
-       LONG NetworkEvents;
-       CRITICAL_SECTION Lock;
-       PVOID SanData;
-       BOOL TrySAN;
-       SOCKADDR WSLocalAddress;
-       SOCKADDR WSRemoteAddress;
-} SOCKET_INFORMATION, *PSOCKET_INFORMATION;
-
-
-typedef struct _SOCKET_CONTEXT {
-       SOCK_SHARED_INFO SharedData;
-       ULONG SizeOfHelperData;
-       ULONG Padding;
-       SOCKADDR LocalAddress;
-       SOCKADDR RemoteAddress;
-       /* Plus Helper Data */
-} SOCKET_CONTEXT, *PSOCKET_CONTEXT;
-
-typedef struct _ASYNC_DATA {
-       PSOCKET_INFORMATION ParentSocket;
-       DWORD SequenceNumber;
-       IO_STATUS_BLOCK IoStatusBlock;
-       AFD_POLL_INFO AsyncSelectInfo;
-} ASYNC_DATA, *PASYNC_DATA;
-
-SOCKET
-WSPAPI
-WSPAccept(
-    IN      SOCKET s,
-    OUT     LPSOCKADDR addr,
-    IN OUT  LPINT addrlen,
-    IN      LPCONDITIONPROC lpfnCondition,
-    IN      DWORD dwCallbackData,
-    OUT     LPINT lpErrno);
-
-INT
-WSPAPI
-WSPAddressToString(
-    IN      LPSOCKADDR lpsaAddress,
-    IN      DWORD dwAddressLength,
-    IN      LPWSAPROTOCOL_INFOW lpProtocolInfo,
-    OUT     LPWSTR lpszAddressString,
-    IN OUT  LPDWORD lpdwAddressStringLength,
-    OUT     LPINT lpErrno);
-
-INT
-WSPAPI
-WSPAsyncSelect(
-    IN  SOCKET s, 
-    IN  HWND hWnd, 
-    IN  UINT wMsg, 
-    IN  LONG lEvent, 
-    OUT LPINT lpErrno);
-
-INT
-WSPAPI WSPBind(
-    IN  SOCKET s,
-    IN  CONST SOCKADDR *name, 
-    IN  INT namelen, 
-    OUT LPINT lpErrno);
-
-INT
-WSPAPI
-WSPCancelBlockingCall(
-    OUT LPINT lpErrno);
-
-INT
-WSPAPI
-WSPCleanup(
-    OUT LPINT lpErrno);
-
-INT
-WSPAPI
-WSPCloseSocket(
-    IN SOCKET s,
-    OUT        LPINT lpErrno);
-
-INT
-WSPAPI
-WSPConnect(
-    IN  SOCKET s,
-    IN  CONST SOCKADDR *name,
-    IN  INT namelen,
-    IN  LPWSABUF lpCallerData,
-    OUT LPWSABUF lpCalleeData,
-    IN  LPQOS lpSQOS,
-    IN  LPQOS lpGQOS,
-    OUT LPINT lpErrno);
-
-INT
-WSPAPI
-WSPDuplicateSocket(
-    IN  SOCKET s,
-    IN  DWORD dwProcessId,
-    OUT LPWSAPROTOCOL_INFOW lpProtocolInfo,
-    OUT LPINT lpErrno);
-
-INT
-WSPAPI
-WSPEnumNetworkEvents(
-    IN  SOCKET s, 
-    IN  WSAEVENT hEventObject, 
-    OUT LPWSANETWORKEVENTS lpNetworkEvents, 
-    OUT LPINT lpErrno);
-
-INT
-WSPAPI
-WSPEventSelect(
-    IN  SOCKET s,
-    IN  WSAEVENT hEventObject,
-    IN  LONG lNetworkEvents,
-    OUT LPINT lpErrno);
-
-BOOL
-WSPAPI
-WSPGetOverlappedResult(
-    IN  SOCKET s,
-    IN  LPWSAOVERLAPPED lpOverlapped,
-    OUT LPDWORD lpcbTransfer,
-    IN  BOOL fWait,
-    OUT LPDWORD lpdwFlags,
-    OUT LPINT lpErrno);
-
-INT
-WSPAPI
-WSPGetPeerName(
-    IN      SOCKET s, 
-    OUT     LPSOCKADDR name, 
-    IN OUT  LPINT namelen, 
-    OUT     LPINT lpErrno);
-
-BOOL
-WSPAPI
-WSPGetQOSByName(
-    IN      SOCKET s, 
-    IN OUT  LPWSABUF lpQOSName, 
-    OUT     LPQOS lpQOS, 
-    OUT     LPINT lpErrno);
-
-INT
-WSPAPI
-WSPGetSockName(
-    IN      SOCKET s,
-    OUT     LPSOCKADDR name,
-    IN OUT  LPINT namelen,
-    OUT     LPINT lpErrno);
-
-INT
-WSPAPI
-WSPGetSockOpt(
-    IN      SOCKET s,
-    IN      INT level,
-    IN      INT optname,
-    OUT            CHAR FAR* optval,
-    IN OUT  LPINT optlen,
-    OUT     LPINT lpErrno);
-
-INT
-WSPAPI
-WSPIoctl(
-    IN  SOCKET s,
-    IN  DWORD dwIoControlCode,
-    IN  LPVOID lpvInBuffer,
-    IN  DWORD cbInBuffer,
-    OUT LPVOID lpvOutBuffer,
-    IN  DWORD cbOutBuffer,
-    OUT LPDWORD lpcbBytesReturned,
-    IN  LPWSAOVERLAPPED lpOverlapped,
-    IN  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
-    IN  LPWSATHREADID lpThreadId,
-    OUT LPINT lpErrno);
-
-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);
-
-INT
-WSPAPI
-WSPListen(
-    IN  SOCKET s,
-    IN  INT backlog,
-    OUT LPINT lpErrno);
-
-INT
-WSPAPI
-WSPRecv(
-    IN      SOCKET s,
-    IN OUT  LPWSABUF lpBuffers,
-    IN      DWORD dwBufferCount,
-    OUT     LPDWORD lpNumberOfBytesRecvd,
-    IN OUT  LPDWORD lpFlags,
-    IN      LPWSAOVERLAPPED lpOverlapped,
-    IN      LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
-    IN      LPWSATHREADID lpThreadId,
-    OUT     LPINT lpErrno);
-
-INT
-WSPAPI
-WSPRecvDisconnect(
-    IN  SOCKET s,
-    OUT LPWSABUF lpInboundDisconnectData,
-    OUT LPINT lpErrno);
-
-INT
-WSPAPI
-WSPRecvFrom(
-    IN      SOCKET s,
-    IN OUT  LPWSABUF lpBuffers,
-    IN      DWORD dwBufferCount,
-    OUT     LPDWORD lpNumberOfBytesRecvd,
-    IN OUT  LPDWORD lpFlags,
-    OUT     LPSOCKADDR lpFrom,
-    IN OUT  LPINT lpFromlen,
-    IN      LPWSAOVERLAPPED lpOverlapped,
-    IN      LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
-    IN      LPWSATHREADID lpThreadId,
-    OUT     LPINT lpErrno);
-
-INT
-WSPAPI
-WSPSelect(
-    IN      INT nfds,
-    IN OUT  LPFD_SET readfds,
-    IN OUT  LPFD_SET writefds,
-    IN OUT  LPFD_SET exceptfds,
-    IN      CONST LPTIMEVAL timeout,
-    OUT     LPINT lpErrno);
-
-INT
-WSPAPI
-WSPSend(
-    IN  SOCKET s,
-    IN  LPWSABUF lpBuffers,
-    IN  DWORD dwBufferCount,
-    OUT LPDWORD lpNumberOfBytesSent,
-    IN  DWORD dwFlags,
-    IN  LPWSAOVERLAPPED lpOverlapped,
-    IN  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
-    IN  LPWSATHREADID lpThreadId,
-    OUT LPINT lpErrno);
-
-INT
-WSPAPI
-WSPSendDisconnect(
-    IN  SOCKET s,
-    IN  LPWSABUF lpOutboundDisconnectData,
-    OUT LPINT lpErrno);
-
-INT
-WSPAPI
-WSPSendTo(
-    IN  SOCKET s,
-    IN  LPWSABUF lpBuffers,
-    IN  DWORD dwBufferCount,
-    OUT LPDWORD lpNumberOfBytesSent,
-    IN  DWORD dwFlags,
-    IN  CONST SOCKADDR *lpTo,
-    IN  INT iTolen,
-    IN  LPWSAOVERLAPPED lpOverlapped,
-    IN  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
-    IN  LPWSATHREADID lpThreadId,
-    OUT LPINT lpErrno);
-
-INT
-WSPAPI
-WSPSetSockOpt(
-    IN  SOCKET s,
-    IN  INT level,
-    IN  INT optname,
-    IN  CONST CHAR FAR* optval,
-    IN  INT optlen,
-    OUT LPINT lpErrno);
-
-INT
-WSPAPI
-WSPShutdown(
-    IN  SOCKET s,
-    IN  INT how,
-    OUT LPINT lpErrno);
-
-SOCKET
-WSPAPI
-WSPSocket(
-    IN  INT af,
-    IN  INT type,
-    IN  INT protocol,
-    IN  LPWSAPROTOCOL_INFOW lpProtocolInfo,
-    IN  GROUP g,
-    IN  DWORD dwFlags,
-    OUT LPINT lpErrno);
-
-INT
-WSPAPI
-WSPStringToAddress(
-    IN      LPWSTR AddressString,
-    IN      INT AddressFamily,
-    IN      LPWSAPROTOCOL_INFOW lpProtocolInfo,
-    OUT     LPSOCKADDR lpAddress,
-    IN OUT  LPINT lpAddressLength,
-    OUT     LPINT lpErrno);
-
-
-PSOCKET_INFORMATION GetSocketStructure(
-       SOCKET Handle
-);
-
-VOID DeleteSocketStructure( SOCKET Handle );
-
-int GetSocketInformation(
-       PSOCKET_INFORMATION Socket,
-       ULONG                           AfdInformationClass,
-       PULONG Ulong            OPTIONAL,
-       PLARGE_INTEGER          LargeInteger OPTIONAL
-);
-
-int SetSocketInformation(
-       PSOCKET_INFORMATION Socket,
-       ULONG                           AfdInformationClass,
-       PULONG                          Ulong           OPTIONAL,
-       PLARGE_INTEGER          LargeInteger OPTIONAL
-);
-
-int CreateContext(
-       PSOCKET_INFORMATION Socket
-);
-
-int SockAsyncThread(
-       PVOID ThreadParam
-);
-
-VOID 
-SockProcessAsyncSelect(
-       PSOCKET_INFORMATION Socket,
-       PASYNC_DATA AsyncData
-);
-
-VOID
-SockAsyncSelectCompletionRoutine(
-       PVOID Context,
-       PIO_STATUS_BLOCK IoStatusBlock
-);
-
-BOOLEAN
-SockCreateOrReferenceAsyncThread(
-       VOID
-);
-
-BOOLEAN SockGetAsyncSelectHelperAfdHandle(
-       VOID
-);
-
-VOID SockProcessQueuedAsyncSelect(
-       PVOID Context,
-       PIO_STATUS_BLOCK IoStatusBlock
-);
-
-VOID
-SockReenableAsyncSelectEvent (
-    IN PSOCKET_INFORMATION Socket,
-    IN ULONG Event
-    );
-    
-DWORD MsafdReturnWithErrno( NTSTATUS Status, LPINT Errno, DWORD Received,
-                           LPDWORD ReturnedBytes );
-
-typedef VOID (*PASYNC_COMPLETION_ROUTINE)(PVOID Context, PIO_STATUS_BLOCK IoStatusBlock);
-
-#endif /* __MSAFD_H */
-
-/* EOF */
index bc65712..9747303 100644 (file)
@@ -1,17 +1,4 @@
-<module name="msafd" type="win32dll" baseaddress="${BASEADDRESS_MSAFD}" installbase="system32" installname="msafd.dll" unicode="yes">
+<module name="msafd" type="win32dll" baseaddress="${BASEADDRESS_MSAFD}" entrypoint="0" installbase="system32" installname="msafd.dll" unicode="yes">
        <importlibrary definition="msafd.spec" />
-       <include base="msafd">.</include>
-       <include base="msafd">include</include>
-       <include base="ReactOS">include/reactos/drivers</include>
-       <pch>msafd.h</pch>
-       <library>ntdll</library>
-       <library>advapi32</library>
-       <directory name="misc">
-               <file>dllmain.c</file>
-               <file>event.c</file>
-               <file>helpers.c</file>
-               <file>sndrcv.c</file>
-               <file>stubs.c</file>
-       </directory>
        <file>msafd.rc</file>
 </module>
index cc0ccf9..35d8116 100644 (file)
@@ -1 +1 @@
-@ stdcall WSPStartup (long ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr)
+@ stdcall WSPStartup (long ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr) mswsock.WSPStartup