全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2933
推到 Plurk!
推到 Facebook!

vpn程式

答題得分者是:chatop
Egn
一般會員


發表:29
回覆:54
積分:16
註冊:2005-04-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-10 14:21:30 IP:220.228.xxx.xxx 未訂閱
請問有人寫過vpn設定的程式嗎?我現在要寫一個vpn的程式,但我不知道它的相關資料,不曉得有什麼要設定的,或有分什麼型態....有人能告訴我嗎
chatop
一般會員


發表:0
回覆:0
積分:5
註冊:2003-02-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-10-10 21:38:45 IP:218.71.xxx.xxx 未訂閱
我有VPN资料,比较简单的

需要引用二个Pas

第一个Ras.pas


//-----------------------------------------Ras.Pas-Start----------------------------------------------------------------
{* Copyright (c) 1992-1995, Microsoft Corporation, all rights reserved
**
** ras.h
** Remote Access external API
** Public header for external API clients
*}
{ Delphi conversion by Davide Moretti <dmoretti@iper.net> }
{ Note: All functions and structures defaults to Ansi. If you want to use
Unicode structs and funcs, use the names ending with 'W' }
unit Ras;
interface
uses Windows, Messages;
const
{ These are from lmcons.h }
DNLEN = 15; // Maximum domain name length
UNLEN = 256; // Maximum user name length
PWLEN = 256; // Maximum password length
NETBIOS_NAME_LEN = 16; // NetBIOS net name (bytes)
RAS_MaxDeviceType = 16;
RAS_MaxPhoneNumber = 128;
RAS_MaxIpAddress = 15;
RAS_MaxIpxAddress = 21;
{ Note: you must define WINVER31 before compiling this unit to get the sizes
for the 3.x version of RAS. The default is for Windows 95 and NT 4.0 }
{$IFDEF WINVER31}
{Version 3.x sizes }
RAS_MaxEntryName = 20;
RAS_MaxDeviceName = 32;
RAS_MaxCallbackNumber = 48;
{$ELSE}
{Version 4.x sizes }
RAS_MaxEntryName = 256;
RAS_MaxDeviceName = 128;
RAS_MaxCallbackNumber = RAS_MaxPhoneNumber;
{$ENDIF}
type
LPHRasConn = ^THRasConn;
THRasConn = Longint;

{* Identifies an active RAS connection. (See RasEnumConnections)
*}
LPRasConnW = ^TRasConnW;
TRasConnW = record
dwSize: Longint;
hrasconn: THRasConn;
szEntryName: Array[0..RAS_MaxEntryName] of WideChar;
{$IFNDEF WINVER31}
szDeviceType: Array[0..RAS_MaxDeviceType] of WideChar;
szDeviceName: Array[0..RAS_MaxDeviceName] of WideChar;
{$ENDIF}
end;
LPRasConnA = ^TRasConnA;
TRasConnA = record
dwSize: Longint;
hrasconn: THRasConn;
szEntryName: Array[0..RAS_MaxEntryName] of AnsiChar;
{$IFNDEF WINVER31}
szDeviceType: Array[0..RAS_MaxDeviceType] of AnsiChar;
szDeviceName: Array[0..RAS_MaxDeviceName] of AnsiChar;
{$ENDIF}
end;
LPRasConn = ^TRasConn;
TRasConn = TRasConnA;

const
{* Enumerates intermediate states to a connection. (See RasDial)
*}
RASCS_PAUSED = $1000;
RASCS_DONE = $2000;
type
LPRasConnState = ^TRasConnState;
TRasConnState = Integer;
const
RASCS_OpenPort = 0;
RASCS_PortOpened = 1;
RASCS_ConnectDevice = 2;
RASCS_DeviceConnected = 3;
RASCS_AllDevicesConnected = 4;
RASCS_Authenticate = 5;
RASCS_AuthNotify = 6;
RASCS_AuthRetry = 7;
RASCS_AuthCallback = 8;
RASCS_AuthChangePassword = 9;
RASCS_AuthProject = 10;
RASCS_AuthLinkSpeed = 11;
RASCS_AuthAck = 12;
RASCS_ReAuthenticate = 13;
RASCS_Authenticated = 14;
RASCS_PrepareForCallback = 15;
RASCS_WaitForModemReset = 16;
RASCS_WaitForCallback = 17;
RASCS_Projected = 18;
{$IFNDEF WINVER31}
RASCS_StartAuthentication = 19;
RASCS_CallbackComplete = 20;
RASCS_LogonNetwork = 21;
{$ENDIF}
RASCS_Interactive = RASCS_PAUSED;
RASCS_RetryAuthentication = RASCS_PAUSED 1;
RASCS_CallbackSetByCaller = RASCS_PAUSED 2;
RASCS_PasswordExpired = RASCS_PAUSED 3;
RASCS_Connected = RASCS_DONE;
RASCS_Disconnected = RASCS_DONE 1;
type
{* Describes the status of a RAS connection. (See RasConnectionStatus)
*}
LPRasConnStatusW = ^TRasConnStatusW;
TRasConnStatusW = record
dwSize: Longint;
rasconnstate: TRasConnState;
dwError: LongInt;
szDeviceType: Array[0..RAS_MaxDeviceType] of WideChar;
szDeviceName: Array[0..RAS_MaxDeviceName] of WideChar;
end;
LPRasConnStatusA = ^TRasConnStatusA;
TRasConnStatusA = record
dwSize: Longint;
rasconnstate: TRasConnState;
dwError: LongInt;
szDeviceType: Array[0..RAS_MaxDeviceType] of AnsiChar;
szDeviceName: Array[0..RAS_MaxDeviceName] of AnsiChar;
end;
LPRasConnStatus = ^TRasConnStatus;
TRasConnStatus = TRasConnStatusA;

{* Describes connection establishment parameters. (See RasDial)
*}
LPRasDialParamsW = ^TRasDialParamsW;
TRasDialParamsW = record
dwSize: LongInt;
szEntryName: Array[0..RAS_MaxEntryName] of WideChar;
szPhoneNumber: Array[0..RAS_MaxPhoneNumber] of WideChar;
szCallbackNumber: Array[0..RAS_MaxCallbackNumber] of WideChar;
szUserName: Array[0..UNLEN] of WideChar;
szPassword: Array[0..PWLEN] of WideChar;
szDomain: Array[0..DNLEN] of WideChar;
end;
LPRasDialParamsA = ^TRasDialParamsA;
TRasDialParamsA = record
dwSize: LongInt;
szEntryName: Array[0..RAS_MaxEntryName] of AnsiChar;
szPhoneNumber: Array[0..RAS_MaxPhoneNumber] of AnsiChar;
szCallbackNumber: Array[0..RAS_MaxCallbackNumber] of AnsiChar;
szUserName: Array[0..UNLEN] of AnsiChar;
szPassword: Array[0..PWLEN] of AnsiChar;
szDomain: Array[0..DNLEN] of AnsiChar;
end;
LPRasDialParams = ^TRasDialParams;
TRasDialParams = TRasDialParamsA;

{* Describes extended connection establishment options. (See RasDial)
*}
LPRasDialExtensions = ^TRasDialExtensions;
TRasDialExtensions = record
dwSize: LongInt;
dwfOptions: LongInt;
hwndParent: HWND;
reserved: LongInt;
end;
{* 'dwfOptions' bit flags.
*}
const
RDEOPT_UsePrefixSuffix = $00000001;
RDEOPT_PausedStates = $00000002;
RDEOPT_IgnoreModemSpeaker = $00000004;
RDEOPT_SetModemSpeaker = $00000008;
RDEOPT_IgnoreSoftwareCompression = $00000010;
RDEOPT_SetSoftwareCompression = $00000020;

type
{* Describes an enumerated RAS phone book entry name. (See RasEntryEnum)
*}
LPRasEntryNameW = ^TRasEntryNameW;
TRasEntryNameW = record
dwSize: Longint;
szEntryName: Array[0..RAS_MaxEntryName] of WideChar;
end;
LPRasEntryNameA = ^TRasEntryNameA;
TRasEntryNameA = record
dwSize: Longint;
szEntryName: Array[0..RAS_MaxEntryName] of AnsiChar;
end;
LPRasEntryName = ^TRasEntryName;
TRasEntryName = TRasEntryNameA;

{* Protocol code to projection data structure mapping.
*}
LPRasProjection = ^TRasProjection;
TRasProjection = Integer;
const
RASP_Amb = $10000;
RASP_PppNbf = $803F;
RASP_PppIpx = $802B;
RASP_PppIp = $8021;

type
{* Describes the result of a RAS AMB (Authentication Message Block)
** projection. This protocol is used with NT 3.1 and OS/2 1.3 downlevel
** RAS servers.
*}
LPRasAmbW = ^TRasAmbW;
TRasAmbW = record
dwSize: Longint;
dwError: Longint;
szNetBiosError: Array[0..NETBIOS_NAME_LEN] of WideChar;
bLana: Byte;
end;
LPRasAmbA = ^TRasAmbA;
TRasAmbA = record
dwSize: Longint;
dwError: Longint;
szNetBiosError: Array[0..NETBIOS_NAME_LEN] of AnsiChar;
bLana: Byte;
end;
LPRasAmb = ^TRasAmb;
TRasAmb = TRasAmbA;

{* Describes the result of a PPP NBF (NetBEUI) projection.
*}
LPRasPppNbfW = ^TRasPppNbfW;
TRasPppNbfW = record
dwSize: Longint;
dwError: Longint;
dwNetBiosError: Longint;
szNetBiosError: Array[0..NETBIOS_NAME_LEN] of WideChar;
szWorkstationName: Array[0..NETBIOS_NAME_LEN] of WideChar;
bLana: Byte;
end;
LPRasPppNbfA = ^TRasPppNbfA;
TRasPppNbfA = record
dwSize: Longint;
dwError: Longint;
dwNetBiosError: Longint;
szNetBiosError: Array[0..NETBIOS_NAME_LEN] of AnsiChar;
szWorkstationName: Array[0..NETBIOS_NAME_LEN] of AnsiChar;
bLana: Byte;
end;
LpRaspppNbf = ^TRasPppNbf;
TRasPppNbf = TRasPppNbfA;

{* Describes the results of a PPP IPX (Internetwork Packet Exchange)
** projection.
*}
LPRasPppIpxW = ^TRasPppIpxW;
TRasPppIpxW = record
dwSize: Longint;
dwError: Longint;
szIpxAddress: Array[0..RAS_MaxIpxAddress] of WideChar;
end;
LPRasPppIpxA = ^TRasPppIpxA;
TRasPppIpxA = record
dwSize: Longint;
dwError: Longint;
szIpxAddress: Array[0..RAS_MaxIpxAddress] of AnsiChar;
end;
LPRasPppIpx = ^TRasPppIpx;
TRasPppIpx = TRasPppIpxA;

{* Describes the results of a PPP IP (Internet) projection.
*}
LPRasPppIpW = ^TRasPppIpW;
TRasPppIpW = record
dwSize: Longint;
dwError: Longint;
szIpAddress: Array[0..RAS_MaxIpAddress] of WideChar;
{$IFNDEF WINNT35COMPATIBLE}
{* This field was added between Windows NT 3.51 beta and Windows NT 3.51
** final, and between Windows 95 M8 beta and Windows 95 final. If you do
** not require the server address and wish to retrieve PPP IP information
** from Windows NT 3.5 or early Windows NT 3.51 betas, or on early Windows
** 95 betas, define WINNT35COMPATIBLE.
**
** The server IP address is not provided by all PPP implementations,
** though Windows NT server's do provide it.
*}
szServerIpAddress: Array[0..RAS_MaxIpAddress] of WideChar;
{$ENDIF}
end;
LPRasPppIpA = ^TRasPppIpA;
TRasPppIpA = record
dwSize: Longint;
dwError: Longint;
szIpAddress: Array[0..RAS_MaxIpAddress] of AnsiChar;
{$IFNDEF WINNT35COMPATIBLE}
{* See RASPPPIPW comment.
*}
szServerIpAddress: Array[0..RAS_MaxIpAddress] of AnsiChar;
{$ENDIF}
end;
LPRasPppIp = ^TRasPppIp;
TRasPppIp = TRasPppIpA;

const
{* If using RasDial message notifications, get the notification message code
** by passing this string to the RegisterWindowMessageA() API.
** WM_RASDIALEVENT is used only if a unique message cannot be registered.
*}
RASDIALEVENT = 'RasDialEvent';
WM_RASDIALEVENT = $CCCD;

{* Prototypes for caller's RasDial callback handler. Arguments are the
** message ID (currently always WM_RASDIALEVENT), the current RASCONNSTATE and
** the error that has occurred (or 0 if none). Extended arguments are the
** handle of the RAS connection and an extended error code.
*}
{
typedef VOID (WINAPI *RASDIALFUNC)( UINT, RASCONNSTATE, DWORD );
typedef VOID (WINAPI *RASDIALFUNC1)( HRASCONN, UINT, RASCONNSTATE, DWORD, DWORD );
For Delphi: Just define the callback as
procedure RASCallback(msg: Integer; state: TRasConnState;
dwError: Longint); stdcall;
or
procedure RASCallback1(hConn: THRasConn; msg: Integer;
state: TRasConnState; dwError: Longint; dwEexterror: Longint); stdcall;
}
{* External RAS API function prototypes.
*}
{Note: for Delphi the function without 'A' or 'W' is the Ansi one
as on the other Delphi headers}
function RasDialA(
lpRasDialExt: LPRasDialExtensions;
lpszPhoneBook: PAnsiChar;
var params: TRasDialParamsA;
dwNotifierType: Longint;
lpNotifier: Pointer;
var rasconn: THRasConn
): Longint; stdcall;
function RasDialW(
lpRasDialExt: LPRasDialExtensions;
lpszPhoneBook: PWideChar;
var params: TRasDialParamsW;
dwNotifierType: Longint;
lpNotifier: Pointer;
var rasconn: THRasConn
): Longint; stdcall;
function RasDial(
lpRasDialExt: LPRasDialExtensions;
lpszPhoneBook: PAnsiChar;
var params: TRasDialParams;
dwNotifierType: Longint;
lpNotifier: Pointer;
var rasconn: THRasConn
): Longint; stdcall;
function RasEnumConnectionsA(
rasconnArray: LPRasConnA;
var lpcb: Longint;
var lpcConnections: Longint
): Longint; stdcall;
function RasEnumConnectionsW(
rasconnArray: LPRasConnW;
var lpcb: Longint;
var lpcConnections: Longint
): Longint; stdcall;
function RasEnumConnections(
rasconnArray: LPRasConn;
var lpcb: Longint;
var lpcConnections: Longint
): Longint; stdcall;
function RasEnumEntriesA(
reserved: PAnsiChar;
lpszPhoneBook: PAnsiChar;
entrynamesArray: LPRasEntryNameA;
var lpcb: Longint;
var lpcEntries: Longint
): Longint; stdcall;
function RasEnumEntriesW(
reserved: PWideChar;
lpszPhoneBook: PWideChar;
entrynamesArray: LPRasEntryNameW;
var lpcb: Longint;
var lpcEntries: Longint
): Longint; stdcall;
function RasEnumEntries(
reserved: PAnsiChar;
lpszPhoneBook: PAnsiChar;
entrynamesArray: LPRasEntryName;
var lpcb: Longint;
var lpcEntries: Longint
): Longint; stdcall;
function RasGetConnectStatusA(
hConn: THRasConn;
var lpStatus: TRasConnStatusA
): Longint; stdcall;
function RasGetConnectStatusW(
hConn: THRasConn;
var lpStatus: TRasConnStatusW
): Longint; stdcall;
function RasGetConnectStatus(
hConn: THRasConn;
var lpStatus: TRasConnStatus
): Longint; stdcall;
function RasGetErrorStringA(
errorValue: Integer;
erroString: PAnsiChar;
cBufSize: Longint
): Longint; stdcall;
function RasGetErrorStringW(
errorValue: Integer;
erroString: PWideChar;
cBufSize: Longint
): Longint; stdcall;
function RasGetErrorString(
errorValue: Integer;
erroString: PAnsiChar;
cBufSize: Longint
): Longint; stdcall;
function RasHangUpA(
hConn: THRasConn
): Longint; stdcall;
function RasHangUpW(
hConn: THRasConn
): Longint; stdcall;
function RasHangUp(
hConn: THRasConn
): Longint; stdcall;
function RasGetProjectionInfoA(
hConn: THRasConn;
rasproj: TRasProjection;
lpProjection: Pointer;
var lpcb: Longint
): Longint; stdcall;
function RasGetProjectionInfoW(
hConn: THRasConn;
rasproj: TRasProjection;
lpProjection: Pointer;
var lpcb: Longint
): Longint; stdcall;
function RasGetProjectionInfo(
hConn: THRasConn;
rasproj: TRasProjection;
lpProjection: Pointer;
var lpcb: Longint
): Longint; stdcall;
function RasCreatePhonebookEntryA(
hwndParentWindow: HWND;
lpszPhoneBook: PAnsiChar
): Longint; stdcall;
function RasCreatePhonebookEntryW(
hwndParentWindow: HWND;
lpszPhoneBook: PWideChar
): Longint; stdcall;
function RasCreatePhonebookEntry(
hwndParentWindow: HWND;
lpszPhoneBook: PAnsiChar
): Longint; stdcall;
function RasEditPhonebookEntryA(
hwndParentWindow: HWND;
lpszPhoneBook: PAnsiChar;
lpszEntryName: PAnsiChar
): Longint; stdcall;
function RasEditPhonebookEntryW(
hwndParentWindow: HWND;
lpszPhoneBook: PWideChar;
lpszEntryName: PWideChar
): Longint; stdcall;
function RasEditPhonebookEntry(
hwndParentWindow: HWND;
lpszPhoneBook: PAnsiChar;
lpszEntryName: PAnsiChar
): Longint; stdcall;
function RasSetEntryDialParamsA(
lpszPhoneBook: PAnsiChar;
var lpDialParams: TRasDialParamsA;
fRemovePassword: LongBool
): Longint; stdcall;
function RasSetEntryDialParamsW(
lpszPhoneBook: PWideChar;
var lpDialParams: TRasDialParamsW;
fRemovePassword: LongBool
): Longint; stdcall;
function RasSetEntryDialParams(
lpszPhoneBook: PAnsiChar;
var lpDialParams: TRasDialParams;
fRemovePassword: LongBool
): Longint; stdcall;
function RasGetEntryDialParamsA(
lpszPhoneBook: PAnsiChar;
var lpDialParams: TRasDialParamsA;
var lpfPassword: LongBool
): Longint; stdcall;
function RasGetEntryDialParamsW(
lpszPhoneBook: PWideChar;
var lpDialParams: TRasDialParamsW;
var lpfPassword: LongBool
): Longint; stdcall;
function RasGetEntryDialParams(
lpszPhoneBook: PAnsiChar;
var lpDialParams: TRasDialParams;
var lpfPassword: LongBool
): Longint; stdcall;

{**
** raserror.h
** Remote Access external API
** RAS specific error codes
*}
const
RASBASE = 600;
SUCCESS = 0;
PENDING = (RASBASE 0);
ERROR_INVALID_PORT_HANDLE = (RASBASE 1);
ERROR_PORT_ALREADY_OPEN = (RASBASE 2);
ERROR_BUFFER_TOO_SMALL = (RASBASE 3);
ERROR_WRONG_INFO_SPECIFIED = (RASBASE 4);
ERROR_CANNOT_SET_PORT_INFO = (RASBASE 5);
ERROR_PORT_NOT_CONNECTED = (RASBASE 6);
ERROR_EVENT_INVALID = (RASBASE 7);
ERROR_DEVICE_DOES_NOT_EXIST = (RASBASE 8);
ERROR_DEVICETYPE_DOES_NOT_EXIST = (RASBASE 9);
ERROR_BUFFER_INVALID = (RASBASE 10);
ERROR_ROUTE_NOT_AVAILABLE = (RASBASE 11);
ERROR_ROUTE_NOT_ALLOCATED = (RASBASE 12);
ERROR_INVALID_COMPRESSION_SPECIFIED = (RASBASE 13);
ERROR_OUT_OF_BUFFERS = (RASBASE 14);
ERROR_PORT_NOT_FOUND = (RASBASE 15);
ERROR_ASYNC_REQUEST_PENDING = (RASBASE 16);
ERROR_ALREADY_DISCONNECTING = (RASBASE 17);
ERROR_PORT_NOT_OPEN = (RASBASE 18);
ERROR_PORT_DISCONNECTED = (RASBASE 19);
ERROR_NO_ENDPOINTS = (RASBASE 20);
ERROR_CANNOT_OPEN_PHONEBOOK = (RASBASE 21);
ERROR_CANNOT_LOAD_PHONEBOOK = (RASBASE 22);
ERROR_CANNOT_FIND_PHONEBOOK_ENTRY = (RASBASE 23);
ERROR_CANNOT_WRITE_PHONEBOOK = (RASBASE 24);
ERROR_CORRUPT_PHONEBOOK = (RASBASE 25);
ERROR_CANNOT_LOAD_STRING = (RASBASE 26);
ERROR_KEY_NOT_FOUND = (RASBASE 27);
ERROR_DISCONNECTION = (RASBASE 28);
ERROR_REMOTE_DISCONNECTION = (RASBASE 29);
ERROR_HARDWARE_FAILURE = (RASBASE 30);
ERROR_USER_DISCONNECTION = (RASBASE 31);
ERROR_INVALID_SIZE = (RASBASE 32);
ERROR_PORT_NOT_AVAILABLE = (RASBASE 33);
ERROR_CANNOT_PROJECT_CLIENT = (RASBASE 34);
ERROR_UNKNOWN = (RASBASE 35);
ERROR_WRONG_DEVICE_ATTACHED = (RASBASE 36);
ERROR_BAD_STRING = (RASBASE 37);
ERROR_REQUEST_TIMEOUT = (RASBASE 38);
ERROR_CANNOT_GET_LANA = (RASBASE 39);
ERROR_NETBIOS_ERROR = (RASBASE 40);
ERROR_SERVER_OUT_OF_RESOURCES = (RASBASE 41);
ERROR_NAME_EXISTS_ON_NET = (RASBASE 42);
ERROR_SERVER_GENERAL_NET_FAILURE = (RASBASE 43);
WARNING_MSG_ALIAS_NOT_ADDED = (RASBASE 44);
ERROR_AUTH_INTERNAL = (RASBASE 45);
ERROR_RESTRICTED_LOGON_HOURS = (RASBASE 46);
ERROR_ACCT_DISABLED = (RASBASE 47);
ERROR_PASSWD_EXPIRED = (RASBASE 48);
ERROR_NO_DIALIN_PERMISSION = (RASBASE 49);
ERROR_SERVER_NOT_RESPONDING = (RASBASE 50);
ERROR_FROM_DEVICE = (RASBASE 51);
ERROR_UNRECOGNIZED_RESPONSE = (RASBASE 52);
ERROR_MACRO_NOT_FOUND = (RASBASE 53);
ERROR_MACRO_NOT_DEFINED = (RASBASE 54);
ERROR_MESSAGE_MACRO_NOT_FOUND = (RASBASE 55);
ERROR_DEFAULTOFF_MACRO_NOT_FOUND = (RASBASE 56);
ERROR_FILE_COULD_NOT_BE_OPENED = (RASBASE 57);
ERROR_DEVICENAME_TOO_LONG = (RASBASE 58);
ERROR_DEVICENAME_NOT_FOUND = (RASBASE 59);
ERROR_NO_RESPONSES = (RASBASE 60);
ERROR_NO_COMMAND_FOUND = (RASBASE 61);
ERROR_WRONG_KEY_SPECIFIED = (RASBASE 62);
ERROR_UNKNOWN_DEVICE_TYPE = (RASBASE 63);
ERROR_ALLOCATING_MEMORY = (RASBASE64);
ERROR_PORT_NOT_CONFIGURED = (RASBASE 65);
ERROR_DEVICE_NOT_READY = (RASBASE 66);
ERROR_READING_INI_FILE = (RASBASE 67);
ERROR_NO_CONNECTION = (RASBASE 68);
ERROR_BAD_USAGE_IN_INI_FILE = (RASBASE 69);
ERROR_READING_SECTIONNAME = (RASBASE 70);
ERROR_READING_DEVICETYPE = (RASBASE 71);
ERROR_READING_DEVICENAME = (RASBASE 72);
ERROR_READING_USAGE = (RASBASE 73);
ERROR_READING_MAXCONNECTBPS = (RASBASE 74);
ERROR_READING_MAXCARRIERBPS = (RASBASE 75);
ERROR_LINE_BUSY = (RASBASE 76);
ERROR_VOICE_ANSWER = (RASBASE 77);
ERROR_NO_ANSWER = (RASBASE 78);
ERROR_NO_CARRIER = (RASBASE 79);
ERROR_NO_DIALTONE = (RASBASE 80);
ERROR_IN_COMMAND = (RASBASE 81);
ERROR_WRITING_SECTIONNAME = (RASBASE 82);
ERROR_WRITING_DEVICETYPE = (RASBASE 83);
ERROR_WRITING_DEVICENAME = (RASBASE 84);
ERROR_WRITING_MAXCONNECTBPS = (RASBASE 85);
ERROR_WRITING_MAXCARRIERBPS = (RASBASE 86);
ERROR_WRITING_USAGE = (RASBASE 87);
ERROR_WRITING_DEFAULTOFF = (RASBASE 88);
ERROR_READING_DEFAULTOFF = (RASBASE 89);
ERROR_EMPTY_INI_FILE = (RASBASE 90);
ERROR_AUTHENTICATION_FAILURE = (RASBASE 91);
ERROR_PORT_OR_DEVICE = (RASBASE 92);
ERROR_NOT_BINARY_MACRO = (RASBASE 93);
ERROR_DCB_NOT_FOUND = (RASBASE 94);
ERROR_STATE_MACHINES_NOT_STARTED = (RASBASE 95);
ERROR_STATE_MACHINES_ALREADY_STARTED = (RASBASE 96);
ERROR_PARTIAL_RESPONSE_LOOPING = (RASBASE 97);
ERROR_UNKNOWN_RESPONSE_KEY = (RASBASE 98);
ERROR_RECV_BUF_FULL = (RASBASE 99);
ERROR_CMD_TOO_LONG = (RASBASE 100);
ERROR_UNSUPPORTED_BPS = (RASBASE 101);
ERROR_UNEXPECTED_RESPONSE = (RASBASE 102);
ERROR_INTERACTIVE_MODE = (RASBASE 103);
ERROR_BAD_CALLBACK_NUMBER = (RASBASE 104);
ERROR_INVALID_AUTH_STATE = (RASBASE 105);
ERROR_WRITING_INITBPS = (RASBASE 106);
ERROR_X25_DIAGNOSTIC = (RASBASE 107);
ERROR_ACCT_EXPIRED = (RASBASE 108);
ERROR_CHANGING_PASSWORD = (RASBASE 109);
ERROR_OVERRUN = (RASBASE 110);
ERROR_RASMAN_CANNOT_INITIALIZE = (RASBASE 111);
ERROR_BIPLEX_PORT_NOT_AVAILABLE = (RASBASE 112);
ERROR_NO_ACTIVE_ISDN_LINES = (RASBASE 113);
ERROR_NO_ISDN_CHANNELS_AVAILABLE = (RASBASE 114);
ERROR_TOO_MANY_LINE_ERRORS = (RASBASE 115);
ERROR_IP_CONFIGURATION = (RASBASE 116);
ERROR_NO_IP_ADDRESSES = (RASBASE 117);
ERROR_PPP_TIMEOUT = (RASBASE 118);
ERROR_PPP_REMOTE_TERMINATED = (RASBASE 119);
ERROR_PPP_NO_PROTOCOLS_CONFIGURED = (RASBASE 120);
ERROR_PPP_NO_RESPONSE = (RASBASE 121);
ERROR_PPP_INVALID_PACKET = (RASBASE 122);
ERROR_PHONE_NUMBER_TOO_LONG = (RASBASE 123);
ERROR_IPXCP_NO_DIALOUT_CONFIGURED = (RASBASE 124);
ERROR_IPXCP_NO_DIALIN_CONFIGURED = (RASBASE 125);
ERROR_IPXCP_DIALOUT_ALREADY_ACTIVE = (RASBASE 126);
ERROR_ACCESSING_TCPCFGDLL = (RASBASE 127);
ERROR_NO_IP_RAS_ADAPTER = (RASBASE 128);
ERROR_SLIP_REQUIRES_IP = (RASBASE 129);
ERROR_PROJECTION_NOT_COMPLETE = (RASBASE 130);
ERROR_PROTOCOL_NOT_CONFIGURED = (RASBASE 131);
ERROR_PPP_NOT_CONVERGING = (RASBASE 132);
ERROR_PPP_CP_REJECTED = (RASBASE 133);
ERROR_PPP_LCP_TERMINATED = (RASBASE 134);
ERROR_PPP_REQUIRED_ADDRESS_REJECTED = (RASBASE 135);
ERROR_PPP_NCP_TERMINATED = (RASBASE 136);
ERROR_PPP_LOOPBACK_DETECTED = (RASBASE 137);
ERROR_PPP_NO_ADDRESS_ASSIGNED = (RASBASE 138);
ERROR_CANNOT_USE_LOGON_CREDENTIALS = (RASBASE 139);
ERROR_TAPI_CONFIGURATION = (RASBASE 140);
ERROR_NO_LOCAL_ENCRYPTION = (RASBASE 141);
ERROR_NO_REMOTE_ENCRYPTION = (RASBASE 142);
ERROR_REMOTE_REQUIRES_ENCRYPTION = (RASBASE 143);
ERROR_IPXCP_NET_NUMBER_CONFLICT = (RASBASE 144);
ERROR_INVALID_SMM = (RASBASE 145);
ERROR_SMM_UNINITIALIZED = (RASBASE 146);
ERROR_NO_MAC_FOR_PORT = (RASBASE 147);
ERROR_SMM_TIMEOUT = (RASBASE 148);
ERROR_BAD_PHONE_NUMBER = (RASBASE 149);
ERROR_WRONG_MODULE = (RASBASE 150);

RASBASEEND = (RASBASE 150);
implementation
function RasCreatePhonebookEntryA; external 'rasapi32.dll' name 'RasCreatePhonebookEntryA';
function RasCreatePhonebookEntryW; external 'rasapi32.dll' name 'RasCreatePhonebookEntryW';
function RasCreatePhonebookEntry; external 'rasapi32.dll' name 'RasCreatePhonebookEntryA';
function RasDialA; external 'rasapi32.dll' name 'RasDialA';
function RasDialW; external 'rasapi32.dll' name 'RasDialW';
function RasDial; external 'rasapi32.dll' name 'RasDialA';
function RasEditPhonebookEntryA; external 'rasapi32.dll' name 'RasEditPhonebookEntryA';
function RasEditPhonebookEntryW; external 'rasapi32.dll' name 'RasEditPhonebookEntryW';
function RasEditPhonebookEntry; external 'rasapi32.dll' name 'RasEditPhonebookEntryA';
function RasEnumConnectionsA; external 'rasapi32.dll' name 'RasEnumConnectionsA';
function RasEnumConnectionsW; external 'rasapi32.dll' name 'RasEnumConnectionsW';
function RasEnumConnections; external 'rasapi32.dll' name 'RasEnumConnectionsA';
function RasEnumEntriesA; external 'rasapi32.dll' name 'RasEnumEntriesA';
function RasEnumEntriesW; external 'rasapi32.dll' name 'RasEnumEntriesW';
function RasEnumEntries; external 'rasapi32.dll' name 'RasEnumEntriesA';
function RasGetConnectStatusA; external 'rasapi32.dll' name 'RasGetConnectStatusA';
function RasGetConnectStatusW; external 'rasapi32.dll' name 'RasGetConnectStatusW';
function RasGetConnectStatus; external 'rasapi32.dll' name 'RasGetConnectStatusA';
function RasGetEntryDialParamsA; external 'rasapi32.dll' name 'RasGetEntryDialParamsA';
function RasGetEntryDialParamsW; external 'rasapi32.dll' name 'RasGetEntryDialParamsW';
function RasGetEntryDialParams; external 'rasapi32.dll' name 'RasGetEntryDialParamsA';
function RasGetErrorStringA; external 'rasapi32.dll' name 'RasGetErrorStringA';
function RasGetErrorStringW; external 'rasapi32.dll' name 'RasGetErrorStringW';
function RasGetErrorString; external 'rasapi32.dll' name 'RasGetErrorStringA';
function RasGetProjectionInfoA; external 'rasapi32.dll' name 'RasGetProjectionInfoA';
function RasGetProjectionInfoW; external 'rasapi32.dll' name 'RasGetProjectionInfoW';
function RasGetProjectionInfo; external 'rasapi32.dll' name 'RasGetProjectionInfoA';
function RasHangUpA; external 'rasapi32.dll' name 'RasHangUpA';
function RasHangUpW; external 'rasapi32.dll' name 'RasHangUpW';
function RasHangUp; external 'rasapi32.dll' name 'RasHangUpA';
function RasSetEntryDialParamsA; external 'rasapi32.dll' name 'RasSetEntryDialParamsA';
function RasSetEntryDialParamsW; external 'rasapi32.dll' name 'RasSetEntryDialParamsW';
function RasSetEntryDialParams; external 'rasapi32.dll' name 'RasSetEntryDialParamsA';
end.

//-----------------------------------------Ras.Pas-End----------------------------------------------------------------


//-----------------------------------------RasAPI.Pas-Start----------------------------------------------------------------

unit RasApi;
interface
uses
SysUtils, Windows, Dialogs, Classes, ExtCtrls, Forms, Messages;
const
(*RASAPI*) DNLEN = 15; // Maximum domain name length
(*RASAPI*) UNLEN = 256; // Maximum user name length
(*RASAPI*) PWLEN = 256; // Maximum password length
(*RASAPI*) NETBIOS_NAME_LEN = 16; // NetBIOS net name (bytes)
(*RASAPI*)
(*RASAPI*) RAS_MaxDeviceType = 16;
(*RASAPI*) RAS_MaxPhoneNumber = 128;
(*RASAPI*) RAS_MaxIpAddress = 15;
(*RASAPI*) RAS_MaxIpxAddress = 21;
(*RASAPI*) RAS_MaxEntryName = 256;
(*RASAPI*) RAS_MaxDeviceName = 128;
(*RASAPI*) RAS_MaxCallbackNumber = RAS_MaxPhoneNumber;
(*RASAPI*)
(*RASAPI*)type
(*RASAPI*) LPHRasConn = ^THRasConn;
(*RASAPI*) THRasConn = Longint;
(*RASAPI*)
(*RASAPI*){* Identifies an active RAS connection. (See RasEnumConnections) *}
(*RASAPI*) LPRasConnW = ^TRasConnW;
(*RASAPI*) TRasConnW = record
(*RASAPI*) dwSize : Longint;
(*RASAPI*) hrasconn : THRasConn;
(*RASAPI*) szEntryName : Array[0..RAS_MaxEntryName] of WideChar;
(*RASAPI*) szDeviceType : Array[0..RAS_MaxDeviceType] of WideChar;
(*RASAPI*) szDeviceName : Array[0..RAS_MaxDeviceName] of WideChar;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasConnA = ^TRasConnA;
(*RASAPI*) TRasConnA = record
(*RASAPI*) dwSize : Longint;
(*RASAPI*) hrasconn : THRasConn;
(*RASAPI*) szEntryName : Array[0..RAS_MaxEntryName] of AnsiChar;
(*RASAPI*) szDeviceType : Array[0..RAS_MaxDeviceType] of AnsiChar;
(*RASAPI*) szDeviceName : Array[0..RAS_MaxDeviceName] of AnsiChar;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasConn = ^TRasConn;
(*RASAPI*) TRasConn = TRasConnA;
(*RASAPI*)
(*RASAPI*)const
(*RASAPI*){* Enumerates intermediate states to a connection. (See RasDial) *}
(*RASAPI*) RASCS_PAUSED = $1000;
(*RASAPI*) RASCS_DONE = $2000;
(*RASAPI*)
(*RASAPI*)type
(*RASAPI*) LPRasConnState = ^TRasConnState;
(*RASAPI*) TRasConnState = Integer;
(*RASAPI*)
(*RASAPI*)const
(*RASAPI*) RASCS_OpenPort = 0;
(*RASAPI*) RASCS_PortOpened = 1;
(*RASAPI*) RASCS_ConnectDevice = 2;
(*RASAPI*) RASCS_DeviceConnected = 3;
(*RASAPI*) RASCS_AllDevicesConnected = 4;
(*RASAPI*) RASCS_Authenticate = 5;
(*RASAPI*) RASCS_AuthNotify = 6;
(*RASAPI*) RASCS_AuthRetry = 7;
(*RASAPI*) RASCS_AuthCallback = 8;
(*RASAPI*) RASCS_AuthChangePassword = 9;
(*RASAPI*) RASCS_AuthProject = 10;
(*RASAPI*) RASCS_AuthLinkSpeed = 11;
(*RASAPI*) RASCS_AuthAck = 12;
(*RASAPI*) RASCS_ReAuthenticate = 13;
(*RASAPI*) RASCS_Authenticated = 14;
(*RASAPI*) RASCS_PrepareForCallback = 15;
(*RASAPI*) RASCS_WaitForModemReset = 16;
(*RASAPI*) RASCS_WaitForCallback = 17;
(*RASAPI*) RASCS_Projected = 18;
(*RASAPI*) RASCS_StartAuthentication = 19;
(*RASAPI*) RASCS_CallbackComplete = 20;
(*RASAPI*) RASCS_LogonNetwork = 21;
(*RASAPI*)
(*RASAPI*) RASCS_Interactive = RASCS_PAUSED;
(*RASAPI*) RASCS_RetryAuthentication = RASCS_PAUSED 1;
(*RASAPI*) RASCS_CallbackSetByCaller = RASCS_PAUSED 2;
(*RASAPI*) RASCS_PasswordExpired = RASCS_PAUSED 3;
(*RASAPI*)
(*RASAPI*) RASCS_Connected = RASCS_DONE;
(*RASAPI*) RASCS_Disconnected = RASCS_DONE 1;
(*RASAPI*)
(*RASAPI*)type
(*RASAPI*){* Describes the status of a RAS connection. (See RasConnectionStatus)*}
(*RASAPI*) LPRasConnStatusW = ^TRasConnStatusW;
(*RASAPI*) TRasConnStatusW = record
(*RASAPI*) dwSize : Longint;
(*RASAPI*) rasconnstate : TRasConnState;
(*RASAPI*) dwError : LongInt;
(*RASAPI*) szDeviceType : Array[0..RAS_MaxDeviceType] of WideChar;
(*RASAPI*) szDeviceName : Array[0..RAS_MaxDeviceName] of WideChar;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasConnStatusA = ^TRasConnStatusA;
(*RASAPI*) TRasConnStatusA = record
(*RASAPI*) dwSize : Longint;
(*RASAPI*) rasconnstate : TRasConnState;
(*RASAPI*) dwError : LongInt;
(*RASAPI*) szDeviceType : Array[0..RAS_MaxDeviceType] of AnsiChar;
(*RASAPI*) szDeviceName : Array[0..RAS_MaxDeviceName] of AnsiChar;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasConnStatus = ^TRasConnStatus;
(*RASAPI*) TRasConnStatus = TRasConnStatusA;
(*RASAPI*)
(*RASAPI*){* Describes connection establishment parameters. (See RasDial)*}
(*RASAPI*) LPRasDialParamsW = ^TRasDialParamsW;
(*RASAPI*) TRasDialParamsW = record
(*RASAPI*) dwSize : LongInt;
(*RASAPI*) szEntryName : Array[0..RAS_MaxEntryName] of WideChar;
(*RASAPI*) szPhoneNumber : Array[0..RAS_MaxPhoneNumber] of WideChar;
(*RASAPI*) szCallbackNumber : Array[0..RAS_MaxCallbackNumber] of WideChar;
(*RASAPI*) szUserName : Array[0..UNLEN] of WideChar;
(*RASAPI*) szPassword : Array[0..PWLEN] of WideChar;
(*RASAPI*) szDomain : Array[0..DNLEN] of WideChar;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasDialParamsA = ^TRasDialParamsA;
(*RASAPI*) TRasDialParamsA = record
(*RASAPI*) dwSize : LongInt;
(*RASAPI*) szEntryName : Array[0..RAS_MaxEntryName] of AnsiChar;
(*RASAPI*) szPhoneNumber : Array[0..RAS_MaxPhoneNumber] of AnsiChar;
(*RASAPI*) szCallbackNumber : Array[0..RAS_MaxCallbackNumber] of AnsiChar;
(*RASAPI*) szUserName : Array[0..UNLEN] of AnsiChar;
(*RASAPI*) szPassword : Array[0..PWLEN] of AnsiChar;
(*RASAPI*) szDomain : Array[0..DNLEN] of AnsiChar;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasDialParams = ^TRasDialParams;
(*RASAPI*) TRasDialParams = TRasDialParamsA;
(*RASAPI*)
(*RASAPI*){* Describes extended connection establishment options. (See RasDial)*}
(*RASAPI*) LPRasDialExtensions = ^TRasDialExtensions;
(*RASAPI*) TRasDialExtensions = record
(*RASAPI*) dwSize : LongInt;
(*RASAPI*) dwfOptions : LongInt;
(*RASAPI*) hwndParent : HWND;
(*RASAPI*) reserved : LongInt;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*)const
(*RASAPI*){* 'dwfOptions' bit flags.*}
(*RASAPI*) RDEOPT_UsePrefixSuffix = $00000001;
(*RASAPI*) RDEOPT_PausedStates = $00000002;
(*RASAPI*) RDEOPT_IgnoreModemSpeaker = $00000004;
(*RASAPI*) RDEOPT_SetModemSpeaker = $00000008;
(*RASAPI*) RDEOPT_IgnoreSoftwareCompression = $00000010;
(*RASAPI*) RDEOPT_SetSoftwareCompression = $00000020;
(*RASAPI*)
(*RASAPI*)
(*RASAPI*)type
(*RASAPI*)
(*RASAPI*){* Describes an enumerated RAS phone book entry name. (See RasEntryEnum)*}
(*RASAPI*) LPRasEntryNameW = ^TRasEntryNameW;
(*RASAPI*) TRasEntryNameW = record
(*RASAPI*) dwSize : Longint;
(*RASAPI*) szEntryName : Array[0..RAS_MaxEntryName] of WideChar;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasEntryNameA = ^TRasEntryNameA;
(*RASAPI*) TRasEntryNameA = record
(*RASAPI*) dwSize : Longint;
(*RASAPI*) szEntryName : Array[0..RAS_MaxEntryName] of AnsiChar;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasEntryName = ^TRasEntryName;
(*RASAPI*) TRasEntryName = TRasEntryNameA;
(*RASAPI*)
(*RASAPI*){* Protocol code to projection data structure mapping.*}
(*RASAPI*) LPRasProjection = ^TRasProjection;
(*RASAPI*) TRasProjection = Integer;
(*RASAPI*)
(*RASAPI*)const
(*RASAPI*) RASP_Amb = $10000;
(*RASAPI*) RASP_PppNbf = $803F;
(*RASAPI*) RASP_PppIpx = $802B;
(*RASAPI*) RASP_PppIp = $8021;
(*RASAPI*)
(*RASAPI*)
(*RASAPI*)type
(*RASAPI*){* Describes the result of a RAS AMB (Authentication Message Block)
(*RASAPI*)** projection. This protocol is used with NT 3.1 and OS/2 1.3 downlevel
(*RASAPI*)** RAS servers.*}
(*RASAPI*) LPRasAmbW = ^TRasAmbW;
(*RASAPI*) TRasAmbW = record
(*RASAPI*) dwSize : Longint;
(*RASAPI*) dwError : Longint;
(*RASAPI*) szNetBiosError : Array[0..NETBIOS_NAME_LEN] of WideChar;
(*RASAPI*) bLana : Byte;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasAmbA = ^TRasAmbA;
(*RASAPI*) TRasAmbA = record
(*RASAPI*) dwSize : Longint;
(*RASAPI*) dwError : Longint;
(*RASAPI*) szNetBiosError : Array[0..NETBIOS_NAME_LEN] of AnsiChar;
(*RASAPI*) bLana : Byte;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasAmb = ^TRasAmb;
(*RASAPI*) TRasAmb = TRasAmbA;
(*RASAPI*)
(*RASAPI*){* Describes the result of a PPP NBF (NetBEUI) projection.*}
(*RASAPI*) LPRasPppNbfW = ^TRasPppNbfW;
(*RASAPI*) TRasPppNbfW = record
(*RASAPI*) dwSize : Longint;
(*RASAPI*) dwError : Longint;
(*RASAPI*) dwNetBiosError : Longint;
(*RASAPI*) szNetBiosError : Array[0..NETBIOS_NAME_LEN] of WideChar;
(*RASAPI*) szWorkstationName : Array[0..NETBIOS_NAME_LEN] of WideChar;
(*RASAPI*) bLana : Byte;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasPppNbfA = ^TRasPppNbfA;
(*RASAPI*) TRasPppNbfA = record
(*RASAPI*) dwSize : Longint;
(*RASAPI*) dwError : Longint;
(*RASAPI*) dwNetBiosError : Longint;
(*RASAPI*) szNetBiosError : Array[0..NETBIOS_NAME_LEN] of AnsiChar;
(*RASAPI*) szWorkstationName : Array[0..NETBIOS_NAME_LEN] of AnsiChar;
(*RASAPI*) bLana : Byte;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LpRaspppNbf = ^TRasPppNbf;
(*RASAPI*) TRasPppNbf = TRasPppNbfA;
(*RASAPI*)
(*RASAPI*){* Describes the results of a PPP IPX (Internetwork Packet Exchange)
(*RASAPI*)** projection.*}
(*RASAPI*) LPRasPppIpxW = ^TRasPppIpxW;
(*RASAPI*) TRasPppIpxW = record
(*RASAPI*) dwSize : Longint;
(*RASAPI*) dwError : Longint;
(*RASAPI*) szIpxAddress : Array[0..RAS_MaxIpxAddress] of WideChar;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasPppIpxA = ^TRasPppIpxA;
(*RASAPI*) TRasPppIpxA = record
(*RASAPI*) dwSize : Longint;
(*RASAPI*) dwError : Longint;
(*RASAPI*) szIpxAddress : Array[0..RAS_MaxIpxAddress] of AnsiChar;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasPppIpx = ^TRasPppIpx;
(*RASAPI*) TRasPppIpx = TRasPppIpxA;
(*RASAPI*)
(*RASAPI*){* Describes the results of a PPP IP (Internet) projection.*}
(*RASAPI*) LPRasPppIpW = ^TRasPppIpW;
(*RASAPI*) TRasPppIpW = record
(*RASAPI*) dwSize : Longint;
(*RASAPI*) dwError : Longint;
(*RASAPI*) szIpAddress : Array[0..RAS_MaxIpAddress] of WideChar;
(*RASAPI*)
(*RASAPI*){$IFNDEF WINNT35COMPATIBLE}
(*RASAPI*) {* This field was added between Windows NT 3.51 beta and Windows NT 3.51
(*RASAPI*) ** final, and between Windows 95 M8 beta and Windows 95 final. If you do
(*RASAPI*) ** not require the server address and wish to retrieve PPP IP information
(*RASAPI*) ** from Windows NT 3.5 or early Windows NT 3.51 betas, or on early Windows
(*RASAPI*) ** 95 betas, define WINNT35COMPATIBLE.
(*RASAPI*) **
(*RASAPI*) ** The server IP address is not provided by all PPP implementations,
(*RASAPI*) ** though Windows NT server's do provide it. *}
(*RASAPI*) szServerIpAddress: Array[0..RAS_MaxIpAddress] of WideChar;
(*RASAPI*){$ENDIF}
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasPppIpA = ^TRasPppIpA;
(*RASAPI*) TRasPppIpA = record
(*RASAPI*) dwSize : Longint;
(*RASAPI*) dwError : Longint;
(*RASAPI*) szIpAddress : Array[0..RAS_MaxIpAddress] of AnsiChar;
(*RASAPI*)
(*RASAPI*){$IFNDEF WINNT35COMPATIBLE} {* See RASPPPIPW comment. *}
(*RASAPI*) szServerIpAddress: Array[0..RAS_MaxIpAddress] of AnsiChar;
(*RASAPI*){$ENDIF}
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasPppIp = ^TRasPppIp;
(*RASAPI*) TRasPppIp = TRasPppIpA;
(*RASAPI*)
(*RASAPI*)
(*RASAPI*)const
(*RASAPI*){* If using RasDial message notifications, get the notification message code
(*RASAPI*)** by passing this string to the RegisterWindowMessageA() API.
(*RASAPI*)** WM_RASDIALEVENT is used only if a unique message cannot be registered.*}
(*RASAPI*) RASDIALEVENT = 'RasDialEvent';
(*RASAPI*) WM_RASDIALEVENT = $CCCD;
(*RASAPI*)
(*RASAPI*)
(*RASAPI*){* Prototypes for caller's RasDial callback handler. Arguments are the
(*RASAPI*)** message ID (currently always WM_RASDIALEVENT), the current RASCONNSTATE and
(*RASAPI*)** the error that has occurred (or 0 if none). Extended arguments are the
(*RASAPI*)** handle of the RAS connection and an extended error code.
(*RASAPI*)*}
(*RASAPI*){
(*RASAPI*)typedef VOID (WINAPI *RASDIALFUNC)( UINT, RASCONNSTATE, DWORD );
(*RASAPI*)typedef VOID (WINAPI *RASDIALFUNC1)( HRASCONN, UINT, RASCONNSTATE, DWORD, DWORD );
(*RASAPI*)
(*RASAPI*)For Delphi: Just define the callback as
(*RASAPI*)procedure RASCallback(msg: Integer; state: TRasConnState;
(*RASAPI*) dwError: Longint); stdcall;
(*RASAPI*) or
(*RASAPI*)procedure RASCallback1(hConn: THRasConn; msg: Integer;
(*RASAPI*) state: TRasConnState; dwError: Longint; dwEexterror: Longint); stdcall;
(*RASAPI*)}
(*RASAPI*)
(*RASAPI*){* External RAS API function prototypes.
(*RASAPI*)*}
(*RASAPI*){Note: for Delphi the function without 'A' or 'W' is the Ansi one
(*RASAPI*) as on the other Delphi headers}
(*RASAPI*)
(*RASAPI*)function RasDialA(lpRasDialExt: LPRasDialExtensions; lpszPhoneBook: PAnsiChar;
(*RASAPI*) var params: TRasDialParamsA; dwNotifierType: Longint;
(*RASAPI*) lpNotifier: Pointer; var rasconn: THRasConn): Longint; stdcall;
(*RASAPI*)function RasDialW(lpRasDialExt: LPRasDialExtensions; lpszPhoneBook: PWideChar;
(*RASAPI*) var params: TRasDialParamsW; dwNotifierType: Longint;
(*RASAPI*) lpNotifier: Pointer; var rasconn: THRasConn): Longint; stdcall;
(*RASAPI*)function RasDial(lpRasDialExt: LPRasDialExtensions; lpszPhoneBook: PAnsiChar;
(*RASAPI*) var params: TRasDialParams; dwNotifierType: Longint;
(*RASAPI*) lpNotifier: Pointer; var rasconn: THRasConn): Longint; stdcall;
(*RASAPI*)
(*RASAPI*)function RasEnumConnectionsA(RasConnArray: LPRasConnA; var lpcb: Longint;
(*RASAPI*) var lpcConnections: Longint): Longint; stdcall;
(*RASAPI*)function RasEnumConnectionsW(RasConnArray: LPRasConnW; var lpcb: Longint;
(*RASAPI*) var lpcConnections: Longint): Longint; stdcall;
(*RASAPI*)function RasEnumConnections(RasConnArray: LPRasConn; var lpcb: Longint;
(*RASAPI*) var lpcConnections: Longint): Longint; stdcall;
(*RASAPI*)
(*RASAPI*)function RasEnumEntriesA(Reserved: PAnsiChar; lpszPhoneBook: PAnsiChar;
(*RASAPI*) entrynamesArray: LPRasEntryNameA; var lpcb: Longint;
(*RASAPI*) var lpcEntries: Longint): Longint; stdcall;
(*RASAPI*)function RasEnumEntriesW(reserved: PWideChar; lpszPhoneBook: PWideChar;
(*RASAPI*) entrynamesArray: LPRasEntryNameW; var lpcb: Longint;
(*RASAPI*) var lpcEntries: Longint): Longint; stdcall;
(*RASAPI*)function RasEnumEntries(reserved: PAnsiChar; lpszPhoneBook: PAnsiChar;
(*RASAPI*) entrynamesArray: LPRasEntryName; var lpcb: Longint;
(*RASAPI*) var lpcEntries: Longint): Longint; stdcall;
(*RASAPI*)
(*RASAPI*)function RasGetConnectStatusA(hConn: THRasConn; var lpStatus: TRasConnStatusA): Longint; stdcall;
(*RASAPI*)function RasGetConnectStatusW(hConn: THRasConn;var lpStatus: TRasConnStatusW): Longint; stdcall;
(*RASAPI*)function RasGetConnectStatus(hConn: THRasConn;var lpStatus: TRasConnStatus): Longint; stdcall;
(*RASAPI*)
(*RASAPI*)function RasGetErrorStringA(errorValue: Integer;erroString: PAnsiChar;cBufSize: Longint): Longint; stdcall;
(*RASAPI*)function RasGetErrorStringW(errorValue: Integer;erroString: PWideChar;cBufSize: Longint): Longint; stdcall;
(*RASAPI*)function RasGetErrorString(errorValue: Integer;erroString: PAnsiChar;cBufSize: Longint): Longint; stdcall;
(*RASAPI*)
(*RASAPI*)function RasHangUpA(hConn: THRasConn): Longint; stdcall;
(*RASAPI*)function RasHangUpW(hConn: THRasConn): Longint; stdcall;
(*RASAPI*)function RasHangUp(hConn: THRasConn): Longint; stdcall;
(*RASAPI*)
(*RASAPI*)function RasGetProjectionInfoA(hConn: THRasConn; rasproj: TRasProjection;
(*RASAPI*) lpProjection: Pointer; var lpcb: Longint): Longint; stdcall;
(*RASAPI*)function RasGetProjectionInfoW(hConn: THRasConn; rasproj: TRasProjection;
(*RASAPI*) lpProjection: Pointer; var lpcb: Longint): Longint; stdcall;
(*RASAPI*)function RasGetProjectionInfo(hConn: THRasConn; rasproj: TRasProjection;
(*RASAPI*) lpProjection: Pointer; var lpcb: Longint): Longint; stdcall;
(*RASAPI*)
(*RASAPI*)function RasCreatePhonebookEntryA(hwndParentWindow: HWND;lpszPhoneBook: PAnsiChar): Longint; stdcall;
(*RASAPI*)function RasCreatePhonebookEntryW(hwndParentWindow: HWND;lpszPhoneBook: PWideChar): Longint; stdcall;
(*RASAPI*)function RasCreatePhonebookEntry(hwndParentWindow: HWND;lpszPhoneBook: PAnsiChar): Longint; stdcall;
(*RASAPI*)
(*RASAPI*)function RasEditPhonebookEntryA(hwndParentWindow: HWND; lpszPhoneBook: PAnsiChar;
(*RASAPI*) lpszEntryName: PAnsiChar): Longint; stdcall;
(*RASAPI*)function RasEditPhonebookEntryW(hwndParentWindow: HWND; lpszPhoneBook: PWideChar;
(*RASAPI*) lpszEntryName: PWideChar): Longint; stdcall;
(*RASAPI*)function RasEditPhonebookEntry(hwndParentWindow: HWND; lpszPhoneBook: PAnsiChar;
(*RASAPI*) lpszEntryName: PAnsiChar): Longint; stdcall;
(*RASAPI*)
(*RASAPI*)function RasSetEntryDialParamsA(lpszPhoneBook: PAnsiChar; var lpDialParams: TRasDialParamsA;
(*RASAPI*) fRemovePassword: LongBool): Longint; stdcall;
(*RASAPI*)function RasSetEntryDialParamsW(lpszPhoneBook: PWideChar; var lpDialParams: TRasDialParamsW;
(*RASAPI*) fRemovePassword: LongBool): Longint; stdcall;
(*RASAPI*)function RasSetEntryDialParams(lpszPhoneBook: PAnsiChar; var lpDialParams: TRasDialParams;
(*RASAPI*) fRemovePassword: LongBool): Longint; stdcall;
(*RASAPI*)
(*RASAPI*)function RasGetEntryDialParamsA(lpszPhoneBook: PAnsiChar; var lpDialParams: TRasDialParamsA;
(*RASAPI*) var lpfPassword: LongBool): Longint; stdcall;
(*RASAPI*)function RasGetEntryDialParamsW(lpszPhoneBook: PWideChar; var lpDialParams: TRasDialParamsW;
(*RASAPI*) var lpfPassword: LongBool): Longint; stdcall;
(*RASAPI*)function RasGetEntryDialParams(lpszPhoneBook: PAnsiChar; var lpDialParams: TRasDialParams;
(*RASAPI*) var lpfPassword: LongBool): Longint; stdcall;
(*RASAPI*)
(*RASAPI*){**
(*RASAPI*)** raserror.h
(*RASAPI*)** Remote Access external API
(*RASAPI*)** RAS specific error codes *}
(*RASAPI*)
(*RASAPI*)const
(*RASAPI*) RASBASE = 600;
(*RASAPI*) SUCCESS = 0;
(*RASAPI*)
(*RASAPI*) PENDING = (RASBASE 0);
(*RASAPI*) ERROR_INVALID_PORT_HANDLE = (RASBASE 1);
(*RASAPI*) ERROR_PORT_ALREADY_OPEN = (RASBASE 2);
(*RASAPI*) ERROR_BUFFER_TOO_SMALL = (RASBASE 3);
(*RASAPI*) ERROR_WRONG_INFO_SPECIFIED = (RASBASE 4);
(*RASAPI*) ERROR_CANNOT_SET_PORT_INFO = (RASBASE 5);
(*RASAPI*) ERROR_PORT_NOT_CONNECTED = (RASBASE 6);
(*RASAPI*) ERROR_EVENT_INVALID = (RASBASE 7);
(*RASAPI*) ERROR_DEVICE_DOES_NOT_EXIST = (RASBASE 8);
(*RASAPI*) ERROR_DEVICETYPE_DOES_NOT_EXIST = (RASBASE 9);
(*RASAPI*) ERROR_BUFFER_INVALID = (RASBASE 10);
(*RASAPI*) ERROR_ROUTE_NOT_AVAILABLE = (RASBASE 11);
(*RASAPI*) ERROR_ROUTE_NOT_ALLOCATED = (RASBASE 12);
(*RASAPI*) ERROR_INVALID_COMPRESSION_SPECIFIED = (RASBASE 13);
(*RASAPI*) ERROR_OUT_OF_BUFFERS = (RASBASE 14);
(*RASAPI*) ERROR_PORT_NOT_FOUND = (RASBASE 15);
(*RASAPI*) ERROR_ASYNC_REQUEST_PENDING = (RASBASE 16);
(*RASAPI*) ERROR_ALREADY_DISCONNECTING = (RASBASE 17);
(*RASAPI*) ERROR_PORT_NOT_OPEN = (RASBASE 18);
(*RASAPI*) ERROR_PORT_DISCONNECTED = (RASBASE 19);
(*RASAPI*) ERROR_NO_ENDPOINTS = (RASBASE 20);
(*RASAPI*) ERROR_CANNOT_OPEN_PHONEBOOK = (RASBASE 21);
(*RASAPI*) ERROR_CANNOT_LOAD_PHONEBOOK = (RASBASE 22);
(*RASAPI*) ERROR_CANNOT_FIND_PHONEBOOK_ENTRY = (RASBASE 23);
(*RASAPI*) ERROR_CANNOT_WRITE_PHONEBOOK = (RASBASE 24);
(*RASAPI*) ERROR_CORRUPT_PHONEBOOK = (RASBASE 25);
(*RASAPI*) ERROR_CANNOT_LOAD_STRING = (RASBASE 26);
(*RASAPI*) ERROR_KEY_NOT_FOUND = (RASBASE 27);
(*RASAPI*) ERROR_DISCONNECTION = (RASBASE 28);
(*RASAPI*) ERROR_REMOTE_DISCONNECTION = (RASBASE 29);
(*RASAPI*) ERROR_HARDWARE_FAILURE = (RASBASE 30);
(*RASAPI*) ERROR_USER_DISCONNECTION = (RASBASE 31);
(*RASAPI*) ERROR_INVALID_SIZE = (RASBASE 32);
(*RASAPI*) ERROR_PORT_NOT_AVAILABLE = (RASBASE 33);
(*RASAPI*) ERROR_CANNOT_PROJECT_CLIENT = (RASBASE 34);
(*RASAPI*) ERROR_UNKNOWN = (RASBASE 35);
(*RASAPI*) ERROR_WRONG_DEVICE_ATTACHED = (RASBASE 36);
(*RASAPI*) ERROR_BAD_STRING = (RASBASE 37);
(*RASAPI*) ERROR_REQUEST_TIMEOUT = (RASBASE 38);
(*RASAPI*) ERROR_CANNOT_GET_LANA = (RASBASE 39);
(*RASAPI*) ERROR_NETBIOS_ERROR = (RASBASE 40);
(*RASAPI*) ERROR_SERVER_OUT_OF_RESOURCES = (RASBASE 41);
(*RASAPI*) ERROR_NAME_EXISTS_ON_NET = (RASBASE 42);
(*RASAPI*) ERROR_SERVER_GENERAL_NET_FAILURE = (RASBASE 43);
(*RASAPI*) WARNING_MSG_ALIAS_NOT_ADDED = (RASBASE 44);
(*RASAPI*) ERROR_AUTH_INTERNAL = (RASBASE 45);
(*RASAPI*) ERROR_RESTRICTED_LOGON_HOURS = (RASBASE 46);
(*RASAPI*) ERROR_ACCT_DISABLED = (RASBASE 47);
(*RASAPI*) ERROR_PASSWD_EXPIRED = (RASBASE 48);
(*RASAPI*) ERROR_NO_DIALIN_PERMISSION = (RASBASE 49);
(*RASAPI*) ERROR_SERVER_NOT_RESPONDING = (RASBASE 50);
(*RASAPI*) ERROR_FROM_DEVICE = (RASBASE 51);
(*RASAPI*) ERROR_UNRECOGNIZED_RESPONSE = (RASBASE 52);
(*RASAPI*) ERROR_MACRO_NOT_FOUND = (RASBASE 53);
(*RASAPI*) ERROR_MACRO_NOT_DEFINED = (RASBASE 54);
(*RASAPI*) ERROR_MESSAGE_MACRO_NOT_FOUND = (RASBASE 55);
(*RASAPI*) ERROR_DEFAULTOFF_MACRO_NOT_FOUND = (RASBASE 56);
(*RASAPI*) ERROR_FILE_COULD_NOT_BE_OPENED = (RASBASE 57);
(*RASAPI*) ERROR_DEVICENAME_TOO_LONG = (RASBASE 58);
(*RASAPI*) ERROR_DEVICENAME_NOT_FOUND = (RASBASE 59);
(*RASAPI*) ERROR_NO_RESPONSES = (RASBASE 60);
(*RASAPI*) ERROR_NO_COMMAND_FOUND = (RASBASE 61);
(*RASAPI*) ERROR_WRONG_KEY_SPECIFIED = (RASBASE 62);
(*RASAPI*) ERROR_UNKNOWN_DEVICE_TYPE = (RASBASE 63);
(*RASAPI*) ERROR_ALLOCATING_MEMORY = (RASBASE64);
(*RASAPI*) ERROR_PORT_NOT_CONFIGURED = (RASBASE 65);
(*RASAPI*) ERROR_DEVICE_NOT_READY = (RASBASE 66);
(*RASAPI*) ERROR_READING_INI_FILE = (RASBASE 67);
(*RASAPI*) ERROR_NO_CONNECTION = (RASBASE 68);
(*RASAPI*) ERROR_BAD_USAGE_IN_INI_FILE = (RASBASE 69);
(*RASAPI*) ERROR_READING_SECTIONNAME = (RASBASE 70);
(*RASAPI*) ERROR_READING_DEVICETYPE = (RASBASE 71);
(*RASAPI*) ERROR_READING_DEVICENAME = (RASBASE 72);
(*RASAPI*) ERROR_READING_USAGE = (RASBASE 73);
(*RASAPI*) ERROR_READING_MAXCONNECTBPS = (RASBASE 74);
(*RASAPI*) ERROR_READING_MAXCARRIERBPS = (RASBASE 75);
(*RASAPI*) ERROR_LINE_BUSY = (RASBASE 76);
(*RASAPI*) ERROR_VOICE_ANSWER = (RASBASE 77);
(*RASAPI*) ERROR_NO_ANSWER = (RASBASE 78);
(*RASAPI*) ERROR_NO_CARRIER = (RASBASE 79);
(*RASAPI*) ERROR_NO_DIALTONE = (RASBASE 80);
(*RASAPI*) ERROR_IN_COMMAND = (RASBASE 81);
(*RASAPI*) ERROR_WRITING_SECTIONNAME = (RASBASE 82);
(*RASAPI*) ERROR_WRITING_DEVICETYPE = (RASBASE 83);
(*RASAPI*) ERROR_WRITING_DEVICENAME = (RASBASE 84);
(*RASAPI*) ERROR_WRITING_MAXCONNECTBPS = (RASBASE 85);
(*RASAPI*) ERROR_WRITING_MAXCARRIERBPS = (RASBASE 86);
(*RASAPI*) ERROR_WRITING_USAGE = (RASBASE 87);
(*RASAPI*) ERROR_WRITING_DEFAULTOFF = (RASBASE 88);
(*RASAPI*) ERROR_READING_DEFAULTOFF = (RASBASE 89);
(*RASAPI*) ERROR_EMPTY_INI_FILE = (RASBASE 90);
(*RASAPI*) ERROR_AUTHENTICATION_FAILURE = (RASBASE 91);
(*RASAPI*) ERROR_PORT_OR_DEVICE = (RASBASE 92);
(*RASAPI*) ERROR_NOT_BINARY_MACRO = (RASBASE 93);
(*RASAPI*) ERROR_DCB_NOT_FOUND = (RASBASE 94);
(*RASAPI*) ERROR_STATE_MACHINES_NOT_STARTED = (RASBASE 95);
(*RASAPI*) ERROR_STATE_MACHINES_ALREADY_STARTED = (RASBASE 96);
(*RASAPI*) ERROR_PARTIAL_RESPONSE_LOOPING = (RASBASE 97);
(*RASAPI*) ERROR_UNKNOWN_RESPONSE_KEY = (RASBASE 98);
(*RASAPI*) ERROR_RECV_BUF_FULL = (RASBASE 99);
(*RASAPI*) ERROR_CMD_TOO_LONG = (RASBASE 100);
(*RASAPI*) ERROR_UNSUPPORTED_BPS = (RASBASE 101);
(*RASAPI*) ERROR_UNEXPECTED_RESPONSE = (RASBASE 102);
(*RASAPI*) ERROR_INTERACTIVE_MODE = (RASBASE 103);
(*RASAPI*) ERROR_BAD_CALLBACK_NUMBER = (RASBASE 104);
(*RASAPI*) ERROR_INVALID_AUTH_STATE = (RASBASE 105);
(*RASAPI*) ERROR_WRITING_INITBPS = (RASBASE 106);
(*RASAPI*) ERROR_X25_DIAGNOSTIC = (RASBASE 107);
(*RASAPI*) ERROR_ACCT_EXPIRED = (RASBASE 108);
(*RASAPI*) ERROR_CHANGING_PASSWORD = (RASBASE 109);
(*RASAPI*) ERROR_OVERRUN = (RASBASE 110);
(*RASAPI*) ERROR_RASMAN_CANNOT_INITIALIZE = (RASBASE 111);
(*RASAPI*) ERROR_BIPLEX_PORT_NOT_AVAILABLE = (RASBASE 112);
(*RASAPI*) ERROR_NO_ACTIVE_ISDN_LINES = (RASBASE 113);
(*RASAPI*) ERROR_NO_ISDN_CHANNELS_AVAILABLE = (RASBASE 114);
(*RASAPI*) ERROR_TOO_MANY_LINE_ERRORS = (RASBASE 115);
(*RASAPI*) ERROR_IP_CONFIGURATION = (RASBASE 116);
(*RASAPI*) ERROR_NO_IP_ADDRESSES = (RASBASE 117);
(*RASAPI*) ERROR_PPP_TIMEOUT = (RASBASE 118);
(*RASAPI*) ERROR_PPP_REMOTE_TERMINATED = (RASBASE 119);
(*RASAPI*) ERROR_PPP_NO_PROTOCOLS_CONFIGURED = (RASBASE 120);
(*RASAPI*) ERROR_PPP_NO_RESPONSE = (RASBASE 121);
(*RASAPI*) ERROR_PPP_INVALID_PACKET = (RASBASE 122);
(*RASAPI*) ERROR_PHONE_NUMBER_TOO_LONG = (RASBASE 123);
(*RASAPI*) ERROR_IPXCP_NO_DIALOUT_CONFIGURED = (RASBASE 124);
(*RASAPI*) ERROR_IPXCP_NO_DIALIN_CONFIGURED = (RASBASE 125);
(*RASAPI*) ERROR_IPXCP_DIALOUT_ALREADY_ACTIVE = (RASBASE 126);
(*RASAPI*) ERROR_ACCESSING_TCPCFGDLL = (RASBASE 127);
(*RASAPI*) ERROR_NO_IP_RAS_ADAPTER = (RASBASE 128);
(*RASAPI*) ERROR_SLIP_REQUIRES_IP = (RASBASE 129);
(*RASAPI*) ERROR_PROJECTION_NOT_COMPLETE = (RASBASE 130);
(*RASAPI*) ERROR_PROTOCOL_NOT_CONFIGURED = (RASBASE 131);
(*RASAPI*) ERROR_PPP_NOT_CONVERGING = (RASBASE 132);
(*RASAPI*) ERROR_PPP_CP_REJECTED = (RASBASE 133);
(*RASAPI*) ERROR_PPP_LCP_TERMINATED = (RASBASE 134);
(*RASAPI*) ERROR_PPP_REQUIRED_ADDRESS_REJECTED = (RASBASE 135);
(*RASAPI*) ERROR_PPP_NCP_TERMINATED = (RASBASE 136);
(*RASAPI*) ERROR_PPP_LOOPBACK_DETECTED = (RASBASE 137);
(*RASAPI*) ERROR_PPP_NO_ADDRESS_ASSIGNED = (RASBASE 138);
(*RASAPI*) ERROR_CANNOT_USE_LOGON_CREDENTIALS = (RASBASE 139);
(*RASAPI*) ERROR_TAPI_CONFIGURATION = (RASBASE 140);
(*RASAPI*) ERROR_NO_LOCAL_ENCRYPTION = (RASBASE 141);
(*RASAPI*) ERROR_NO_REMOTE_ENCRYPTION = (RASBASE 142);
(*RASAPI*) ERROR_REMOTE_REQUIRES_ENCRYPTION = (RASBASE 143);
(*RASAPI*) ERROR_IPXCP_NET_NUMBER_CONFLICT = (RASBASE 144);
(*RASAPI*) ERROR_INVALID_SMM = (RASBASE 145);
(*RASAPI*) ERROR_SMM_UNINITIALIZED = (RASBASE 146);
(*RASAPI*) ERROR_NO_MAC_FOR_PORT = (RASBASE 147);
(*RASAPI*) ERROR_SMM_TIMEOUT = (RASBASE 148);
(*RASAPI*) ERROR_BAD_PHONE_NUMBER = (RASBASE 149);
(*RASAPI*) ERROR_WRONG_MODULE = (RASBASE 150);
(*RASAPI*)
(*RASAPI*) RASBASEEND = (RASBASE 150);
(*RASAPI*)
(*RASAPI*){* Copyright (c) 1995, Microsoft Corporation, all rights reserved
(*RASAPI*)**
(*RASAPI*)** rnaph.h (to be merged with ras.h)
(*RASAPI*)**
(*RASAPI*)** Remote Access external API
(*RASAPI*)** Public header for external API clients
(*RASAPI*)**}
(*RASAPI*)
(*RASAPI*){*
(*RASAPI*) Original conversion by Gideon le Grange <legrang@adept.co.za>
(*RASAPI*) Merged with ras.pas by Davide Moretti <dmoretti@iper.net>
(*RASAPI*)*}
(*RASAPI*)
(*RASAPI*)const
(*RASAPI*) RAS_MaxAreaCode = 10;
(*RASAPI*) RAS_MaxPadType = 32;
(*RASAPI*) RAS_MaxX25Address = 200;
(*RASAPI*) RAS_MaxFacilities = 200;
(*RASAPI*) RAS_MaxUserData = 200;
(*RASAPI*)
(*RASAPI*)
(*RASAPI*)type
(*RASAPI*)(* Describes a RAS IP Address *)
(*RASAPI*) LPRasIPAddr = ^TRasIPAddr;
(*RASAPI*) TRasIPAddr = record
(*RASAPI*) A, B, C, D: Byte;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*)(* Describes a RAS phonebook entry *)
(*RASAPI*) LPRasEntryA = ^TRasEntryA;
(*RASAPI*) TRasEntryA = record
(*RASAPI*) dwSize,
(*RASAPI*) dwfOptions,
(*RASAPI*) dwCountryID,
(*RASAPI*) dwCountryCode : Longint;
(*RASAPI*) szAreaCode : array[0.. RAS_MaxAreaCode] of AnsiChar;
(*RASAPI*) szLocalPhoneNumber : array[0..RAS_MaxPhoneNumber] of AnsiChar;
(*RASAPI*) dwAlternatesOffset : Longint;
(*RASAPI*) ipaddr,
(*RASAPI*) ipaddrDns,
(*RASAPI*) ipaddrDnsAlt,
(*RASAPI*) ipaddrWins,
(*RASAPI*) ipaddrWinsAlt : TRasIPAddr;
(*RASAPI*) dwFrameSize,
(*RASAPI*) dwfNetProtocols,
(*RASAPI*) dwFramingProtocol : Longint;
(*RASAPI*) szScript : Array[0..MAX_PATH - 1] of AnsiChar;
(*RASAPI*) szAutodialDll : Array [0..MAX_PATH - 1] of AnsiChar;
(*RASAPI*) szAutodialFunc : Array [0..MAX_PATH - 1] of AnsiChar;
(*RASAPI*) szDeviceType : Array [0..RAS_MaxDeviceType] of AnsiChar;
(*RASAPI*) szDeviceName : Array [0..RAS_MaxDeviceName] of AnsiChar;
(*RASAPI*) szX25PadType : Array [0..RAS_MaxPadType] of AnsiChar;
(*RASAPI*) szX25Address : Array [0..RAS_MaxX25Address] of AnsiChar;
(*RASAPI*) szX25Facilities : Array [0..RAS_MaxFacilities] of AnsiChar;
(*RASAPI*) szX25UserData : Array [0..RAS_MaxUserData] of AnsiChar;
(*RASAPI*) dwChannels,
(*RASAPI*) dwReserved1,
(*RASAPI*) dwReserved2 : Longint;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasEntryW = ^TRasEntryW;
(*RASAPI*) TRasEntryW = record
(*RASAPI*) dwSize,
(*RASAPI*) dwfOptions,
(*RASAPI*) dwCountryID,
(*RASAPI*) dwCountryCode : Longint;
(*RASAPI*) szAreaCode : array[0.. RAS_MaxAreaCode] of WideChar;
(*RASAPI*) szLocalPhoneNumber : array[0..RAS_MaxPhoneNumber] of WideChar;
(*RASAPI*) dwAlternatesOffset : Longint;
(*RASAPI*) ipaddr,
(*RASAPI*) ipaddrDns,
(*RASAPI*) ipaddrDnsAlt,
(*RASAPI*) ipaddrWins,
(*RASAPI*) ipaddrWinsAlt : TRasIPAddr;
(*RASAPI*) dwFrameSize,
(*RASAPI*) dwfNetProtocols,
(*RASAPI*) dwFramingProtocol : Longint;
(*RASAPI*) szScript : Array[0..MAX_PATH - 1] of WideChar;
(*RASAPI*) szAutodialDll : Array [0..MAX_PATH - 1] of WideChar;
(*RASAPI*) szAutodialFunc : Array [0..MAX_PATH - 1] of WideChar;
(*RASAPI*) szDeviceType : Array [0..RAS_MaxDeviceType] of WideChar;
(*RASAPI*) szDeviceName : Array [0..RAS_MaxDeviceName] of WideChar;
(*RASAPI*) szX25PadType : Array [0..RAS_MaxPadType] of WideChar;
(*RASAPI*) szX25Address : Array [0..RAS_MaxX25Address] of WideChar;
(*RASAPI*) szX25Facilities : Array [0..RAS_MaxFacilities] of WideChar;
(*RASAPI*) szX25UserData : Array [0..RAS_MaxUserData] of WideChar;
(*RASAPI*) dwChannels,
(*RASAPI*) dwReserved1,
(*RASAPI*) dwReserved2 : Longint;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasEntry = ^TRasEntry;
(*RASAPI*) TRasEntry = TRasEntryA;
(*RASAPI*)
(*RASAPI*)(* Describes Country Information *)
(*RASAPI*) LPRasCtryInfo = ^TRasCtryInfo;
(*RASAPI*) TRasCtryInfo = record
(*RASAPI*) dwSize,
(*RASAPI*) dwCountryID,
(*RASAPI*) dwNextCountryID,
(*RASAPI*) dwCountryCode,
(*RASAPI*) dwCountryNameOffset : Longint;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*)(* Describes RAS Device Information *)
(*RASAPI*) LPRasDevInfoA = ^TRasDevInfoA;
(*RASAPI*) TRasDevInfoA = record
(*RASAPI*) dwSize : Longint;
(*RASAPI*) szDeviceType : Array[0..RAS_MaxDeviceType] of AnsiChar;
(*RASAPI*) szDeviceName : Array[0..RAS_MaxDeviceName] of AnsiChar;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasDevInfoW = ^TRasDevInfoW;
(*RASAPI*) TRasDevInfoW = record
(*RASAPI*) dwSize : Longint;
(*RASAPI*) szDeviceType : Array[0..RAS_MaxDeviceType] of WideChar;
(*RASAPI*) szDeviceName : Array[0..RAS_MaxDeviceName] of WideChar;
(*RASAPI*) end;
(*RASAPI*)
(*RASAPI*) LPRasDevInfo = ^TRasDevInfo;
(*RASAPI*) TRasDevInfo = TRasDevInfoA;
(*RASAPI*)
(*RASAPI*)const
(*RASAPI*)(* TRasEntry 'dwfOptions' bit flags. *)
(*RASAPI*) RASEO_UseCountryAndAreaCodes = $00000001;
(*RASAPI*) RASEO_SpecificIpAddr = $00000002;
(*RASAPI*) RASEO_SpecificNameServers = $00000004;
(*RASAPI*) RASEO_IpHeaderCompression = $00000008;
(*RASAPI*) RASEO_RemoteDefaultGateway = $00000010;
(*RASAPI*) RASEO_DisableLcpExtensions = $00000020;
(*RASAPI*) RASEO_TerminalBeforeDial = $00000040;
(*RASAPI*) RASEO_TerminalAfterDial = $00000080;
(*RASAPI*) RASEO_ModemLights = $00000100;
(*RASAPI*) RASEO_SwCompression = $00000200;
(*RASAPI*) RASEO_RequireEncryptedPw = $00000400;
(*RASAPI*) RASEO_RequireMsEncryptedPw = $00000800;
(*RASAPI*) RASEO_RequireDataEncryption = $00001000;
(*RASAPI*) RASEO_NetworkLogon = $00002000;
(*RASAPI*) RASEO_UseLogonCredentials = $00004000;
(*RASAPI*) RASEO_PromoteAlternates = $00008000;
(*RASAPI*)
(*RASAPI*)(* TRasEntry 'dwfNetProtocols' bit flags. (session negotiated protocols) *)
(*RASAPI*) RASNP_Netbeui = $00000001; // Negotiate NetBEUI
(*RASAPI*) RASNP_Ipx = $00000002; // Negotiate IPX
(*RASAPI*) RASNP_Ip = $00000004; // Negotiate TCP/IP
(*RASAPI*)
(*RASAPI*)(* TRasEntry 'dwFramingProtocols' (framing protocols used by the server) *)
(*RASAPI*) RASFP_Ppp = $00000001; // Point-to-Point Protocol (PPP)
(*RASAPI*) RASFP_Slip = $00000002; // Serial Line Internet Protocol (SLIP)
(*RASAPI*) RASFP_Ras = $00000004; // Microsoft proprietary protocol
(*RASAPI*)
(*RASAPI*)(* TRasEntry 'szDeviceType' strings *)
(*RASAPI*) RASDT_Modem = 'modem'; // Modem
(*RASAPI*) RASDT_Isdn = 'isdn'; // ISDN
(*RASAPI*) RASDT_X25 = 'x25'; // X.25
(*RASAPI*) RASDT_VPN = 'VPN';
(*RASAPI*)(* RAS functions found in RNAPH.DLL *)
(*RASAPI*)function RasValidateEntryNameA(lpszPhonebook,szEntry: PAnsiChar): Longint; stdcall;
(*RASAPI*)function RasValidateEntryNameW(lpszPhonebook,szEntry: PWideChar): Longint; stdcall;
(*RASAPI*)function RasValidateEntryName(lpszPhonebook,szEntry: PAnsiChar): Longint; stdcall;
(*RASAPI*)
(*RASAPI*)function RasRenameEntryA(lpszPhonebook,szEntryOld,szEntryNew: PAnsiChar): Longint; stdcall;
(*RASAPI*)function RasRenameEntryW(lpszPhonebook,szEntryOld,szEntryNew: PWideChar): Longint; stdcall;
(*RASAPI*)function RasRenameEntry(lpszPhonebook,szEntryOld,szEntryNew: PAnsiChar): Longint; stdcall;
(*RASAPI*)
(*RASAPI*)function RasDeleteEntryA(lpszPhonebook,szEntry: PAnsiChar): Longint; stdcall;
(*RASAPI*)function RasDeleteEntryW(lpszPhonebook,szEntry: PWideChar): Longint; stdcall;
(*RASAPI*)function RasDeleteEntry(lpszPhonebook,szEntry: PAnsiChar): Longint; stdcall;
(*RASAPI*)
(*RASAPI*)function RasGetEntryPropertiesA(lpszPhonebook, szEntry: PAnsiChar; lpbEntry: Pointer;
(*RASAPI*) var lpdwEntrySize: Longint; lpbDeviceInfo: Pointer;
(*RASAPI*) var lpdwDeviceInfoSize: Longint): Longint; stdcall;
(*RASAPI*)function RasGetEntryPropertiesW(lpszPhonebook, szEntry: PWideChar; lpbEntry: Pointer;
(*RASAPI*) var lpdwEntrySize: Longint; lpbDeviceInfo: Pointer;
(*RASAPI*) var lpdwDeviceInfoSize: Longint): Longint; stdcall;
(*RASAPI*)function RasGetEntryProperties(lpszPhonebook, szEntry: PAnsiChar; lpbEntry: Pointer;
(*RASAPI*) var lpdwEntrySize: Longint; lpbDeviceInfo: Pointer;
(*RASAPI*) var lpdwDeviceInfoSize: Longint): Longint; stdcall;
(*RASAPI*)
(*RASAPI*)function RasSetEntryPropertiesA(lpszPhonebook, szEntry: PAnsiChar; lpbEntry: Pointer;
(*RASAPI*) dwEntrySize: Longint; lpbDeviceInfo: Pointer;
(*RASAPI*) dwDeviceInfoSize: Longint): Longint; stdcall;
(*RASAPI*)function RasSetEntryPropertiesW(lpszPhonebook, szEntry: PWideChar; lpbEntry: Pointer;
(*RASAPI*) dwEntrySize: Longint; lpbDeviceInfo: Pointer;
(*RASAPI*) dwDeviceInfoSize: Longint): Longint; stdcall;
(*RASAPI*)function RasSetEntryProperties(lpszPhonebook, szEntry: PAnsiChar; lpbEntry: Pointer;
(*RASAPI*) dwEntrySize: Longint; lpbDeviceInfo: Pointer;
(*RASAPI*) dwDeviceInfoSize: Longint): Longint; stdcall;
(*RASAPI*)
(*RASAPI*)function RasGetCountryInfoA(var lpCtryInfo: TRasCtryInfo;var lpdwSize: Longint): Longint; stdcall;
(*RASAPI*)function RasGetCountryInfoW(var lpCtryInfo: TRasCtryInfo;var lpdwSize: Longint): Longint; stdcall;
(*RASAPI*)function RasGetCountryInfo(var lpCtryInfo: TRasCtryInfo;var lpdwSize: Longint): Longint; stdcall;
(*RASAPI*)
(*RASAPI*)function RasEnumDevicesA(lpBuff: LpRasDevInfoA; var lpcbSize: Longint;
(*RASAPI*) var lpcDevices: Longint): Longint; stdcall;
(*RASAPI*)function RasEnumDevicesW(lpBuff: LpRasDevInfoW; var lpcbSize: Longint;
(*RASAPI*) var lpcDevices: Longint): Longint; stdcall;
(*RASAPI*)function RasEnumDevices(lpBuff: LpRasDevInfo; var lpcbSize: Longint;
(*RASAPI*) var lpcDevices: Longint): Longint; stdcall;
(*RASAPI*)
{******************************************************}
{******************************************************}
{******************************************************}
{******************************************************}
{******************************************************}
{******************************************************}
const MaxEntries = 100; //It's enough
type
TOnEntryGet = procedure (Sender : TObject; EntryName : Array of {Ansi}Char) of Object;
TStandartEv = procedure (Sender : TObject) of object;
TOnNotConn = procedure (Sender : TObject; ErrorCode : Integer; ErrorMessage : String) of object;
TOnAsyncEvent = procedure (Sender : TObject; State : TRasConnState; Error : Integer;
MessageText : String) of object;
TOnError = procedure (Sender : TObject; ErrorCode : Integer; ErrorMessage : String) of Object;
TOnActiveConn = procedure (Sender : TObject; Handle : THRasConn; Status : TRasConnStatus;
StatusString : String;
EntryName, DeviceType, DeviceName : Array of Char) of object;
TDialMode = (dmAsync,dmSync); //dmAsync - Function will exit BEFORE finishing dialing
// Events : onDialing,onError,onAsyncEvent
//dmSync - Function will exit AFTER finishing dialing
// Events : onDialing,onConnect,onNotConnected
TLanguage = (English,Czech);
TDialUp = class(TComponent)
private
FEntries : TStringList;
FDialMode : TDialMode;
FEntry2Dial : String;
FLanguage : TLanguage;
FTimer : TTimer;
FOnEntryGet : TOnEntryGet;
FOnDialing, FOnConnected : TStandartEv;
FOnNotConnected : TOnNotConn;
FOnAsyncEvent : TOnAsyncEvent;
FOnError : TOnError;
FOnActiveConn : TOnActiveConn;
protected
procedure Timer(Sender: TObject); virtual;
public
hRAS : ThRASConn; {Handle to RAS connection dialed with by this component when connected}
AsyncStatus : Boolean;
AMsg,AError : Integer;
AState : TRasConnState;
constructor Create(AOwner:TComponent); override;
destructor Destroy; override;
function Dial : Integer;
function GetEntries : Integer;
function GetConnections : Integer;
function HangUp : Integer;
function HangUpConn(Handle : THRasConn) : Integer;
function CreateEntry : Integer;
function EditEntry : Integer;
function DeleteEntry : Integer;
function RenameEntryTo(S : String) : Integer;
function SetEntryUserName(Value : String) : Integer;
function SetEntryPassword(Value : String) : Integer;
function RemovePassword : Integer;
function GetEntryUserName(var Value : String) : Integer;
function GetEntryPassword(var Value : String) : Integer;
function StatusString(State: TRasConnState; Error: Integer): String;
function StatusStringCZ(State: TRasConnState; Error: Integer): String;
published
property Name;
property Tag;
property DialMode : TDialMode
read FDialMode write FDialMode;
property Entries : TStringList
read FEntries;
property Entry : String
read FEntry2Dial write FEntry2Dial;
property Language : TLanguage
read FLanguage write FLanguage;
property OnEntryGet : TOnEntryGet
read FOnEntryGet write FOnEntryGet;
property OnDialing : TStandartEv
read FOnDialing write FOnDialing;
property OnConnect : TStandartEv
read FOnConnected write FOnConnected;
property OnNotConnected : TOnNotConn
read FOnNotConnected write FOnNotConnected;
property OnAsyncEvent : TOnAsyncEvent
read FOnAsyncEvent write FOnAsyncEvent;
property OnError : TOnError
read FOnError write FOnError;
property OnActiveConnection : TOnActiveConn
read FOnActiveConn write FOnActiveConn;
end;
procedure Register;
implementation
var xSelf : Pointer;
procedure TDialUp.Timer(Sender: TObject);
begin
FTimer.Enabled:=False;
if AsyncStatus=False then Exit;
if Language=Czech then
begin
if Assigned(FOnAsyncEvent) then FOnAsyncEvent(Self,AState,AError,StatusStringCZ(AState, AError));
end else
begin
if Assigned(FOnAsyncEvent) then FOnAsyncEvent(Self,AState,AError,StatusString(AState, AError));
end;
AsyncStatus:=False;
end;

procedure RasCallback(msg: Integer; state: TRasConnState;
error: Integer); stdcall;
begin
While TDialUp(xSelf).AsyncStatus=True do ;
TDialUp(xSelf).AsyncStatus:=True;
TDialUp(xSelf).AMsg:=Msg;
TDialUp(xSelf).AState:=State;
TDialUp(xSelf).AError:=Error;
TDialUp(xSelf).FTimer.Enabled:=True;
// TDialUp(xSelf).FOnDialing(xSelf);
// TDialUp(xSelf).OnAsyncEvent(xSelf,State,Error,TDialUp(xSelf).StatusString(state, error));
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
//procedure RasCallback(Msg: Integer; State: TRasConnState; Error: Integer); stdcall; forward;
procedure Register;
begin
RegisterComponents('Internet',[TDialUp]);
end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
constructor TDialUp.Create(AOwner:TComponent);
begin
inherited Create(AOwner);
AsyncStatus:=False;
FEntries:=TStringList.Create;
FTimer:=TTimer.Create(Self);
FTimer.Enabled:=False; FTimer.Interval:=1;
FTimer.OnTimer:=Timer;
end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
destructor TDialUp.Destroy;
begin
inherited Destroy;
FEntries.Free;
end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
Function TDialUp.Dial : Integer;
var
Fp : LongBool;
R : Integer;
C : Array[0..100] of Char;
ErrS : String;
DialParams : TRasDialParams;
begin
HangUp;
FillChar(DialParams, SizeOf(TRasDialParams), 0);
with DialParams do
begin
dwSize:=Sizeof(TRasDialParams);
StrPCopy(szEntryName, FEntry2Dial);
end;
R:=RasGetEntryDialParams(nil, DialParams, Fp);
if R<>0 then
begin
Result:=R;
if Assigned(FOnError) then FOnError(Self,R,'GetEntryDialParams failed');
Exit;
end;
hRAS:=0;
if DialMode=dmSync then // Synchronous dial
begin
if Assigned(FOnDialing) then FOnDialing(Self);
R:=RasDial(nil, nil, DialParams, 0, nil, hRAS);
if R=0 then
begin
if Assigned(FOnConnected) then
FOnConnected(Self)
end else
begin
if hRas<>0 then
RasHangUp(hRas);
RasGetErrorString(R, C, 100); ErrS:=C;
if Assigned(FOnNotConnected) then FOnNotConnected(Self,R,ErrS);
end;
end else // Asynchronous dial
begin
// Async dial
xSelf:=Self;
if Assigned(FOnDialing) then FOnDialing(Self);
R:=RasDial(nil, nil, DialParams, 0, @RasCallback, hRAS);
if R<>0 then
begin
RasGetErrorString(R,C,100);
if Assigned(FOnError) then FOnError(Self,R,C);
end;
end;
Result:=R;
end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
Function TDialUp.GetEntries : Integer;
var
BuffSize : Integer;
Entries : Integer;
Entry : Array[1..MaxEntries] of TRasEntryName;
X,Result_ : Integer;
begin
Result:=0;
FEntries.Clear;
Entry[1].dwSize:=SizeOf(TRasEntryName);
BuffSize:=SizeOf(TRasEntryName)*MaxEntries;
Result_:=RasEnumEntries(nil, nil, @Entry[1], BuffSize, Entries);
if (Result_=0) and (Entries>0) then
begin
for X:=1 to Entries do
begin
FEntries.Add(Entry[x].szEntryName);
If Assigned(FOnEntryGet) then FOnEntryGet(Self,Entry[x].szEntryName);
end;
end else
Result:=Result_;
end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
Function TDialUp.GetConnections : Integer;
var
BufSize : Integer;
NumEntries : Integer;
X : Integer;
Entries : Array[1..MaxEntries] of TRasConn;
Stat : TRasConnStatus;
Result_ : Integer;
S : String;
begin
Result:=0;
Entries[1].dwSize := SizeOf(TRasConn);
Bufsize:=SizeOf(TRasConn)*MaxEntries;
FillChar(Stat, Sizeof(TRasConnStatus), 0);
Stat.dwSize:=Sizeof(TRasConnStatus);
Result_:=RasEnumConnections(@Entries[1], BufSize, NumEntries);
if Result_=0 then
begin
if NumEntries > 0 then
for X:=1 to NumEntries do
begin
RasGetConnectStatus(Entries[X].HRasConn, Stat);
if Language=Czech then S:=StatusStringCZ(Stat.RasConnState, Stat.dwError) else
S:=StatusString(Stat.RasConnState, Stat.dwError);
if Assigned(FOnActiveConn) then FOnActiveConn(Self, Entries[X].HRasConn,
Stat, S,
Entries[X].szEntryName,
Entries[X].szDeviceType,
Entries[X].szDeviceName);
end;
end else Result:=Result_;
end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
Function TDialUp.HangUp : Integer;
begin
Result:=RasHangUp(hRas);
end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
Function TDialUp.HangUpConn(Handle : THRasConn) : Integer;
begin
Result:=RasHangUp(Handle);
end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}

