[Home]  [Edit this page]  [Recent Changes]  [Special Pages]  [Help
DialupImport
unit URAS;
interface
uses Windows, SysUtils;
const
  // RAS field length constants
  RAS_MaxEntryName      = 256;
  RAS_MaxDeviceName     = 128;
  RAS_MaxDeviceType     = 16;
  RAS_MaxParamKey       = 32;
  RAS_MaxParamValue     = 128;
  RAS_MaxPhoneNumber    = 128;
  RAS_MaxCallbackNumber = 128;
  UNLEN                 = 256; // Maximum user name length
  PWLEN                 = 256; // Maximum password length
  DNLEN                 = 15;  // Maximum domain name length
  RAS_MaxIpAddress      = 15;
  ERROR_BUFFER_TOO_SMALL = 603;
  WM_RASDIALEVENT =     $CCCD;
  // RAS dwNotifierType constant
  RAS_NOTIFY_HWND = $FFFFFFFF;
  RAS_NOTIFY_FUNC1 = $0;
  // RAS Connection State
  RASCS_PAUSED               = $1000;
  RASCS_DONE                 = $2000;
  RASCS_OpenPort             = 0;
  RASCS_PortOpened           = 1;
  RASCS_ConnectDevice        = 2;
  RASCS_DeviceConnected      = 3;
  RASCS_AllDevicesConnnected = 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;
  RASCS_StartAuthentication  = 19;
  RASCS_CallbackComplete     = 20;
  RASCS_LogonNetwork         = 21;
  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;
  // RasProjection type
  RASP_PPPIP                 = $8021;
type
TEntryName = array[0..RAS_MaxEntryName] of char;
TRASErrorString = array[0..255] of char;
PRasEntryName = ^TRasEntryName;
TRasEntryName = record
  dwSize:       DWORD;
  szEntryName:  array[0..RAS_MaxEntryName] of char;
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;
PRasConn = ^TRasConn;
TRasConn = record
  dwSize:       DWORD;
  hRasConn:     THandle;
  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:       DWORD;
  RasConnState: DWORD;
  dwError:      DWORD;
  szDeviceType: array[0..RAS_MaxDeviceType] of char;
  szDeviceName: array[0..RAS_MaxDeviceName] of char;
end;
TRasDialExtensions = record
  dwSize:     DWORD;
  dwfOptions: DWORD;
  hwndParent: THandle;
  dwReserved: DWORD;
end;
PRasDialExtensions = ^TRasDialExtensions;
TRasPPPIP = record
  dwsize:      DWORD;
  dwerror:     DWORD;
  szlpAddress: array[0..RAS_MaxIpAddress] of char;
end;

TRasDialFunc1 = procedure (
    hrasconn: DWord;	// handle to RAS connection
    unMsg   : Cardinal;	// type of event that has occurred
    rascs   : Integer;	// connection state about to be entered
    dwError : DWORD;	// error that may have occurred
    dwExtendedError : DWORD);	// extended error information for some errors);
TRASDial = function (lpRasDialExtensions: PRasDialExtensions; lpszPhonebookPath: PAnsiChar;
  var lpRasDialParams: TRasDialParams; dwNotifierType: DWORD; notifier: Pointer;
  var lphRasConn: THandle): DWORD; stdcall;
TRASEnumEntries = function (lpszresrved: Pointer; lpszPhonebookPath: Pointer;
  lprasentryname: Pointer; var lpcb: DWORD; var lpcEntries: DWORD): DWord; stdcall;
TRASEnumConnections = function (lpRasConn: Pointer; var lpcb: DWORD;
  var lpcConnections: DWORD): DWORD; stdcall;
TRASHangUp=function (hRasConn: THandle): DWORD; stdcall;
TRASGetConnectStatus=function (hRasConn: THandle;
  var lpRasConnStatus: TRasConnStatus): DWORD; stdcall;
TRASGetErrorString=function (uErrorValue: UINT; var lpszErrorString: TRASErrorString;
  cBufSize: DWORD): DWORD; stdcall;
TRASGetEntryDialParams=function (lpszPhonebook : Pointer;
  var lpRasDialParams: TRasDialParams; var lpfPassword : LongBool): DWORD; stdcall;
TRASGetProjectionInfo=function (hRasConn: THandle; RasProjection: DWORD;
  var lpRasPPPIP: TRasPPPIP; var lpcb: DWORD): DWORD; stdcall;
var
  RASDial                          : TRASDial                 = nil;
  RASEnumEntries                   : TRASEnumEntries          = nil;
  RASEnumConnections               : TRASEnumConnections      = nil;
  RASHangUp                        : TRASHangUp               = nil;
  RASGetErrorString                : TRASGetErrorString       = nil;
  RASGetEntryDialParams            : TRASGetEntryDialParams   = nil;
  RASGetProjectionInfo             : TRASGetProjectionInfo    = nil;
  RASGetConnectStatus              : TRASGetConnectStatus     = nil;
procedure LoadRasModule;
procedure UnLoadRasModule;
implementation
var
  ModuleRef : Integer;
  Module    : DWord = 0;
procedure LoadRasModule;
begin
if ModuleRef = 0 then
  begin
  Module := LoadLibrary('RASAPI32.DLL');
  Win32Check(LongBool(Module));
  RASDial                          := GetProcAddress(Module, 'RasDialA');
  RASEnumEntries                   := GetProcAddress(Module, 'RasEnumEntriesA');
  RASEnumConnections               := GetProcAddress(Module, 'RasEnumConnectionsA');
  RASHangUp                        := GetProcAddress(Module, 'RasHangUpA');
  RASGetErrorString                := GetProcAddress(Module, 'RasGetErrorStringA');
  RASGetEntryDialParams            := GetProcAddress(Module, 'RasGetEntryDialParamsA');
  RASGetProjectionInfo             := GetProcAddress(Module, 'RasGetProjectionInfoA');
  RASGetConnectStatus              := GetProcAddress(Module, 'RasGetConnectStatusA');
  if not (Assigned(RASDial)
     and Assigned(RASEnumEntries)
     and Assigned(RASEnumConnections)
     and Assigned(RASHangUp)
     and Assigned(RASGetErrorString)
     and Assigned(RASGetEntryDialParams)
     and Assigned(RASGetProjectionInfo)
     and Assigned(RASGetConnectStatus)) then
    RaiseLastWin32Error;
  end;
Inc(ModuleRef);
end;
procedure UnLoadRasModule;
begin
Dec(ModuleRef);
if ModuleRef = 0 then
  begin
  FreeLibrary(Module);
  RASDial                := nil;
  RASEnumEntries         := nil;
  RASEnumConnections     := nil;
  RASHangUp              := nil;
  RASGetErrorString      := nil;
  RASGetEntryDialParams  := nil;
  RASGetProjectionInfo   := nil;
  RASGetConnectStatus    := nil;
  end;
end;
end.




last edited (March 27, 2004) by Masterijn, Number of views: 1803, Current Rev: 1

[Edit this page]  [Page history]  [What links here]  [Discuss this topic]  [Printer Friendly]  

Members

Username:

Password:


Register
Forgot Password?




Programmers Heaven - for .NET, Java, C/C++ and WEB Developers!
© 1996-2008 Community Networks Ltd. All rights reserved. Reproduction in whole or in part, in any form or medium without express written permission is prohibited. Violators of this policy may be subject to legal action. Please read Terms Of Use and Privacy Statement for more information. Development by Tore Nestenius at .NET Consultant - Synchron Data.