mirror of
https://github.com/reactos/reactos.git
synced 2024-07-05 12:15:46 +00:00
- Add Alex's rasadhlp
- It builds on my WC but it may not build on trunk (because of our lacking headers) svn path=/trunk/; revision=43510
This commit is contained in:
parent
6a80145ce3
commit
181002e46e
123
reactos/dll/win32/rasadhlp/autodial.c
Normal file
123
reactos/dll/win32/rasadhlp/autodial.c
Normal file
|
@ -0,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);
|
||||||
|
}
|
||||||
|
|
30
reactos/dll/win32/rasadhlp/init.c
Normal file
30
reactos/dll/win32/rasadhlp/init.c
Normal file
|
@ -0,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;
|
||||||
|
}
|
102
reactos/dll/win32/rasadhlp/precomp.h
Normal file
102
reactos/dll/win32/rasadhlp/precomp.h
Normal file
|
@ -0,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
|
||||||
|
);
|
||||||
|
|
13
reactos/dll/win32/rasadhlp/rasadhlp.rbuild
Normal file
13
reactos/dll/win32/rasadhlp/rasadhlp.rbuild
Normal file
|
@ -0,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>
|
6
reactos/dll/win32/rasadhlp/rasadhlp.spec
Normal file
6
reactos/dll/win32/rasadhlp/rasadhlp.spec
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
@ stdcall AcsHlpAttemptConnection(ptr)
|
||||||
|
@ stub AcsHlpNbConnection
|
||||||
|
@ stdcall AcsHlpNoteNewConnection(ptr ptr)
|
||||||
|
@ stdcall WSAttemptAutodialAddr(ptr long)
|
||||||
|
@ stdcall WSAttemptAutodialName(ptr)
|
||||||
|
@ stdcall WSNoteSuccessfulHostentLookup(ptr long)
|
137
reactos/dll/win32/rasadhlp/winsock.c
Normal file
137
reactos/dll/win32/rasadhlp/winsock.c
Normal file
|
@ -0,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);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue