The RASEntry structure is used in the RASGetEntryProperties and RASSetEntryProperties functions. From the PlatformSDK, the structure is defined as follows:
typedef struct tagRASENTRY { DWORD dwSize; DWORD dwfOptions; // // Location/phone number. // DWORD dwCountryID; DWORD dwCountryCode; TCHAR szAreaCode[ RAS_MaxAreaCode + 1 ]; TCHAR szLocalPhoneNumber[ RAS_MaxPhoneNumber + 1 ]; DWORD dwAlternateOffset; // // PPP/Ip // RASIPADDR ipaddr; RASIPADDR ipaddrDns; RASIPADDR ipaddrDnsAlt; RASIPADDR ipaddrWins; RASIPADDR ipaddrWinsAlt; // // Framing // DWORD dwFrameSize; DWORD dwfNetProtocols; DWORD dwFramingProtocol; // // Scripting // TCHAR szScript[ MAX_PATH ]; // // AutoDial // TCHAR szAutodialDll[ MAX_PATH ]; TCHAR szAutodialFunc[ MAX_PATH ]; // // Device // TCHAR szDeviceType[ RAS_MaxDeviceType + 1 ]; TCHAR szDeviceName[ RAS_MaxDeviceName + 1 ]; // // X.25 // TCHAR szX25PadType[ RAS_MaxPadType + 1 ]; TCHAR szX25Address[ RAS_MaxX25Address + 1 ]; TCHAR szX25Facilities[ RAS_MaxFacilities + 1 ]; TCHAR szX25UserData[ RAS_MaxUserData + 1 ]; DWORD dwChannels; // // Reserved // DWORD dwReserved1; DWORD dwReserved2; #if (WINVER >= 0x401) // // Multilink and BAP // DWORD dwSubEntries; DWORD dwDialMode; DWORD dwDialExtraPercent; DWORD dwDialExtraSampleSeconds; DWORD dwHangUpExtraPercent; DWORD dwHangUpExtraSampleSeconds; // // Idle timeout // DWORD dwIdleDisconnectSeconds; #endif #if (WINVER >= 0x500) DWORD dwType; // entry type DWORD dwEncryptionType; // type of encryption to use DWORD dwCustomAuthKey; // authentication key for EAP GUID guidId; // guid that represents // the phone-book entry TCHAR szCustomDialDll[MAX_PATH]; // DLL for custom dialing DWORD dwVpnStrategy; // specifies type of VPN protocol #endif } RASENTRY;
Note how it has seven extra members if the Windows Version is &H401 or greater (NT4 enhancements) and another six members for windows 2000 (Version >=&H500). Also the RAS_MaxDeviceName constant is different for different platforms. For windows 95/98 and NT4 or later, it's value is 256. For earlier versions of NT (eg 3.51) it's value is 33. This gives us a possible 4 different sized structures for the RASENTRY structure, being 2088 (win2000), 1796 (NT4 enhancements), 1768 (win 95/98/NT4), or 1672 (NT3.51)
A common approach to this problem is to declare 4 different structures, check the windows version by calling the GetVersionEX() API function, then pass our values to and from the appropriate structure. I call this the SDKtoVB approach. The problem with that approach is it is difficult to update in the future, and the structures themselves are not really VB friendly - strings are stored as fixed length byte arrays , etc. Also we are relying on the windows platform and not the actual version of RASAPI on the system.
Another approach, is to start from the VB end and work towards the SDK format. I call this the VBtoSDK approach. The first step in this approach is to define the information we want as we would handle it in VB.
For the RASENTRY structure, our VB declaration with all the relevant substructures and enums would be as follows:
Public Type RASIPADDR a As Byte b As Byte c As Byte d As Byte End Type Public Enum RasEntryOptions RASEO_UseCountryAndAreaCodes = &H1 RASEO_SpecificIpAddr = &H2 RASEO_SpecificNameServers = &H4 RASEO_IpHeaderCompression = &H8 RASEO_RemoteDefaultGateway = &H10 RASEO_DisableLcpExtensions = &H20 RASEO_TerminalBeforeDial = &H40 RASEO_TerminalAfterDial = &H80 RASEO_ModemLights = &H100 RASEO_SwCompression = &H200 RASEO_RequireEncryptedPw = &H400 RASEO_RequireMsEncryptedPw = &H800 RASEO_RequireDataEncryption = &H1000 RASEO_NetworkLogon = &H2000 RASEO_UseLogonCredentials = &H4000 RASEO_PromoteAlternates = &H8000 RASEO_SecureLocalFiles = &H10000 RASEO_RequireEAP = &H20000 RASEO_RequirePAP = &H40000 RASEO_RequireSPAP = &H80000 RASEO_Custom = &H100000 RASEO_PreviewPhoneNumber = &H200000 RASEO_SharedPhoneNumbers = &H800000 RASEO_PreviewUserPw = &H1000000 RASEO_PreviewDomain = &H2000000 RASEO_ShowDialingProgress = &H4000000 RASEO_RequireCHAP = &H8000000 RASEO_RequireMsCHAP = &H10000000 RASEO_RequireMsCHAP2 = &H20000000 RASEO_RequireW95MSCHAP = &H40000000 RASEO_CustomScript = &H80000000 End Enum Public Enum RASNetProtocols RASNP_NetBEUI = &H1 RASNP_Ipx = &H2 RASNP_Ip = &H4 End Enum Public Enum RasFramingProtocols RASFP_Ppp = &H1 RASFP_Slip = &H2 RASFP_Ras = &H4 End Enum
Public Type VBRasEntry Options As RasEntryOptions CountryID As Long CountryCode As Long AreaCode As String LocalPhoneNumber As String AlternateNumbers As String ipAddr As RASIPADDR ipAddrDns As RASIPADDR ipAddrDnsAlt As RASIPADDR ipAddrWins As RASIPADDR ipAddrWinsAlt As RASIPADDR FrameSize As Long fNetProtocols As RASNetProtocols FramingProtocol As RasFramingProtocols ScriptName As String AutodialDll As String AutodialFunc As String DeviceType As String DeviceName As String X25PadType As String X25Address As String X25Facilities As String X25UserData As String Channels As Long NT4En_SubEntries As Long NT4En_DialMode As Long NT4En_DialExtraPercent As Long NT4En_DialExtraSampleSeconds As Long NT4En_HangUpExtraPercent As Long NT4En_HangUpExtraSampleSeconds As Long NT4En_IdleDisconnectSeconds As Long Win2000_Type As Long Win2000_EncryptionType As Long Win2000_CustomAuthKey As Long Win2000_guidId(0 To 15) As Byte Win2000_CustomDialDll As String Win2000_VpnStrategy As Long End Type
In our structure above, note how we have declared the strings as variable length strings (the" VB way") , used Enums for our Options, FramingProtocols and fNetProtocols. Also note how the members near the end have a NT4En_ or Win2000_ prefix to remind us these members are only for those platforms. (the NT4En_ members are available on NT4 enhancements and windows 2000) .
The SDK declaration for dwAlternateOffset has been changed to AlternateNumbers as a String in our VB declaration - so instead of having a offset pointer to a string, we now have a string that can be a set of numbers separated by chr$(0). The AlternateNumbers doesn't have any effect on win 95/98.
To see how we can use our VB structure with the RASAPI functions see the code on using the RASGetEntryProperties and RASSetEntryProperties functions.
For information on getting device information see RasEnumDevices.
For information on country IDs and Codes, see RasGetCountryInfo
See Also: Contents, Introduction, RASGetEntryProperties, RASSetEntryProperties, RasEnumDevices, RasEnumEntries, RasGetCountryInfo