📄 ras.pas
字号:
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 + -