Function TDialUp.CreateEntry : Integer;
begin
if (Owner is TForm) then
Result:=RasCreatePhonebookEntry((Owner as TForm).Handle, nil) else
Result:=RasCreatePhonebookEntry(0, nil);
end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
Function TDialUp.EditEntry : Integer;
begin
if (Owner is TForm) then
Result:=RasEditPhonebookEntry((Owner as TForm).Handle, nil, PChar(FEntry2Dial)) else
Result:=RasEditPhonebookEntry(0, nil, PChar(FEntry2Dial));
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
Function TDialUp.RenameEntryTo(S : String) : Integer;
begin
Result:=RasRenameEntry(nil, PChar(FEntry2Dial), PChar(S));
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
Function TDialUp.DeleteEntry : Integer;
begin
Result:=RasDeleteEntry(nil, PChar(FEntry2Dial))
end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
function TDialUp.SetEntryUserName(Value : String) : Integer;
var DialParams : TRasDialParams;
begin
with DialParams do
begin
dwSize:=Sizeof(TRasDialParams);
StrPCopy(szEntryName, PChar(FEntry2Dial));
StrPCopy(szUserName, Value);
end;
Result:=RasSetEntryDialParams(nil, DialParams, False);
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
function TDialUp.SetEntryPassword(Value : String) : Integer;
var DialParams : TRasDialParams;
begin
with DialParams do
begin
dwSize:=Sizeof(TRasDialParams);
StrPCopy(szEntryName, PChar(FEntry2Dial));
StrPCopy(szPassword, Value);
end;
Result:=RasSetEntryDialParams(nil, DialParams, False);
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
function TDialUp.RemovePassword : Integer;
var DialParams : TRasDialParams;
begin
with DialParams do
begin
dwSize:=Sizeof(TRasDialParams);
StrPCopy(szEntryName, PChar(FEntry2Dial));
end;
Result:=RasSetEntryDialParams(nil, DialParams, True);
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
function TDialUp.GetEntryUserName(var Value : String) : Integer;
var
Fp : LongBool;
R : Integer;
// C : Array[0..100] of Char;
DialParams : TRasDialParams;
begin
FillChar(DialParams, SizeOf(TRasDialParams), 0);
with DialParams do
begin
dwSize:=Sizeof(TRasDialParams);
StrPCopy(szEntryName, FEntry2Dial);
end;
R:=RasGetEntryDialParams(nil, DialParams, Fp);
if R=0 then
with DialParams do
begin
Value:=szUserName;
end;
Result:=R;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
function TDialUp.GetEntryPassword(var Value : String) : Integer;
var
Fp : LongBool;
R : Integer;
// C : Array[0..100] of Char;
DialParams : TRasDialParams;
begin
FillChar(DialParams, SizeOf(TRasDialParams), 0);
with DialParams do
begin
dwSize:=Sizeof(TRasDialParams);
StrPCopy(szEntryName, FEntry2Dial);
end;
R:=RasGetEntryDialParams(nil, DialParams, Fp);
if R=0 then
with DialParams do
begin
if Fp then
Value:=szPassword else Value:='';
end;
Result:=R;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
function TDialUp.StatusString(State: TRasConnState; Error: Integer): String;
var
C : Array[0..100] of Char;
S : String;
begin
if Error<>0 then
begin
RasGetErrorString(Error, C, 100);
Result:=C;
end else
begin
S:='';
case State of
RASCS_OpenPort:
S:='Opening port';
RASCS_PortOpened:
S:='Port opened';
RASCS_ConnectDevice:
S:='Connecting device';
RASCS_DeviceConnected:
S:='Device connected';
RASCS_AllDevicesConnected:
S:='All devices connected';
RASCS_Authenticate:
S:='Start authenticating';
RASCS_AuthNotify:
S:='Authentication: notify';
RASCS_AuthRetry:
S:='Authentication: retry';
RASCS_AuthCallback:
S:='Authentication: callback';
RASCS_AuthChangePassword:
S:='Authentication: change password';
RASCS_AuthProject:
S:='Authentication: projecting';
RASCS_AuthLinkSpeed:
S:='Authentication: link speed';
RASCS_AuthAck:
S:='Authentication: acknowledge';
RASCS_ReAuthenticate:
S:='Authentication: reauthenticate';
RASCS_Authenticated:
S:='Authenticated';
RASCS_PrepareForCallback:
S:='Preparing for callback';
RASCS_WaitForModemReset:
S:='Waiting for modem reset';
RASCS_WaitForCallback:
S:='Waiting for callback';
RASCS_Projected:
S:='Projected';
RASCS_StartAuthentication:
S:='Start authentication';
RASCS_CallbackComplete:
S:='Callback complete';
RASCS_LogonNetwork:
S:='Logging on network';
RASCS_Interactive:
S:='Interactive';
RASCS_RetryAuthentication:
S:='Retry Authentication';
RASCS_CallbackSetByCaller:
S:='Callback set by caller';
RASCS_PasswordExpired:
S:='Password expired';
RASCS_Connected:
S:='Connected';
RASCS_Disconnected:
S:='Disconnected';
end;
Result:=S;
end;
end;
function TDialUp.StatusStringCZ(State: TRasConnState; Error: Integer): String;
var
C : Array[0..100] of Char;
S : String;
begin
if Error<>0 then
begin
RasGetErrorString(Error, C, 100);
Result:=C;
end else
begin
S:='';
S:='';
case State of
RASCS_OpenPort:
S:='Opening port';
RASCS_PortOpened:
S:='Port opened';
RASCS_ConnectDevice:
S:='Connecting device';
RASCS_DeviceConnected:
S:='Device connected';
RASCS_AllDevicesConnected:
S:='All devices connected';
RASCS_Authenticate:
S:='Start authenticating';
RASCS_AuthNotify:
S:='Authentication: notify';
RASCS_AuthRetry:
S:='Authentication: retry';
RASCS_AuthCallback:
S:='Authentication: callback';
RASCS_AuthChangePassword:
S:='Authentication: change password';
RASCS_AuthProject:
S:='Authentication: projecting';
RASCS_AuthLinkSpeed:
S:='Authentication: link speed';
RASCS_AuthAck:
S:='Authentication: acknowledge';
RASCS_ReAuthenticate:
S:='Authentication: reauthenticate';
RASCS_Authenticated:
S:='Authenticated';
RASCS_PrepareForCallback:
S:='Preparing for callback';
RASCS_WaitForModemReset:
S:='Waiting for modem reset';
RASCS_WaitForCallback:
S:='Waiting for callback';
RASCS_Projected:
S:='Projected';
RASCS_StartAuthentication:
S:='Start authentication';
RASCS_CallbackComplete:
S:='Callback complete';
RASCS_LogonNetwork:
S:='Logging on network';
RASCS_Interactive:
S:='Interactive';
RASCS_RetryAuthentication:
S:='Retry Authentication';
RASCS_CallbackSetByCaller:
S:='Callback set by caller';
RASCS_PasswordExpired:
S:='Password expired';
RASCS_Connected:
S:='Connected';
RASCS_Disconnected:
S:='Disconnected';
end;
Result:=S;
end;
end;
{****************************************************************************}
{****************************************************************************}
{****************************************************************************}
{****************************************************************************}
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
function RasCreatePhonebookEntryA; external 'rasapi32.dll' name 'RasCreatePhonebookEntryA';
function RasCreatePhonebookEntryW; external 'rasapi32.dll' name 'RasCreatePhonebookEntryW';
function RasCreatePhonebookEntry; external 'rasapi32.dll' name 'RasCreatePhonebookEntryA';
function RasDialA; external 'rasapi32.dll' name 'RasDialA';
function RasDialW; external 'rasapi32.dll' name 'RasDialW';
function RasDial; external 'rasapi32.dll' name 'RasDialA';
function RasEditPhonebookEntryA; external 'rasapi32.dll' name 'RasEditPhonebookEntryA';
function RasEditPhonebookEntryW; external 'rasapi32.dll' name 'RasEditPhonebookEntryW';
function RasEditPhonebookEntry; external 'rasapi32.dll' name 'RasEditPhonebookEntryA';
function RasEnumConnectionsA; external 'rasapi32.dll' name 'RasEnumConnectionsA';
function RasEnumConnectionsW; external 'rasapi32.dll' name 'RasEnumConnectionsW';
function RasEnumConnections; external 'rasapi32.dll' name 'RasEnumConnectionsA';
function RasEnumEntriesA; external 'rasapi32.dll' name 'RasEnumEntriesA';
function RasEnumEntriesW; external 'rasapi32.dll' name 'RasEnumEntriesW';
function RasEnumEntries; external 'rasapi32.dll' name 'RasEnumEntriesA';
function RasGetConnectStatusA; external 'rasapi32.dll' name 'RasGetConnectStatusA';
function RasGetConnectStatusW; external 'rasapi32.dll' name 'RasGetConnectStatusW';
function RasGetConnectStatus; external 'rasapi32.dll' name 'RasGetConnectStatusA';
function RasGetEntryDialParamsA; external 'rasapi32.dll' name 'RasGetEntryDialParamsA';
function RasGetEntryDialParamsW; external 'rasapi32.dll' name 'RasGetEntryDialParamsW';
function RasGetEntryDialParams; external 'rasapi32.dll' name 'RasGetEntryDialParamsA';
function RasGetErrorStringA; external 'rasapi32.dll' name 'RasGetErrorStringA';
function RasGetErrorStringW; external 'rasapi32.dll' name 'RasGetErrorStringW';
function RasGetErrorString; external 'rasapi32.dll' name 'RasGetErrorStringA';
function RasGetProjectionInfoA; external 'rasapi32.dll' name 'RasGetProjectionInfoA';
function RasGetProjectionInfoW; external 'rasapi32.dll' name 'RasGetProjectionInfoW';
function RasGetProjectionInfo; external 'rasapi32.dll' name 'RasGetProjectionInfoA';
function RasHangUpA; external 'rasapi32.dll' name 'RasHangUpA';
function RasHangUpW; external 'rasapi32.dll' name 'RasHangUpW';
function RasHangUp; external 'rasapi32.dll' name 'RasHangUpA';
function RasSetEntryDialParamsA; external 'rasapi32.dll' name 'RasSetEntryDialParamsA';
function RasSetEntryDialParamsW; external 'rasapi32.dll' name 'RasSetEntryDialParamsW';
function RasSetEntryDialParams; external 'rasapi32.dll' name 'RasSetEntryDialParamsA';
function RasValidateEntryNameA; external 'rasapi32.dll' name 'RasValidateEntryNameA';
function RasValidateEntryNameW; external 'rasapi32.dll' name 'RasValidateEntryNameW';
function RasRenameEntryA; external 'rasapi32.dll' name 'RasRenameEntryA';
function RasRenameEntryW; external 'rasapi32.dll' name 'RasRenameEntryW';
function RasDeleteEntryA; external 'rasapi32.dll' name 'RasDeleteEntryA';
function RasDeleteEntryW; external 'rasapi32.dll' name 'RasDeleteEntryW';
function RasGetEntryPropertiesA; external 'rasapi32.dll' name 'RasGetEntryPropertiesA';
function RasGetEntryPropertiesW; external 'rasapi32.dll' name 'RasGetEntryPropertiesW';
function RasSetEntryPropertiesA; external 'rasapi32.dll' name 'RasSetEntryPropertiesA';
function RasSetEntryPropertiesW; external 'rasapi32.dll' name 'RasSetEntryPropertiesW';
function RasGetCountryInfoA; external 'rasapi32.dll' name 'RasGetCountryInfoA';
function RasGetCountryInfoW; external 'rasapi32.dll' name 'RasGetCountryInfoW';
function RasEnumDevicesA; external 'rasapi32.dll' name 'RasEnumDevicesA';
function RasEnumDevicesW; external 'rasapi32.dll' name 'RasEnumDevicesW';
var
Rnaph_Initialized : Boolean = False;
Is_Rnaph : Boolean = False;
Lib : HModule;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
function Rnaph_(const func: String): Pointer;
begin
if not Rnaph_Initialized then
begin
// Try first with RASAPI32.DLL
Lib:=LoadLibrary('rasapi32.dll');
if Lib<>0 then
begin
Result:=GetProcAddress(Lib, PChar(Func 'A'));
if Result<>nil then
begin
Rnaph_Initialized:=True;
Exit;
end;
end else raise Exception.Create('Error opening rasapi.dll');
// function not found - try rnaph.dll
Lib:=LoadLibrary('rnaph.dll');
if Lib<>0 then
begin
Result:=GetProcAddress(Lib, PChar(Func));
if Result <> nil then
begin
Rnaph_Initialized:=True;
Is_Rnaph:=True;
Exit;
end else raise Exception.Create('Function ' Func ' not found!');
end else raise Exception.Create('Error opening rnaph.dll');
end else
begin
if Is_Rnaph then Result:=GetProcAddress(Lib,PChar(Func))
else Result:=GetProcAddress(lib,PChar(Func 'A'));
if Result=nil then raise Exception.Create('Function ' Func ' not found!');
end;
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
function RasValidateEntryName(lpszPhonebook, szEntry: PAnsiChar): Longint;
var
F : Function(lpszPhonebook, szEntry: PAnsiChar): Longint; stdcall;
begin
@F:=Rnaph_('RasValidateEntryName');
Result:=F(lpszPhonebook, szEntry);
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
function RasRenameEntry(lpszPhonebook, szEntryOld, szEntryNew: PAnsiChar): Longint;
var
F : function(lpszPhonebook, szEntryOld, szEntryNew: PAnsiChar): Longint; stdcall;
begin
@F:=rnaph_('RasRenameEntry');
Result:=F(lpszPhonebook, szEntryOld, szEntryNew);
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
function RasDeleteEntry(lpszPhonebook, szEntry: PAnsiChar): Longint;
var
F : function(lpszPhonebook, szEntry: PAnsiChar): Longint; stdcall;
begin
@F:=Rnaph_('RasDeleteEntry');
Result:=F(lpszPhonebook, szEntry);
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
function RasGetEntryProperties(lpszPhonebook, szEntry: PAnsiChar; lpbEntry: Pointer;
var lpdwEntrySize: Longint; lpbDeviceInfo: Pointer;
var lpdwDeviceInfoSize: Longint): Longint;
var
F : function(lpszPhonebook, szEntry: PAnsiChar; lpbEntry: Pointer;
lpdwEntrySize : Longint;
lpbDeviceInfo : Pointer;
lpdwDeviceInfoSize : Longint): Longint; stdcall;
begin
@F:=Rnaph_('RasGetEntryProperties');
Result:=F(lpszPhonebook, szEntry, lpbEntry, lpdwEntrySize, lpbDeviceInfo, lpdwDeviceInfoSize);
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
function RasSetEntryProperties(lpszPhonebook, szEntry: PAnsiChar;
lpbEntry: Pointer; dwEntrySize: Longint; lpbDeviceInfo: Pointer;
dwDeviceInfoSize: Longint): Longint;
var
F : function(lpszPhonebook, szEntry: PAnsiChar;
lpbEntry: Pointer; dwEntrySize: Longint;
lpbDeviceInfo: Pointer;
dwDeviceInfoSize: Longint): Longint; stdcall;
begin
@F:=Rnaph_('RasSetEntryProperties');
Result:=F(lpszPhonebook, szEntry, lpbEntry, dwEntrySize, lpbDeviceInfo, dwDeviceInfoSize);
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
function RasGetCountryInfo(var lpCtryInfo: TRasCtryInfo; var lpdwSize: Longint): Longint;
var
F : function(var lpCtryInfo: TRasCtryInfo;
var lpdwSize: Longint): Longint; stdcall;
begin
@F:=Rnaph_('RasGetCountryInfo');
Result:=F(lpCtryInfo, lpdwSize);
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
function RasEnumDevices(lpBuff: LpRasDevInfo; var lpcbSize: Longint;
var lpcDevices: Longint): Longint;
var
F : function(lpBuff: LpRasDevInfo; var lpcbSize: Longint;
var lpcDevices: Longint): Longint; stdcall;
begin
@F:=Rnaph_('RasEnumDevices');
Result:=F(lpBuff, lpcbSize, lpcDevices);
end;
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
initialization
finalization
if Rnaph_initialized and Is_rnaph then FreeLibrary(lib);
end.

//-----------------------------------------RasAPI.Pas-End----------------------------------------------------------------

//-------------程序开始调用RAS进行建立连接和拨号-----------------

function StatusString(state: TRasConnState; error: Longint): String;
var
c: Array[0..100] of Char;
s: String;
begin
if error <> 0 then
begin
RasGetErrorString(error, c, 100);
Result := c;
end
else
begin
s := '';
case State of
{RASCS_OpenPort:
s := 'Opening port';
RASCS_PortOpened:
s := 'Port opened';
RASCS_ConnectDevice:
s := 'Connecting device';
RASCS_DeviceConnected:
s := 'Device connected';
RASCS_AllDevicesConnected:
s := 'All devices connected';
RASCS_Authenticate:
s := 'Start authenticating';
RASCS_AuthNotify:
s := 'Authentication: notify';
RASCS_AuthRetry:
s := 'Authentication: retry';
RASCS_AuthCallback:
s := 'Authentication: callback';
RASCS_AuthChangePassword:
s := 'Authentication: change password';
RASCS_AuthProject:
s := 'Authentication: projecting';
RASCS_AuthLinkSpeed:
s := 'Authentication: link speed';
RASCS_AuthAck:
s := 'Authentication: acknowledge';
RASCS_ReAuthenticate:
s := 'Authentication: reauthenticate';
RASCS_Authenticated:
s := 'Authenticated';
RASCS_PrepareForCallback:
s := 'Preparing for callback';
RASCS_WaitForModemReset:
s := 'Waiting for modem reset';
RASCS_WaitForCallback:
s := 'Waiting for callback';
RASCS_Projected:
s := 'Projected';
RASCS_StartAuthentication:
s := 'Start authentication';
RASCS_CallbackComplete:
s := 'Callback complete';
RASCS_LogonNetwork:
s := 'Logging on network';
RASCS_Interactive:
s := 'Interactive';
RASCS_RetryAuthentication:
s := 'Retry Authentication';
RASCS_CallbackSetByCaller:
s := 'Callback set by caller';}
RASCS_PasswordExpired:
s := '密码错误';
RASCS_Connected:
s := '连接成功';
RASCS_Disconnected:
s := '断开连接';
end;
Result := s;
end;
end;

