Contributor: SWAG SUPPORT TEAM {$D-,L-,Y-,A+,B-,F+,H+,I-,J-,M-,O+,P+,Q-,R-,T-,U+,V+,W-,X+,Z1}{$HINTS OFF}{$WARNINGS OFF} Unit RASAPI; Interface Uses WinTypes, WinProcs, Dialogs; { Copyright (c) 1992, Microsoft Corporation, all rights reserved Note: The 'dwSize' member of a structure X must be set to sizeof(X) before calling the associated API, otherwise ERROR_INVALID_SIZE is returned. The APIs determine the size using 2-byte packing (the default for Microsoft compilers when no /Zpoption is supplied). Users requiring non-default packing can use the 'dwSize' values listed next to each 'dwSize' member in place of sizeof(X). } Const UNLEN = 256; PWLEN = 256; DNLEN = 15; RAS_MaxEntryName = 256; RAS_MaxDeviceName = 128; RAS_MaxDeviceType = 16; //RAS_MaxParamKey = 32; //RAS_MaxParamValue = 128; RAS_MaxPhoneNumber = 128; RAS_MaxCallbackNumber = RAS_MaxPhoneNumber; Type //UINT = Word; PHRASConn = ^HRASConn; HRASConn = DWORD; { Pass this string to the RegisterWindowMessage() API to get the message ** number that will be used for notifications on the hwnd you pass to the ** RasDial() API. WM_RASDIALEVENT is used only if a unique message cannot be ** registered. } const RASDialEvent = 'RASDialEvent'; WM_RASDialEvent = $0CCCD; { Enumerates intermediate states to a Connection. (See RasDial) } RASCS_Paused = $1000; RASCS_Done = $2000; RASBase = 600; Success = 0; { Error Codes } 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_INVALID_BUFFER = (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 = (RASBase+64); 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_INVALID_WIN_HANDLE = (RASBase+107); ERROR_NO_PASSWORD = (RASBase+108); ERROR_NO_USERNAME = (RASBase+109); ERROR_CANNOT_START_STATE_MACHINE = (RASBase+110); ERROR_GETTING_COMMSTATE = (RASBase+111); ERROR_SETTING_COMMSTATE = (RASBase+112); ERROR_COMM_FUNCTION = (RASBase+113); ERROR_CONFIGURATION_PROBLEM = (RASBase+114); ERROR_X25_DIAGNOSTIC = (RASBase+115); ERROR_TOO_MANY_LINE_ERRORS = (RASBase+116); ERROR_OVERRUN = (RASBase+117); ERROR_ACCT_EXPIRED = (RASBase+118); ERROR_CHANGING_PASSWORD = (RASBase+119); ERROR_NO_ACTIVE_ISDN_LINES = (RASBase+120); ERROR_NO_ISDN_CHANNELS_AVAILABLE = (RASBase+121); 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_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 { Identifies an active RAS Connection. (See RasConnectEnum) } PRASConn = ^TRASConn; TRASConn = record dwSize: DWORD; rasConn: HRASConn; szEntryName: Array[0..RAS_MaxEntryName] Of Char; szDeviceType : Array[0..RAS_MaxDeviceType] Of Char; szDeviceName : Array [0..RAS_MaxDeviceName] of char; end; PRASConnStatus = ^TRASConnStatus; TRASConnStatus = Record dwSize: LongInt; rasConnstate: Word; dwError: LongInt; szDeviceType: Array[0..RAS_MaxDeviceType] Of Char; szDeviceName: Array[0..RAS_MaxDeviceName] Of Char; End; PRASDIALEXTENSIONS= ^TRASDIALEXTENSIONS; TRASDIALEXTENSIONS= Record dwSize: DWORD; dwfOptions: DWORD; hwndParent: HWnd; reserved: DWORD; end; PRASDialParams = ^TRASDialParams; TRASDialParams = Record dwSize: DWORD; szEntryName: Array[0..RAS_MaxEntryName] Of Char; szPhoneNumber: Array[0..RAS_MaxPhoneNumber] Of Char; szCallbackNumber: Array[0..RAS_MaxCallbackNumber] Of Char; szUserName: Array[0..UNLEN] Of Char; szPassword: Array[0..PWLEN] Of Char; szDomain: Array[0..DNLEN] Of Char; end; PRASEntryName = ^TRASEntryName; TRASEntryName = Record dwSize: LongInt; szEntryName: Array[0..RAS_MaxEntryName] Of Char; // Reserved: Byte; End; Function RasDial( lpRasDialExtensions : PRASDIALEXTENSIONS ; // pointer to function extensions data lpszPhonebook: PChar; // pointer to full path and filename of phonebook file lpRasDialParams : PRASDIALPARAMS; // pointer to calling parameters data dwNotifierType : DWORD; // specifies type of RasDial event handler lpvNotifier: DWORD; // specifies a handler for RasDial events var rasConn: HRASConn // pointer to variable to receive connection handle ): DWORD; stdcall; function RasEnumConnections(RASConn: PrasConn; { buffer to receive Connections data } var BufSize: DWord; { size in bytes of buffer } var Connections: DWord { number of Connections written to buffer } ): LongInt; stdcall; Function RasEnumEntries ( reserved: PChar; // reserved, must be NULL lpszPhonebook: PChar ; // pointer to full path and filename of phonebook file lprasentryname: PRASENTRYNAME ; // buffer to receive phonebook entries var lpcb : DWORD;// size in bytes of buffer var lpcEntries : DWORD// number of entries written to buffer ) : DWORD; stdcall; function RasGetConnectStatus(RASConn: hrasConn; { handle to Remote Access Connection of interest } RASConnStatus: PRASConnStatus { buffer to receive status data } ): LongInt; stdcall; function RasGetErrorString(ErrorCode: DWord; { error code to get string for } szErrorString: PChar; { buffer to hold error string } BufSize: DWord { sizeof buffer } ): LongInt; stdcall; function RasHangUp(RASConn: hrasConn { handle to the Remote Access Connection to hang up } ): LongInt; stdcall; function RasGetEntryDialParams( lpszPhonebook:PChar; // pointer to the full path and filename of the phonebook file VAR lprasdialparams:TRASDIALPARAMS; // pointer to a structure that receives the connection parameters VAR lpfPassword : BOOL // indicates whether the user's password was retrieved ): DWORD; stdcall; implementation const RAS_DLL = 'RASAPI32'; function RasDial; external RAS_DLL name 'RasDialA'; function RasEnumConnections; external RAS_DLL name 'RasEnumConnectionsA'; function RasEnumEntries; external RAS_DLL name 'RasEnumEntriesA'; function RasGetConnectStatus; external RAS_DLL name 'RasGetConnectStatusA'; function RasGetErrorString; external RAS_DLL name 'RasGetErrorStringA'; function RasHangUp; external RAS_DLL name 'RasHangUpA'; function RasGetEntryDialParams; external RAS_DLL name 'RasGetEntryDialParamsA'; end.