⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ras.pas

📁 Delphi的另一款钢琴软件
💻 PAS
📖 第 1 页 / 共 5 页
字号:
uses syncobjs, sysutils;

const
  rasdll = 'rasapi32.dll';

var
  RASLibrary: THandle = 0;
  ReferenceCount: Integer = 0;
  Lock: TCriticalSection;
  RasVer401 : Boolean = False;

function RasGetStatusString (status : Integer) : string;
begin
  case status of
    RASCS_OpenPort            : result := 'Opening Port';
    RASCS_PortOpened          : result := 'Port Opened';
    RASCS_ConnectDevice       : result := 'Connecting to Device';
    RASCS_DeviceConnected     : result := 'Device Connected';
    RASCS_AllDevicesConnected : result := 'All Devices Connected';
    RASCS_Authenticate        : result := 'Authenticating';
    RASCS_AuthNotify          : result := 'Authenticating - Notify';
    RASCS_AuthRetry           : result := 'Authenticating - Retry';
    RASCS_AuthCallback        : result := 'Authenticating - Callback';
    RASCS_AuthChangePassword  : result := 'Authenticating - Change Password';
    RASCS_AuthProject         : result := 'Authenticating - Project';
    RASCS_AuthLinkSpeed       : result := 'Authenticating - Link Speed';
    RASCS_AuthAck             : result := 'Authenticating - Ack';
    RASCS_ReAuthenticate      : result := 'Re-Authenticating';
    RASCS_Authenticated       : result := 'Authenticated';
    RASCS_PrepareForCallback  : result := 'Preparing Callback';
    RASCS_WaitForModemReset   : result := 'Waiting for Modem Reset';
    RASCS_WaitForCallback     : result := 'Waiting for Callback';
    RASCS_Projected           : result := 'Projected';

    RASCS_StartAuthentication : result := 'Starting Authentication';
    RASCS_CallbackComplete    : result := 'Callback Completed';
    RASCS_LogonNetwork        : result := 'Network Logon';
    RASCS_SubEntryConnected   : result := 'Sub-Entry Connected';
    RASCS_SubEntryDisconnected: result := 'Syb-Entry Disconnected';

    RASCS_Interactive         : result := 'Paused - Interactive';
    RASCS_RetryAuthentication : result := 'Retry Authentication';
    RASCS_CallbackSetByCaller : result := 'Callback set by Caller';
    RASCS_PasswordExpired     : result := 'Password Expired';

    RASCS_Connected           : result := 'Connected';
    RASCS_Disconnected        : result := 'Disconnected';
    else result := 'Unknown status ' + IntToStr (status);
  end
end;