//-------------------------以上回调函数,检测RAS状态----------------


procedure TForm1.Button1Click(Sender: TObject);
var
nResult: Integer;
RasDialParams: TRasDialParams;
sError:array [0..255] of char;
begin
if nRas <> 0 then RasHangUp(nRas);
FillChar(RasDialParams, SizeOf(RasDialParams), #0);
RasDialParams.dwSize := SizeOf(TRasDialParams);
StrPCopy(RasDialParams.szEntryName,'游戏专用连接');
StrPCopy(RasDialParams.szUserName, 'VpnServerDialUsername'); //<--用户名
StrPCopy(RasDialParams.szPassword, 'VpnServerDialUserpassword'); //<--密码
nRas := 0;
Edit1.Text := '正在准备连接,请稍后...';
Edit1.Refresh;
nResult := RasDial(nil, nil, RasDialParams, 0, @RasCallback, nRas);
if nResult <> 0 then RasGetErrorString(nResult, @sError, 100);
Edit1.text := sError;
end;
//----------------------------------建立连接--------------------------------------------------

//----------------------------------开始拨号-------------------------------------------------

procedure connectionit();
var
szEntryName: string;
RasEntry: TRasEntryA;
rasEntrySize: DWORD;
nResult: Integer;
begin

szEntryName := '游戏专用连接';
RasEntrySize := SizeOf(TRasEntry);
FillChar(RasEntry, SizeOf(TRasEntry), #0);
RasEntry.dwSize := RasEntrySize;
RasEntry.dwfOptions := RASEO_RequireMsEncryptedPw or RASEO_RequireDataEncryption;
StrPCopy(RasEntry.szLocalPhoneNumber,'VpnServerIpaddress');
StrPCopy(RasEntry.szDeviceName, 'RAS VPN Line 0');
StrPCopy(RasEntry.szDeviceType, RASDT_VPN);
nResult := RasSetEntryProperties(nil, Pchar(szEntryName), @RasEntry, SizeOf(TRasEntry), nil, 0);

end;

以上列子是完整的,在程序开头要声明一下nRas:integer;

就好了

另外,我有一个比较困难的问题,如何控制VPN的速度,比如限制连接2Mbps以内,这个该怎么做,大家一起探讨一下。
------
good boy
系統時間:2024-05-03 14:50:59
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!