Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

616 lines
27 KiB

-------------------------------------------
Notes on phonebook changes between versions
-------------------------------------------
Notes on phonebook changes for NT5/Connections
----------------------------------------------
PBK.LIB is a private static library shared by RASDLG.DLL, RASAPI32.DLL, and
RASMON.EXE. It's purpose is to encapsulate phonebook file manipulation,
presenting an easy to handle linked-list-of-phonebook-entry structures to the
caller along with appropriate helper routines. The library provides a finer
granularity of control than the public Win32 RasGetEntryProperties API which
depends on this library.
PBK.LIB has existed for several versions of the product. It includes code to
automatically upgrade entries from previous versions on the fly. Converting
them to the current format when read, and writing them in the current format
when written. This will carry forward to Connections.
Following is a summary of conversions from NT4 to NT5/Connections:
* "Guid" is generated and assigned to each entry on creation. Upgrade
adds the Guid if it doesn't exist.
* AreaCode, CountryCode, CountryID, and UseDialingRules are now associated
with each individual phone number instead of one for the set. This
requires changes to the separate phonenum.lib and possibly to RASAPI32.
Upgrade will duplicate any existing single setting for each alternate
number.
* Comments are now associated with each individual phone number instead of
one Description for the entry. Upgrade will associate any existing
Description with the first phone number.
* New "SharedPhoneNumbers" flag identifies whether phone number for first
link is same as all subsequent links. For RASAPI32's convenience, the
phone numbers will be written to subsequent links anyway, but this flag
eliminates the need to compare lists of phone numbers each time the
entry is read, and returns user to what he entered in a case where he
explicitly enters the same phone numbers for each device. Upgrade will
calculate the value of the flag once and it will be maintained by the
UI.
* New "ShowMonitorIconInTaskbar", "PreviewUserPw", "PreviewPhoneNumber"
and "DisplayProgress" flags per UI prototype. Upgrade will set the
flags according to the corresponding global user preference settings.
They will thereafter have fixed defaults.
* New "TryNextAlternateOnFail" flags per device. RASAPI must provide the
functionality.
* AR_Custom bit added to AuthRestrictions for EAP.
* DE_Ipsec* codes added. Old 'DE_Weak' renamed DE_Mppe40bit. Old
'DE_Strong' renamed 'DE_Mppe128bit'.
* dwScriptMode is replaced with fScriptXxx and fScriptXxxTerminal flags.
This is because the UI now gives user control over whether the terminal
window appears with the script running. This used to occur always on
"after" scripts and never on "before" scripts.
* New "PrerequisiteEntry" key storing name of WAN entry VPN depends on for
double dialing.
* On upgrade of old entries, "OverridePref" bits for redial
attepts/seconds, idle disconnect seconds, and redial on link failure are
set, if clear, and the field value set to the user preference settings.
* Port/Device
TAPI tries to be a device-centric model, while RASMAN is a
port-centric model. In NT4 the phonebook in port-centric. While the
NT5/Connections UI is device-centric, i.e. port names are no longer
displayed *sigh*, the phonebook will remain as in NT4 with regard to
port/device handling EXCEPT that the lookup of the PBPORT associated
with a pair of Port/Device keys will be by Device, rather than by
Port.
Regarding ISDN B-channel naming, the NT5/Connections UI will not
distinguish between two B-channels by port name as was done in the
past. All B-channels on the same adapter will have the same device
name.
RASMAN is the one responsible for mapping ISDN B-channel ports to any
available ISDN B-channel, i.e. ignoring the explicit ISDNx port
written in the phonebook.
* MXS modems are retired. Any MXS modem entries are assigned to first
Unimodem port.
Entry format change details:
[ENTRY] ;same
Type=<RASET-code> ;New
Description=<description> ;Deleted, becomes "Comment" of 1st phone#
AutoLogon=<1/0> ;same
DialParamsUID=<unique-ID> ;same, or need upgrade to GUID?
Guid=<guid> ;New, for use by ShaunCo across systems
UsePwForNetwork=<1/0> ;Deleted, unused
ServerType=<ST-code> ;Deleted, unused
BaseProtocol=<BP-code> ;same
Authentication=<AS-code> ;same
ExcludedProtocols=<NP-bits> ;same
LcpExtensions=<1/0> ;same
DataEncryption=<DE-code> ;same, but new codes for IpSec
SkipNwcWarning=<1/0> ;same
SkipDownLevelDialog=<1/0> ;same
SwCompression=<1/0> ;same
UseCountryAndAreaCodes=<1/0> ;Deleted, becomes "UseDRules" of 1st phone#
AreaCode=<string> ;Deleted, becomes "AreaCode" of 1st phone#
CountryID=<id> ;Deleted, becomes "CountryID" of 1st #
CountryCode=<code> ;Deleted, becomes "CountryCode" of 1st #
ShowMonitorIconInTaskBar=<1/0> ;New
CustomAuthKey=<EAP-code> ;New, an option read from registry
CustomAuthData=<hexdump> ;New, blob returned by custom auth DLL
AuthRestrictions=<AR-code> ;same, but AR_Custom added for EAP
OverridePref=<RASOR-bits> ;same, but all existing bits set by default
DialMode=<DM-code> ;same, but RASEDM_DialFirstAvailable added
DialPercent=<0-100> ;same
DialSeconds=<1-n> ;same
HangUpPercent=<0-100> ;same
HangUpSeconds=<1-n> ;same
RedialAttempts=<n> ;same
RedialSeconds=<n> ;same
IdleDisconnectSeconds=<-1,0-n> ;same
RedialOnLinkFailure=<1/0> ;same
CallbackMode=<1/0> ;same
CustomDialDll=<path> ;same, i.e. NYI
CustomDialFunc=<func-name> ;same, i.e. NYI
AuthenticateServer=<1/0> ;same
SecureLocalFiles=<1/0> ;Deleted, replaced with...
ShareMsFilePrint=<1/0> ;New
BindMsNetClient=<1/0> ;New
SharedPhoneNumbers=<1/0> ;New
PrerequisiteEntry=<entry-name> ;New
PreviewUserPw=<1/0> ;New
PreviewDomain=<1/0> ;New
PreviewPhoneNumber=<1/0> ;New
ShowDialingProgress=<1/0> ;New
IpPrioritizeRemote=<1/0> ;same (PPP/SLIP only)
IpHeaderCompression=<1/0> ;same (PPP/SLIP only)
IpAddress=<a.b.c.d> ;same (PPP/SLIP only)
IpAssign=<ASRC-code> ;same (PPP/SLIP only)
IpDnsAddress=<a.b.c.d> ;same (PPP/SLIP only)
IpDns2Address=<a.b.c.d> ;same (PPP/SLIP only)
IpWinsAddress=<a.b.c.d> ;same (PPP/SLIP only)
IpWins2Address=<a.b.c.d> ;same (PPP/SLIP only)
IpNameAssign=<ASRC-code> ;same (PPP/SLIP only)
IpFrameSize=<1006/1500> ;same (SLIP only)
In general each section contains subsections delimited by
MEDIA=<something> and DEVICE=<something> lines. There can be any number
of DEVICE subsections. There can be multiple MEDIA/DEVICE sets where the
position of the set determines it's sub-entry index, the first being 1,
the second 2, etc.
For serial media, the program currently expects 1 to 4 DEVICE subsections,
representing a preconnect switch, modem, X.25 PAD, and postconnect switch.
Following is a full entry:
MEDIA=serial ;same
Port=<port-name> ;same
Device=<device-name> ;same
ConnectBps=<bps> ;same, for old MXS support only
DEVICE=switch ;same
Type=<switchname or Terminal> ;Deleted, converted to 2 fields below
Name=<switchname> ;New, name of switch or empty if none
Terminal=<1/0> ;New, terminal is to run with/without above
DEVICE=modem ;same
PhoneNumber=<phonenumber1> ;same
AreaCode=<area-code1> ;New
CountryID=<id> ;New
CountryCode=<country-code> ;New
UseDialingRules=<1/0> ;New
Comment=<arbitrary-text1> ;New, 'Description' from upgrade
...
PhoneNumber=<phonenumber2> ;same
AreaCode=<area-code1> ;New
CountryID=<id> ;New
CountryCode=<country-code> ;New
UseDialingRules=<1/0> ;New
Comment=<arbitrary-text2> ;New
...
PhoneNumber=<phonenumberN> ;same
AreaCode=<area-code1> ;New
CountryID=<id> ;New
CountryCode=<country-code> ;New
UseDialingRules=<1/0> ;New
Comment=<arbitrary-textn> ;New
LastSelectedPhone=<index> ;New
PromoteAlternates=<1/0> ;same
TryNextAlternateOnFail=<1/0> ;New
TapiBlob=<hexdump> ;same, i.e. #if 0'd out
ManualDial=<1/0> ;For old MXS support only
HwFlowControl=<1/0> ;For old MXS support only
Protocol=<1/0> ;For old MXS support only
Compression=<1/0> ;For old MXS support only
DEVICE=pad ;same
X25Pad=<padtype> ;same
X25Address=<X121address> ;same
UserData=<userdata> ;same
Facilities=<facilities> ;same
DEVICE=switch ;same
Type=<switchname or Terminal> ;Deleted, converted to 2 fields below
Name=<switchname> ;New, name/path of switch or empty if none
Terminal=<1/0> ;New, terminal is to run with/without above
For ISDN media, the program expects exactly 1 DEVICE subsection. Note
that ISDN is now identical to the "other" case.
MEDIA=isdn ;same
Port=<port-name> ;same
Device=<device-name> ;same
DEVICE=isdn ;same
PhoneNumber=<phonenumber1> ;same
AreaCode=<area-code1> ;New
CountryID=<id> ;New
CountryCode=<country-code> ;New
UseDialingRules=<1/0> ;New
Comment=<arbitrary-text1> ;New, 'Description' from upgrade
...
PhoneNumber=<phonenumber2> ;same
AreaCode=<area-code1> ;New
CountryID=<id> ;New
CountryCode=<country-code> ;New
UseDialingRules=<1/0> ;New
Comment=<arbitrary-text2> ;New
...
PhoneNumber=<phonenumberN> ;same
AreaCode=<area-code1> ;New
CountryID=<id> ;New
CountryCode=<country-code> ;New
UseDialingRules=<1/0> ;New
Comment=<arbitrary-textn> ;New
LastSelectedPhone=<index> ;New
PromoteAlternates=<1/0> ;same
TryNextPhoneNumberOnFail=<1/0> ;New
LineType=<0/1/2> ;same
Fallback=<1/0> ;same
EnableCompression=<1/0> ;For old protocol only
ChannelAggregation=<channels> ;For old protocol only
For X.25 media, the program expects exactly 1 DEVICE subsection.
MEDIA=x25 ;same
Port=<port-name> ;same
Device=<device-name> ;same
DEVICE=x25 ;same
X25Address=<X121address> ;same
UserData=<userdata> ;same
Facilities=<facilities> ;same
For other media, the program expects exactly one DEVICE subsection with
device name matching the media. "Other" media and devices are created for
entries assigned to all non-serial medias including ISDN which now matches
the rules for "other".
MEDIA=<media> ;same
Port=<port-name> ;same
Device=<device-name> ;same
DEVICE=<media> ;same
PhoneNumber=<phonenumber1> ;same
AreaCode=<area-code1> ;New
CountryID=<id> ;New
CountryCode=<country-code> ;New
UseDialingRules=<1/0> ;New
Comment=<arbitrary-text1> ;New, 'Description' from upgrade
...
PhoneNumber=<phonenumber2> ;same
AreaCode=<area-code1> ;New
CountryID=<id> ;New
CountryCode=<country-code> ;New
UseDialingRules=<1/0> ;New
Comment=<arbitrary-text2> ;New
...
PhoneNumber=<phonenumberN> ;same
AreaCode=<area-code1> ;New
CountryID=<id> ;New
CountryCode=<country-code> ;New
UseDialingRules=<1/0> ;New
Comment=<arbitrary-textn> ;New
LastSelectedPhone=<index> ;New
PromoteAlternates=<1/0> ;same
TryNextPhoneNumberOnFail=<1/0> ;New
The phonebook also supports the concept of "custom" entries, i.e. entries
that fit the MEDIA followed by DEVICE subsection rules but which do not
include certain expected key fields. A custom entry is not editable with
the UI, but may be chosen for connection. This gives us a story for new
drivers added by 3rd parties or after release and not yet fully supported
in the UI. (NOTE: Support for this may be dropped in RAS API)
------------------------------------------------
Notes on conversion from NT3.51 PBENGINE for NT4
------------------------------------------------
This library is a reworking of the PBENGINE.LIB shared by the NT 3.51
RASPHONE.EXE and RASAPI32.DLL. It's purpose is to encapsulate phonebook file
manipulation, presenting an easy to handle linked-list-of-phonebook-entry
structures to the caller along with appropriate helper routines.
Conversions:
* Becomes strictly Win32 for increased portability.
* Replace CRT calls with Win32 where possible.
Exceptions: qsort, ltoa
* Eliminate CRT string function usage on all non-numeric strings.
* Eliminate BLT usage.
* Becomes multi-thread-safe. RASDLG can be called from multiple threads
in a process so the use of global state information, like 'Pbdata' is
eliminated in favor of returned context blocks. Further, index
references into global device lists previously read once at
initialization are removed, i.e. everything becomes "look up by name"
when needed. This will be needed for plug-n-play later anyway.
(Callers must make similar adjustment)
* Upper level now uses TCHARs rather than CHARs, where UNICODE is built
for NT. The actual file is still written out in MB ANSI using
RASFIL32.DLL and RASMAN is still ANSI. This change confines
UNICODE->ANSI translations to this one thin layer (specifically the
StrDupAFromT/TFromA routines) simplifying a possible UI port back to
W95. The .PBK file itself could be UNICODE and be editable with
notepad.exe, but that would be a change to the shared RASFIL32.DLL and
is currently judged "not worth it".
* Uses new RTUTIL.DLL tracing instead of old "sdebug" style.
* Built in upgrade of NT 3.51 phonebooks.
* Explicit "Any <device>" concept is dropped. It's all implicit now based
on the type of the selected "preferred" device. This change requested
by Gibbs who claims "any port" is extremely expensive in DDM. (This is
questionable and will want to watch the reaction carefully. For
example, this is a problem for stress scripts?)
* VALUE_* changed to prefixes and INDEX_No* changed to *_None to associate
these values more clearly with a set of values.
* Modem connect response deleted as this is not available from TAPI.
* PBENTRY: Now contains a list of PBLINK rather than built-in "single
link". See below for old field mappings.
* PBPORT: Modem specific fields only used for MXS support as this are part
of the new TAPI device blob for Unimodem.
* PBLINK contains all multi-linkable information, including the new TAPI
device blob.
* PBGLOBALS: Global settings are no longer associated with each phonebook
file but are stored in the CURRENT_USER registry. They should now be
read and written separately from the phonebook using the new
Get/SetUserPreferences calls which phonebook-related enough to be
provided in pbk.lib. For the most part, PBGLOBALS->PBUSER.
Prefix/suffix settings within the phonebook are dropped. These may be
implemented in the HKCU preferences. Note the TAPI location settings
now optionally handle this functionality.
* USERDATA, Get/SetRasUserData calls, and CloseFailedLinkPort call are no
longer in the phonebook library. These were in pbengine.lib only so
RASPHONE could figure out which connected entries were actually dialed
by RASAPI32 to CloseFailedLinkPorts and figure out which ports were
disconnected due to "link failure" for redial. These issues must be
handled by RASMAN/RASAUTO in new model. If RASAPI engine is moved into
RASMAN, the USERDATA info can simply be fields in RASCONNCB.
* The BPS lists are dropped, since they are now provided in the TAPI
device blob. For MXS, BPS list is moved into the UI which will display
an unknown value at the end of it's standard list if encountered.
Port/Device
TAPI tries to be a device-centric model, while RASMAN is a port-centric
model.
RASMAN will return the TAPI device ID for each RASMAN port. A device ID
of 0xFFFFFFFF indicates an MXS modem port. In this case, the port name is
guaranteed to be unique, but the device name is not (old behavior). When
the device ID is not 0xFFFFFFFF, the device name is guaranteed to be
unique, but the port name is not (because it may not be available).
How port and device in a phonebook entry are updated/converted:
If the entry has a "Port" key, it is an old format entry or a new
format MXS entry. With these entries, an unconfigured port is
converted to the first configured port of the same type. If there is
no port of the same type the entry is made an "unknown" device with
the original port name. Note that "any port" is caught and converted
by the above rule.
If the entry has a "PreferredDevice" key it is a new format non-MXS
entry with no "Port" field. With these entries, an unconfigured
device is not converted. This is in anticipation of Plug-n-Play where
such conversion is not desirable.
The UI must disallow "Configure" on unknown or unconfigured devices.
Note that RasDial will search for the selected "port" or "device"
first, but if not found will go on and try other ports of the selected
ports type. Unimodem and MXS are both tried for "modem" type. The
API will apply the blob or the MXS modem settings only to the
preferred device, not to alternates.
Old phonebook test cases:
* Specifies configured MXS port
- Shows "device (port)" and works as before except tries other
modems on open failure
* Specifies "any modem" port
- Shows "1st-modem-device (first-modem-port)" and works as
before.
- If no modem ports, shows "unavailable device (Any modem)"
and dial attempt fails with "PORT_NOT_FOUND", which is
essentially also working as before.
* Specifies existing unimodem port
- Shows "device (port)" or "device" and dials the port first
trying other unimodem ports on open failure.
Organization:
The files are organized similar to pbengine.lib where...
<ras>\ui\common\inc\pbengine.h-><ras>\ui\inc\pbk.h
Upper level routines and general utilities:
pbengine.c->pbk.c
pbengin2.c->pbk.c
RasMan packaging routines:
pbrasman.c->rasman.c =
pbrasma2.c->rasman.c
Convert list<->file routines and utilities:
pbfile.c->file.c
pbfile2.c->file.c
pbkp.h is added for private library definitions.
The "2" files were the basic routines needed by only RASAPI32. With the
inclusion of the phonebook editing APIs this distinction is much less
significant and has been dropped.
Entry format change details:
[ENTRY] ;Max raised to 256
Description=<description> ;Same
AutoLogon=<1/0> ;same
User=<username> ;Deleted, now LSA secret
Domain=<domain> ;Deleted, now LSA secret
DialParamsUID=<unique-ID> ;Post NT 3.51
UsePwForNetwork=<1/0> ;New
ServerType=<ST-code> ;New, not used by RASAPI
BaseProtocol=<BP-code> ;same*
Authentication=<AS-code> ;same*
ExcludedProtocols=<NP-bits> ;same*
LcpExtensions=<1/0> ;same
DataEncryption=<1/0> ;same
SkipNwcWarning=<1/0> ;same
SwCompression=<1/0> ;New
UseCountryAndAreaCodes=<1/0> ;Post NT 3.51
AreaCode=<string> ;Post NT 3.51
CountryID=<id> ;Post NT 3.51
CountryCode=<code> ;Post NT 3.51
AuthRestrictions=<AR-code> ;New, used by SLIP also
SkipDownLevelDialog=<1/0> ;same
DialMode=<DM-code> ;Post NT 3.51
DialPercent=<0-100> ;Post NT 3.51
DialSeconds=<1-n> ;Post NT 3.51
HangUpPercent=<0-100> ;Post NT 3.51
HangUpSeconds=<1-n> ;Post NT 3.51
IdleDisconnectSeconds=<-1,0-n> ;Post NT 3.51
SecureLocalFiles=<1/0> ;Post NT 3.51
CustomDialDll=<path> ;Post NT 3.51
CustomDialFunc=<func-name> ;Post NT 3.51
PppTextAuthentication=<AR-code> ;Deleted, becomes AuthRestrictions above.
The following single set of IP parameters appear in place of the
equivalent separate sets of PppXxx or SlipXxx parameters in the previous
phonebook.
IpPrioritizeRemote=<1/0> ;Was PPP specific
IpHeaderCompression=<1/0> ;Was PPP specific
IpAddress=<a.b.c.d> ;Was PPP specific
IpAssign=<ASRC-code> ;Was PPP specific
IpDnsAddress=<a.b.c.d> ;Was PPP specific
IpDns2Address=<a.b.c.d> ;Was PPP specific
IpWinsAddress=<a.b.c.d> ;Was PPP specific
IpWins2Address=<a.b.c.d> ;Was PPP specific
IpNameAssign=<ASRC-code> ;Was PPP specific
IpFrameSize=<1006/1500> ;Still SLIP specific
In general each section contains subsections delimited by
MEDIA=<something> and DEVICE=<something> lines. In pbengine.lib, there
MUST be exactly one MEDIA subsection and it must be the first subsection
of the section. There can be any number of DEVICE subsections. In
pbk.lib, there can be multiple MEDIA/DEVICE sets where the position of the
set determines it's sub-entry index, the first being 1, the second 2, etc.
For serial media, the program currently expects 1 to 4 DEVICE subsections,
representing a preconnect switch, modem, X.25 PAD, and postconnect switch.
Following is a full entry:
MEDIA=serial ;same
Port=<port-name> ;No longer set to "Any modem"
Device=<device-name> ;New, not passed to RASMAN
ConnectBps=<bps> ;For old MXS support only
DEVICE=switch ;same
Type=<switchname or Terminal> ;same
DEVICE=modem ;same
PhoneNumber=<phonenumber1> ;same
PhoneNumber=<phonenumber2> ;same
PhoneNumber=<phonenumberN> ;same
PromoteAlternates=<1/0> ;New, not passed to RASMAN
TapiBlob=<hexdump> ;New
ManualDial=<1/0> ;For old MXS support only
HwFlowControl=<1/0> ;For old MXS support only
Protocol=<1/0> ;For old MXS support only
Compression=<1/0> ;For old MXS support only
DEVICE=pad ;same
X25Pad=<padtype> ;same
X25Address=<X121address> ;same
UserData=<userdata> ;same
Facilities=<facilities> ;same
DEVICE=switch ;same
Type=<switchname or Terminal> ;Switchname can be path
For ISDN media, the program expects exactly 1 DEVICE subsection. Note
that ISDN is now identical to the "other" case.
MEDIA=isdn ;same
Port=<port-name> ;No longer set to "Any ISDN"
Device=<device-name> ;New, not passed to RASMAN
DEVICE=isdn ;same
PhoneNumber=<phonenumber1> ;same
PhoneNumber=<phonenumber2> ;same
PhoneNumber=<phonenumberN> ;same
PromoteAlternates=<1/0> ;New, not passed to RASMAN
LineType=<0/1/2> ;same
Fallback=<1/0> ;same
EnableCompression=<1/0> ;For old protocol only
ChannelAggregation=<channels> ;For old protocol only
For X.25 media, the program expects exactly 1 DEVICE subsection.
MEDIA=x25 ;same
Port=<port-name> ;No longer set to "Any X25"
Device=<device-name> ;New, not passed to RASMAN
DEVICE=x25 ;same
X25Address=<X121address> ;same
UserData=<userdata> ;same
Facilities=<facilities> ;same
For other media, the program expects exactly one DEVICE subsection with
device name matching the media. "Other" media and devices are created for
entries assigned to all non-serial medias including ISDN which now matches
the rules for "other".
MEDIA=<media> ;same
Port=<port-name> ;same
Device=<device-name> ;New, not passed to RASMAN
DEVICE=<media> ;same
PhoneNumber=<phonenumber1> ;same
PhoneNumber=<phonenumber2> ;same
PhoneNumber=<phonenumberN> ;same
PromoteAlternates=<1/0> ;New, not passed to RASMAN
The phonebook also supports the concept of "custom" entries, i.e. entries
that fit the MEDIA followed by DEVICE subsection rules but which do not
include certain expected key fields. A custom entry is not editable with
the UI, but may be chosen for connection. This gives us a story for new
drivers added by 3rd parties or after release and not yet fully supported
in the UI. (NOTE: This may be dropped in RAS API)
(*) Parameter changes internally to use new set-descriptive constants
rather than VALUE_*.