function InitRasLibrary : boolean;
begin
  Lock.Enter;
  try
    Inc(ReferenceCount);

    if (ReferenceCount = 1) and (RASLibrary = 0) then
    begin
      RASLibrary := LoadLibrary(rasdll);
      if RASLibrary > 0 then
      begin
        RasDialA := GetProcAddress(RASLibrary, 'RasDialA');
        RasDialW := GetProcAddress(RASLibrary, 'RasDialW');
        RasDial := RasDialA;

        RasEnumConnectionsA := GetProcAddress(RASLibrary, 'RasEnumConnectionsA');
        RasEnumConnectionsW := GetProcAddress(RASLibrary, 'RasEnumConnectionsW');
        RasEnumConnections := TfnRasEnumConnections (RasEnumConnectionsA);

        RasEnumEntriesA := GetProcAddress(RASLibrary, 'RasEnumEntriesA');
        RasEnumEntriesW := GetProcAddress(RASLibrary, 'RasEnumEntriesW');
        RasEnumEntries := TfnRasEnumEntries (RasEnumEntriesA);

        RasGetConnectStatusA := GetProcAddress(RASLibrary, 'RasGetConnectStatusA');
        RasGetConnectStatusW := GetProcAddress(RASLibrary, 'RasGetConnectStatusW');
        RasGetConnectStatus := RasGetConnectstatusA;

        RasGetErrorStringA := GetProcAddress(RASLibrary, 'RasGetErrorStringA');
        RasGetErrorStringW := GetProcAddress(RASLibrary, 'RasGetErrorStringW');
        RasGetErrorString := RasGetErrorStringA;

        RasHangUpA := GetProcAddress(RASLibrary, 'RasHangUpA');
        RasHangUpW := GetProcAddress(RASLibrary, 'RasHangUpW');
        RasHangUp := RasHangUpA;

        RasGetProjectionInfoA := GetProcAddress(RASLibrary, 'RasGetProjectionInfoA');
        RasGetProjectionInfoW := GetProcAddress(RASLibrary, 'RasGetProjectionInfoW');
        RasGetProjectionInfo := RasGetProjectionInfoA;

        RasCreatePhonebookEntryA := GetProcAddress(RASLibrary, 'RasCreatePhonebookEntryA');
        RasCreatePhonebookEntryW := GetProcAddress(RASLibrary, 'RasCreatePhonebookEntryW');
        RasCreatePhonebookEntry := RasCreatePhonebookEntryA;

        RasEditPhonebookEntryA := GetProcAddress(RASLibrary, 'RasEditPhonebookEntryA');
        RasEditPhonebookEntryW := GetProcAddress(RASLibrary, 'RasEditPhonebookEntryW');
        RasEditPhonebookEntry := RasEditPhonebookEntryA;

        RasSetEntryDialParamsA := GetProcAddress(RASLibrary, 'RasSetEntryDialParamsA');
        RasSetEntryDialParamsW := GetProcAddress(RASLibrary, 'RasSetEntryDialParamsW');
        RasSetEntryDialParams := RasSetEntryDialParamsA;

        RasGetEntryDialParamsA := GetProcAddress(RASLibrary, 'RasGetEntryDialParamsA');
        RasGetEntryDialParamsW := GetProcAddress(RASLibrary, 'RasGetEntryDialParamsW');
        RasGetEntryDialParams := RasGetEntryDialParamsA;

        RasEnumDevicesA := GetProcAddress(RASLibrary, 'RasEnumDevicesA');
        RasEnumDevicesW := GetProcAddress(RASLibrary, 'RasEnumDevicesW');
        RasEnumDevices := TfnRasEnumDevices (RasEnumDevicesA);

        RasGetCountryInfoA := GetProcAddress(RASLibrary, 'RasGetCountryInfoA');
        RasGetCountryInfoW := GetProcAddress(RASLibrary, 'RasGetCountryInfoW');
        RasGetCountryInfo := TfnRasGetCountryInfo (RasGetCountryInfoA);

        RasGetEntryPropertiesA := GetProcAddress(RASLibrary, 'RasGetEntryPropertiesA');
        RasGetEntryPropertiesW := GetProcAddress(RASLibrary, 'RasGetEntryPropertiesW');
        RasGetEntryProperties := TfnRasGetEntryProperties (RasGetEntryPropertiesA);

        RasSetEntryPropertiesA := GetProcAddress(RASLibrary, 'RasSetEntryPropertiesA');
        RasSetEntryPropertiesW := GetProcAddress(RASLibrary, 'RasSetEntryPropertiesW');
        RasSetEntryProperties := RasSetEntryPropertiesA;

        RasRenameEntryA := GetProcAddress(RASLibrary, 'RasRenameEntryA');
        RasRenameEntryW := GetProcAddress(RASLibrary, 'RasRenameEntryW');
        RasRenameEntry := RasRenameEntryA;

        RasDeleteEntryA := GetProcAddress(RASLibrary, 'RasDeleteEntryA');
        RasDeleteEntryW := GetProcAddress(RASLibrary, 'RasDeleteEntryW');
        RasDeleteEntry := RasDeleteEntryA;

        RasValidateEntryNameA := GetProcAddress(RASLibrary, 'RasValidateEntryNameA');
        RasValidateEntryNameW := GetProcAddress(RASLibrary, 'RasValidateEntryNameW');
        RasValidateEntryName := RasValidateEntryNameA;

        RasGetSubEntryHandleA := GetProcAddress(RASLibrary, 'RasGetSubEntryHandleA');

        if Assigned (RasGetSubEntryHandleA) then
        begin
          RasVer401 := True;
          RasGetSubEntryHandleW := GetProcAddress(RASLibrary, 'RasGetSubEntryHandleW');
          RasGetSubEntryHandle := RasGetSubEntryHandleA;

          RasGetCredentialsA := GetProcAddress(RASLibrary, 'RasGetCredentialsA');
          RasGetCredentialsW := GetProcAddress(RASLibrary, 'RasGetCredentialsW');
          RasGetCredentials := RasGetCredentialsA;

          RasSetCredentialsA := GetProcAddress(RASLibrary, 'RasSetCredentialsA');
          RasSetCredentialsW := GetProcAddress(RASLibrary, 'RasSetCredentialsW');
          RasSetCredentials := RasSetCredentialsA;

          RasConnectionNotificationA := GetProcAddress(RASLibrary, 'RasConnectionNotificationA');
          RasConnectionNotificationW := GetProcAddress(RASLibrary, 'RasConnectionNotificationW');
          RasConnectionNotification := RasConnectionNotificationA;

          RasGetSubEntryPropertiesA := GetProcAddress(RASLibrary, 'RasGetSubEntryPropertiesA');
          RasGetSubEntryPropertiesW := GetProcAddress(RASLibrary, 'RasGetSubEntryPropertiesW');
          RasGetSubEntryProperties := TfnRasGetSubEntryProperties (RasGetSubEntryPropertiesA);

          RasSetSubEntryPropertiesA := GetProcAddress(RASLibrary, 'RasSetSubEntryPropertiesA');
          RasSetSubEntryPropertiesW := GetProcAddress(RASLibrary, 'RasSetSubEntryPropertiesW');
          RasSetSubEntryProperties := TfnRasSetSubEntryProperties (RasSetSubEntryPropertiesA);

          RasGetAutodialAddressA := GetProcAddress(RASLibrary, 'RasGetAutodialAddressA');
          RasGetAutodialAddressW := GetProcAddress(RASLibrary, 'RasGetAutodialAddressW');
          RasGetAutodialAddress := RasGetAutodialAddressA;

          RasSetAutodialAddressA := GetProcAddress(RASLibrary, 'RasSetAutodialAddressA');
          RasSetAutodialAddressW := GetProcAddress(RASLibrary, 'RasSetAutodialAddressW');
          RasSetAutodialAddress := RasSetAutodialAddressA;

          RasEnumAutodialAddressesA := GetProcAddress(RASLibrary, 'RasEnumAutodialAddressesA');
          RasEnumAutodialAddressesW := GetProcAddress(RASLibrary, 'RasEnumAutodialAddressesW');
          RasEnumAutodialAddresses := RasEnumAutodialAddressesA;

          RasGetAutodialEnableA := GetProcAddress(RASLibrary, 'RasGetAutodialEnableA');
          RasGetAutodialEnableW := GetProcAddress(RASLibrary, 'RasGetAutodialEnableW');
          RasGetAutodialEnable := RasGetAutodialEnableA;

          RasSetAutodialEnableA := GetProcAddress(RASLibrary, 'RasSetAutodialEnableA');
          RasSetAutodialEnableW := GetProcAddress(RASLibrary, 'RasSetAutodialEnableW');
          RasSetAutodialEnable := RasSetAutodialEnableA;

          RasGetAutodialParamA := GetProcAddress(RASLibrary, 'RasGetAutodialParamA');
          RasGetAutodialParamW := GetProcAddress(RASLibrary, 'RasGetAutodialParamW');
          RasGetAutodialParam := RasGetAutodialParamA;

          RasSetAutodialParamA := GetProcAddress(RASLibrary, 'RasSetAutodialParamA');
          RasSetAutodialParamW := GetProcAddress(RASLibrary, 'RasSetAutodialParamW');
          RasSetAutodialParam := RasSetAutodialParamA;
        end
      end;
    end;
    Result := RasLibrary > 0;
  finally
    Lock.Leave;
  end;
