Author: cgutman Date: Fri Oct 16 06:33:22 2009 New Revision: 43510
URL: http://svn.reactos.org/svn/reactos?rev=43510&view=rev Log: - Add Alex's rasadhlp - It builds on my WC but it may not build on trunk (because of our lacking headers)
Added: trunk/reactos/dll/win32/rasadhlp/ trunk/reactos/dll/win32/rasadhlp/autodial.c (with props) trunk/reactos/dll/win32/rasadhlp/init.c (with props) trunk/reactos/dll/win32/rasadhlp/precomp.h (with props) trunk/reactos/dll/win32/rasadhlp/rasadhlp.rbuild (with props) trunk/reactos/dll/win32/rasadhlp/rasadhlp.spec (with props) trunk/reactos/dll/win32/rasadhlp/winsock.c (with props)
Added: trunk/reactos/dll/win32/rasadhlp/autodial.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/rasadhlp/autodial... ============================================================================== --- trunk/reactos/dll/win32/rasadhlp/autodial.c (added) +++ trunk/reactos/dll/win32/rasadhlp/autodial.c [iso-8859-1] Fri Oct 16 06:33:22 2009 @@ -1,0 +1,123 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Winsock 2 SPI + * FILE: lib/mswsock/lib/init.c + * PURPOSE: DLL Initialization + */ + +/* INCLUDES ******************************************************************/ +#include "precomp.h" + +/* DATA **********************************************************************/ + +/* FUNCTIONS *****************************************************************/ + +BOOLEAN +WINAPI +AcsHlpSendCommand(IN PAUTODIAL_COMMAND Command) +{ + UNICODE_STRING DriverName = RTL_CONSTANT_STRING(L"\Device\RasAcd"); + NTSTATUS Status; + HANDLE DriverHandle; + HANDLE EventHandle = NULL; + OBJECT_ATTRIBUTES ObjectAttributes; + IO_STATUS_BLOCK IoStatusBlock; + + /* Initialize the object attributes */ + InitializeObjectAttributes(&ObjectAttributes, + &DriverName, + OBJ_CASE_INSENSITIVE, + NULL, + NULL); + + /* Open a handle to it */ + Status = NtCreateFile(&DriverHandle, + FILE_READ_DATA | FILE_WRITE_DATA, + &ObjectAttributes, + &IoStatusBlock, + NULL, + FILE_ATTRIBUTE_NORMAL, + FILE_SHARE_READ | FILE_SHARE_WRITE, + FILE_OPEN_IF, + 0, + NULL, + 0); + if (!NT_SUCCESS(Status)) return FALSE; + + /* Create an event */ + EventHandle = CreateEvent(NULL, FALSE, FALSE, NULL); + if (!EventHandle) + { + /* Event failed, fail us */ + CloseHandle(DriverHandle); + return FALSE; + } + + /* Connect to the driver */ + Status = NtDeviceIoControlFile(DriverHandle, + EventHandle, + NULL, + NULL, + &IoStatusBlock, + IOCTL_ACD_CONNECT_ADDRESS, + Command, + sizeof(AUTODIAL_COMMAND), + NULL, + 0); + + /* Check if we need to wait */ + if (Status == STATUS_PENDING) + { + /* Wait for the driver */ + Status = WaitForSingleObject(EventHandle, INFINITE); + + /* Update status */ + Status = IoStatusBlock.Status; + } + + /* Close handles and return */ + CloseHandle(EventHandle); + CloseHandle(DriverHandle); + return NT_SUCCESS(Status); +} + +/* + * @implemented + */ +BOOLEAN +WINAPI +AcsHlpAttemptConnection(IN PAUTODIAL_ADDR ConnectionAddress) +{ + AUTODIAL_COMMAND Command; + + /* Clear the command packet */ + RtlZeroMemory(&Command, sizeof(AUTODIAL_COMMAND)); + + /* Copy the address into the command packet */ + RtlCopyMemory(&Command.Address, ConnectionAddress, sizeof(AUTODIAL_ADDR)); + + /* Send it to the driver */ + return AcsHlpSendCommand(&Command); +} + +/* + * @implemented + */ +BOOLEAN +WINAPI +AcsHlpNoteNewConnection(IN PAUTODIAL_ADDR ConnectionAddress, + IN PAUTODIAL_CONN Connection) +{ + AUTODIAL_COMMAND Command; + + /* Copy the address into the command packet */ + RtlCopyMemory(&Command.Address, ConnectionAddress, sizeof(AUTODIAL_ADDR)); + + /* Set the New Connection flag and copy the connection data */ + Command.NewConnection = TRUE; + RtlCopyMemory(&Command.Connection, Connection, sizeof(AUTODIAL_CONN)); + + /* Send it to the driver */ + return AcsHlpSendCommand(&Command); +} +
Propchange: trunk/reactos/dll/win32/rasadhlp/autodial.c ------------------------------------------------------------------------------ svn:eol-style = native
Added: trunk/reactos/dll/win32/rasadhlp/init.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/rasadhlp/init.c?r... ============================================================================== --- trunk/reactos/dll/win32/rasadhlp/init.c (added) +++ trunk/reactos/dll/win32/rasadhlp/init.c [iso-8859-1] Fri Oct 16 06:33:22 2009 @@ -1,0 +1,30 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Winsock 2 SPI + * FILE: lib/mswsock/lib/init.c + * PURPOSE: DLL Initialization + */ + +/* INCLUDES ******************************************************************/ +#include "precomp.h" + +/* DATA **********************************************************************/ + +/* FUNCTIONS *****************************************************************/ + +BOOLEAN +WINAPI +DllMain(HINSTANCE Instance, + DWORD Reason, + LPVOID Reserved) +{ + /* Check if we're being attached */ + if (Reason == DLL_PROCESS_ATTACH) + { + /* Let's disable TLC calls as an optimization */ + DisableThreadLibraryCalls(Instance); + } + + /* We're done */ + return TRUE; +}
Propchange: trunk/reactos/dll/win32/rasadhlp/init.c ------------------------------------------------------------------------------ svn:eol-style = native
Added: trunk/reactos/dll/win32/rasadhlp/precomp.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/rasadhlp/precomp.... ============================================================================== --- trunk/reactos/dll/win32/rasadhlp/precomp.h (added) +++ trunk/reactos/dll/win32/rasadhlp/precomp.h [iso-8859-1] Fri Oct 16 06:33:22 2009 @@ -1,0 +1,102 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Ancillary Function Driver DLL + * FILE: include/msafd.h + * PURPOSE: Ancillary Function Driver DLL header + */ + +#define _WIN32_WINNT 0x502 +#define _CRT_SECURE_NO_DEPRECATE +#define WIN32_NO_STATUS + +/* PSDK Headers */ +#include <winsock2.h> +#include <wsipx.h> +#include <wsnetbs.h> +#include <wininet.h> + +/* NDK */ +#include <iofuncs.h> +#include <rtltypes.h> + +/* Shared GUIDs */ +#include <nsp_dns.h> + +/* These should go in rasadhlp.h */ +#define FILE_DEVICE_ACD 0x000000F1 +#define _ACD_CTL_CODE(function, method, access) \ + CTL_CODE(FILE_DEVICE_ACD, function, method, access) + +#define IOCTL_ACD_RESET \ + _ACD_CTL_CODE(0, METHOD_BUFFERED, FILE_WRITE_ACCESS) +#define IOCTL_ACD_ENABLE \ + _ACD_CTL_CODE(1, METHOD_BUFFERED, FILE_WRITE_ACCESS) +#define IOCTL_ACD_NOTIFICATION \ + _ACD_CTL_CODE(2, METHOD_BUFFERED, FILE_READ_ACCESS) +#define IOCTL_ACD_KEEPALIVE \ + _ACD_CTL_CODE(3, METHOD_BUFFERED, FILE_READ_ACCESS) +#define IOCTL_ACD_COMPLETION \ + _ACD_CTL_CODE(4, METHOD_BUFFERED, FILE_WRITE_ACCESS) +#define IOCTL_ACD_CONNECT_ADDRESS \ + _ACD_CTL_CODE(5, METHOD_BUFFERED, FILE_READ_ACCESS) + +typedef enum +{ + AutoDialIp, + AutoDialIpx, + AutoDialNetBios, + AutoDialIpHost +} AUTODIAL_FAMILY; + +typedef enum +{ + ConnectionIpxLana, + ConnectionIp, + ConnectionIpHost, + ConnectionNetBiosMac, +} CONNECTION_FAMILY; + +typedef struct _AUTODIAL_ADDR +{ + AUTODIAL_FAMILY Family; + union + { + IN_ADDR Ip4Address; + CHAR IpxNode[6]; + CHAR NetBiosAddress[NETBIOS_NAME_LENGTH]; + CHAR HostName[INTERNET_MAX_PATH_LENGTH]; + }; +} AUTODIAL_ADDR, *PAUTODIAL_ADDR; + +typedef struct _AUTODIAL_CONN +{ + CONNECTION_FAMILY Family; + union + { + UCHAR IpxLana; + ULONG Ip4Address; + WCHAR ConnectionName[32]; + CHAR NetBiosMac[6]; + }; +} AUTODIAL_CONN, *PAUTODIAL_CONN; + +typedef struct _AUTODIAL_COMMAND +{ + AUTODIAL_ADDR Address; + BOOL NewConnection; + AUTODIAL_CONN Connection; +} AUTODIAL_COMMAND, *PAUTODIAL_COMMAND; + +BOOLEAN +WINAPI +AcsHlpNoteNewConnection( + IN PAUTODIAL_ADDR ConnectionAddress, + IN PAUTODIAL_CONN Connection +); + +BOOLEAN +WINAPI +AcsHlpAttemptConnection( + IN PAUTODIAL_ADDR ConnectionAddress +); +
Propchange: trunk/reactos/dll/win32/rasadhlp/precomp.h ------------------------------------------------------------------------------ svn:eol-style = native
Added: trunk/reactos/dll/win32/rasadhlp/rasadhlp.rbuild URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/rasadhlp/rasadhlp... ============================================================================== --- trunk/reactos/dll/win32/rasadhlp/rasadhlp.rbuild (added) +++ trunk/reactos/dll/win32/rasadhlp/rasadhlp.rbuild [iso-8859-1] Fri Oct 16 06:33:22 2009 @@ -1,0 +1,13 @@ +<?xml version="1.0"?> +<!DOCTYPE module SYSTEM "../../../tools/rbuild/project.dtd"> +<module name="rasadhlp" type="win32dll" installbase="system32" installname="rasadhlp.dll"> + <importlibrary definition="rasadhlp.spec" /> + <include base="ReactOS">include/reactos/winsock</include> + <include base="rasadhlp">.</include> + <library>kernel32</library> + <library>ntdll</library> + <library>ws2_32</library> + <file>autodial.c</file> + <file>init.c</file> + <file>winsock.c</file> +</module>
Propchange: trunk/reactos/dll/win32/rasadhlp/rasadhlp.rbuild ------------------------------------------------------------------------------ svn:eol-style = native
Added: trunk/reactos/dll/win32/rasadhlp/rasadhlp.spec URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/rasadhlp/rasadhlp... ============================================================================== --- trunk/reactos/dll/win32/rasadhlp/rasadhlp.spec (added) +++ trunk/reactos/dll/win32/rasadhlp/rasadhlp.spec [iso-8859-1] Fri Oct 16 06:33:22 2009 @@ -1,0 +1,6 @@ +@ stdcall AcsHlpAttemptConnection(ptr) +@ stub AcsHlpNbConnection +@ stdcall AcsHlpNoteNewConnection(ptr ptr) +@ stdcall WSAttemptAutodialAddr(ptr long) +@ stdcall WSAttemptAutodialName(ptr) +@ stdcall WSNoteSuccessfulHostentLookup(ptr long)
Propchange: trunk/reactos/dll/win32/rasadhlp/rasadhlp.spec ------------------------------------------------------------------------------ svn:eol-style = native
Added: trunk/reactos/dll/win32/rasadhlp/winsock.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/rasadhlp/winsock.... ============================================================================== --- trunk/reactos/dll/win32/rasadhlp/winsock.c (added) +++ trunk/reactos/dll/win32/rasadhlp/winsock.c [iso-8859-1] Fri Oct 16 06:33:22 2009 @@ -1,0 +1,137 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Winsock 2 SPI + * FILE: lib/mswsock/lib/init.c + * PURPOSE: DLL Initialization + */ + +/* INCLUDES ******************************************************************/ +#include "precomp.h" + +/* DATA **********************************************************************/ + +/* FUNCTIONS *****************************************************************/ + +/* + * @implemented + */ +BOOL +WINAPI +WSAttemptAutodialAddr(IN CONST SOCKADDR FAR *Name, + IN INT NameLength) +{ + PSOCKADDR_IN Ip = (PSOCKADDR_IN)Name; + PSOCKADDR_NB NetBios = (PSOCKADDR_NB)Name; + AUTODIAL_ADDR AutodialAdddress; + + /* Check the family type */ + switch (Name->sa_family) + { + case AF_INET: + /* Normal IPv4, set the Autodial Address Data */ + AutodialAdddress.Family = AutoDialIp; + AutodialAdddress.Ip4Address = Ip->sin_addr; + break; + + case AF_NETBIOS: + /* NetBIOS, set the Autodial Address Data*/ + AutodialAdddress.Family = AutoDialNetBios; + RtlCopyMemory(&AutodialAdddress.NetBiosAddress, + NetBios->snb_name, + NETBIOS_NAME_LENGTH); + break; + + default: + /* Unsupported family type */ + return FALSE; + } + + /* Call the public routine */ + return AcsHlpAttemptConnection(&AutodialAdddress); +} + +/* + * @implemented + */ +BOOL +WINAPI +WSAttemptAutodialName(IN CONST LPWSAQUERYSETW Restrictions) +{ + AUTODIAL_ADDR AutodialAdddress; + CHAR AnsiIp[17]; + LPGUID Guid = Restrictions->lpServiceClassId; + + /* Make sure we actually have a name */ + if (!Restrictions->lpszServiceInstanceName) return FALSE; + + /* Check if this is the Hostname GUID */ + if (!memcmp(Guid, &HostnameGuid, sizeof(GUID))) + { + /* It is. Set up the Autodial Address Data */ + AutodialAdddress.Family = AutoDialIpHost; + WideCharToMultiByte(CP_ACP, + 0, + Restrictions->lpszServiceInstanceName, + -1, + AutodialAdddress.HostName, + INTERNET_MAX_PATH_LENGTH - 1, + 0, + 0); + + /* Call the public routine */ + return AcsHlpAttemptConnection(&AutodialAdddress); + } + else if (!memcmp(Guid, &AddressGuid, sizeof(GUID))) + { + /* It's actually the IP String GUID */ + AutodialAdddress.Family = AutoDialIp; + + /* Convert the IP String to ANSI and then convert it to IP */ + WideCharToMultiByte(CP_ACP, + 0, + Restrictions->lpszServiceInstanceName, + -1, + AnsiIp, + sizeof(AnsiIp) - 1, + 0, + 0); + _strlwr(AnsiIp); + AutodialAdddress.Ip4Address.S_un.S_addr = inet_addr(AnsiIp); + + /* Make sure the IP is valid */ + if (AutodialAdddress.Ip4Address.S_un.S_addr == -1) return FALSE; + + /* Call the public routine */ + return AcsHlpAttemptConnection(&AutodialAdddress); + } + else + { + /* Unknown GUID type */ + return FALSE; + } +} + +/* + * @implemented + */ +VOID +WINAPI +WSNoteSuccessfulHostentLookup(IN CONST CHAR FAR *Name, + IN CONST ULONG Address) +{ + AUTODIAL_ADDR AutodialAdddress; + AUTODIAL_CONN AutodialConnection; + + /* Make sure there actually is a name */ + if (!(Name) || !strlen(Name)) return; + + /* Setup the Address */ + AutodialAdddress.Family = AutoDialIpHost; + strcpy(AutodialAdddress.HostName, Name); + + /* Setup the new connection */ + AutodialConnection.Family = ConnectionIp; + AutodialConnection.Ip4Address = Address; + AcsHlpNoteNewConnection(&AutodialAdddress, &AutodialConnection); +} +
Propchange: trunk/reactos/dll/win32/rasadhlp/winsock.c ------------------------------------------------------------------------------ svn:eol-style = native