end;

procedure FreeRASLibrary;
begin
  Lock.Enter;
  try
    if ReferenceCount > 0 then
      Dec(ReferenceCount);

    if (RasLibrary <> 0) and (ReferenceCount = 0) then
    begin
      FreeLibrary(RasLibrary);
      RasLibrary := 0;

      RasDialA := Nil;
      RasDialA := Nil;
      RasDialW := Nil;
      RasEnumConnectionsA := Nil;
      RasEnumConnectionsW := Nil;
      RasEnumEntriesA := Nil;
      RasEnumEntriesW := Nil;
      RasGetConnectStatusA := Nil;
      RasGetConnectStatusW := Nil;
      RasGetErrorStringA := Nil;
      RasGetErrorStringW := Nil;
      RasHangUpA := Nil;
      RasHangUpW := Nil;
      RasGetProjectionInfoA := Nil;
      RasGetProjectionInfoW := Nil;
      RasCreatePhonebookEntryA := Nil;
      RasCreatePhonebookEntryW := Nil;
      RasEditPhonebookEntryA := Nil;
      RasEditPhonebookEntryW := Nil;
      RasSetEntryDialParamsA := Nil;
      RasSetEntryDialParamsW := Nil;
      RasGetEntryDialParamsA := Nil;
      RasGetEntryDialParamsW := Nil;
      RasEnumDevicesA := Nil;
      RasEnumDevicesW := Nil;
      RasGetCountryInfoA := Nil;
      RasGetCountryInfoW := Nil;
      RasGetEntryPropertiesA := Nil;
      RasGetEntryPropertiesW := Nil;
      RasSetEntryPropertiesA := Nil;
      RasSetEntryPropertiesW := Nil;
      RasRenameEntryA := Nil;
      RasRenameEntryW := Nil;
      RasDeleteEntryA := Nil;
      RasDeleteEntryW := Nil;
      RasValidateEntryNameA := Nil;
      RasValidateEntryNameW := Nil;
      RasDial := Nil;
      RasEnumConnections := Nil;
      RasEnumEntries := Nil;
      RasGetConnectStatus := Nil;
      RasGetErrorString := Nil;
      RasHangUp := Nil;
      RasGetProjectionInfo := Nil;
      RasCreatePhonebookEntry := Nil;
      RasEditPhonebookEntry := Nil;
      RasSetEntryDialParams := Nil;
      RasGetEntryDialParams := Nil;
      RasEnumDevices := Nil;
      RasGetCountryInfo := Nil;
      RasGetEntryProperties := Nil;
      RasSetEntryProperties := Nil;
      RasRenameEntry := Nil;
      RasDeleteEntry := Nil;
      RasValidateEntryName := Nil;


      RasGetSubEntryHandleA := Nil;
      RasGetSubEntryHandleW := Nil;
      RasGetCredentialsA := Nil;
      RasGetCredentialsW := Nil;
      RasSetCredentialsA := Nil;
      RasSetCredentialsW := Nil;
      RasConnectionNotificationA := Nil;
      RasConnectionNotificationW := Nil;
      RasGetSubEntryPropertiesA := Nil;
      RasGetSubEntryPropertiesW := Nil;
      RasSetSubEntryPropertiesA := Nil;
      RasSetSubEntryPropertiesW := Nil;
      RasGetAutodialAddressA := Nil;
      RasGetAutodialAddressW := Nil;
      RasSetAutodialAddressA := Nil;
      RasSetAutodialAddressW := Nil;
      RasEnumAutodialAddressesA := Nil;
      RasEnumAutodialAddressesW := Nil;
      RasGetAutodialEnableA := Nil;
      RasGetAutodialEnableW := Nil;
      RasSetAutodialEnableA := Nil;
      RasSetAutodialEnableW := Nil;
      RasGetAutodialParamA := Nil;
      RasGetAutodialParamW := Nil;
      RasSetAutodialParamA := Nil;
      RasSetAutodialParamW := Nil;
      RasGetSubEntryHandle := Nil;
      RasGetCredentials := Nil;
      RasSetCredentials := Nil;
      RasConnectionNotification := Nil;
      RasGetSubEntryProperties := Nil;
      RasSetSubEntryProperties := Nil;
      RasGetAutodialAddress := Nil;
      RasSetAutodialAddress := Nil;
      RasEnumAutodialAddresses := Nil;
      RasGetAutodialEnable := Nil;
      RasSetAutodialEnable := Nil;
      RasGetAutodialParam := Nil;
      RasSetAutodialParam := Nil;
    end;
  finally
    Lock.Leave;
  end;
end;

initialization
  Lock := TCriticalSection.Create;
finalization
  while ReferenceCount > 0 do
    FreeRasLibrary;
  Lock.Free;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -