text: /* Copyright (c) 1995, Microsoft Corporation, all rights reserved
  **
  ** pbuser.h
  ** Remote Access phonebook user preference library
  ** Public header
  **
  ** 06/20/95 Steve Cobb
  */
  
  #ifndef _PBUSER_H_
  #define _PBUSER_H_
  
  /*----------------------------------------------------------------------------
  ** Constants
  **----------------------------------------------------------------------------
  */
  
  /* User preference modes
  */
  #define UPM_Normal 0
  #define UPM_Logon  1
  #define UPM_Router 2
  
  
  /* User preference key and values.
  */
  #define REGKEY_HkcuOldRas                TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion\\Network\\RemoteAccess")
  #define REGKEY_HkcuOldRasParent          TEXT("Software\\Microsoft\\Windows NT\\CurrentVersion\\Network")
  #define REGKEY_HkcuOldRasRoot            TEXT("RemoteAccess")
  #define REGKEY_HkuOldRasLogon            TEXT(".DEFAULT\\Software\\Microsoft\\RAS Phonebook")
  #define REGKEY_HkcuRas                   TEXT("Software\\Microsoft\\RAS Phonebook")
  #define REGKEY_HkuRasLogon               TEXT(".DEFAULT\\Software\\Microsoft\\RAS Logon Phonebook")
  #define REGKEY_HklmRouter                TEXT("Software\\Microsoft\\Router Phonebook")
  #define REGKEY_Callback                  TEXT("Callback")
  #define REGKEY_Location                  TEXT("Location")
  #define REGVAL_szNumber                  TEXT("Number")
  #define REGVAL_dwDeviceType              TEXT("DeviceType")
  #define REGVAL_dwPhonebookMode           TEXT("PhonebookMode")
  #define REGVAL_szUsePersonalPhonebook    TEXT("UsePersonalPhonebook")
  #define REGVAL_szPersonalPhonebookPath   TEXT("PersonalPhonebookPath")
  #define REGVAL_szPersonalPhonebookFile   TEXT("PersonalPhonebookFile")
  #define REGVAL_szAlternatePhonebookPath  TEXT("AlternatePhonebookPath")
  #define REGVAL_fOperatorDial             TEXT("OperatorDial")
  #define REGVAL_fPreviewPhoneNumber       TEXT("PreviewPhoneNumber")
  #define REGVAL_fUseLocation              TEXT("UseLocation")
  #define REGVAL_fShowLights               TEXT("ShowLights")
  #define REGVAL_fShowConnectStatus        TEXT("ShowConnectStatus")
  #define REGVAL_fNewEntryWizard           TEXT("NewEntryWizard")
  #define REGVAL_dwRedialAttempts          TEXT("RedialAttempts")
  #define REGVAL_dwRedialSeconds           TEXT("RedialSeconds")
  #define REGVAL_dwIdleDisconnectSeconds   TEXT("IdleHangUpSeconds")
  #define REGVAL_dwCallbackMode            TEXT("CallbackMode")
  #define REGVAL_mszPhonebooks             TEXT("Phonebooks")
  #define REGVAL_mszAreaCodes              TEXT("AreaCodes")
  #define REGVAL_mszPrefixes               TEXT("Prefixes")
  #define REGVAL_mszSuffixes               TEXT("Suffixes")
  #define REGVAL_szLastCallbackByCaller    TEXT("LastCallbackByCaller")
  #define REGVAL_dwPrefix                  TEXT("Prefix")
  #define REGVAL_dwSuffix                  TEXT("Suffix")
  #define REGVAL_dwXWindow                 TEXT("WindowX")
  #define REGVAL_dwYWindow                 TEXT("WindowY")
  #define REGVAL_szDefaultEntry            TEXT("DefaultEntry")
  #define REGVAL_fCloseOnDial              TEXT("CloseOnDial")
  #define REGVAL_fAllowLogonPhonebookEdits TEXT("AllowLogonPhonebookEdits")
  #define REGVAL_fAllowLogonLocationEdits  TEXT("AllowLogonLocationEdits")
  #define REGVAL_fUseAreaAndCountry        TEXT("UseAreaAndCountry")
  #define REGVAL_dwMode                    TEXT("Mode")
  #define REGVAL_dwFlags                   TEXT("Flags")
  #define REGVAL_dwX                       TEXT("x")
  #define REGVAL_dwY                       TEXT("y")
  #define REGVAL_dwCx                      TEXT("cx")
  #define REGVAL_dwCy                      TEXT("cy")
  #define REGVAL_dwCxCol1                  TEXT("cxCol1")
  #define REGVAL_dwStartPage               TEXT("StartPage")
  #define REGVAL_dwXDlg                    TEXT("xDlg")
  #define REGVAL_dwYDlg                    TEXT("yDlg")
  #define REGVAL_dwCxDlgCol1               TEXT("cxDlgCol1")
  #define REGVAL_dwCxDlgCol2               TEXT("cxDlgCol2")
  #define REGVAL_szLastDevice              TEXT("LastDevice")
  #define REGVAL_mszDeviceList             TEXT("DeviceList")
  #define REGVAL_fSkipConnectComplete      TEXT("SkipConnectComplete")
  #define REGVAL_fRedialOnLinkFailure      TEXT("RedialOnLinkFailure")
  #define REGVAL_fExpandAutoDialQuery      TEXT("ExpandAutoDialQuery")
  #define REGVAL_fPopupOnTopWhenRedialing  TEXT("PopupOnTopWhenRedialing")
  #define REGVAL_dwVersion                 TEXT("Version")
  
  
  /* Callback modes (see dwCallbackMode below).
  */
  #define CBM_No    0
  #define CBM_Maybe 1
  #define CBM_Yes   2
  
  
  /* Phonebook modes (see dwPhonebookMode below).
  */
  #define PBM_System    0
  #define PBM_Personal  1
  #define PBM_Alternate 2
  #define PBM_Router    3
  
  
  /*----------------------------------------------------------------------------
  ** Datatypes
  **----------------------------------------------------------------------------
  */
  
  /* Information about a callback number.  See 'PBUSER.pdtllistCallback'.  Note
  ** that 'dwDeviceType' is a PBK PBDEVICETYPE enumeration cast to a DWORD.
  */
  #define CALLBACKINFO struct tagCALLBACKINFO
  CALLBACKINFO
  {
      TCHAR* pszPortName;
      TCHAR* pszDeviceName;
      TCHAR* pszNumber;
      DWORD  dwDeviceType;
  };
  
  
  /* Information associated with a TAPI location number.
  */
  #define LOCATIONINFO struct tagLOCATIONINFO
  LOCATIONINFO
  {
      DWORD  dwLocationId;
      DWORD  iPrefix;
      DWORD  iSuffix;
  };
  
  
  /* User preference information read from the "CURRENT_USER" registry.  This
  ** information applies to all "normal" user phonebooks plus the system
  ** phonebook.  The router phonebook may work differently.
  */
  #define PBUSER struct tagPBUSER
  PBUSER
  {
      /* Appearance page.
      */
      BOOL fOperatorDial;
      BOOL fPreviewPhoneNumber;
      BOOL fUseLocation;
      BOOL fShowLights;
      BOOL fShowConnectStatus;
      BOOL fCloseOnDial;
      BOOL fAllowLogonPhonebookEdits;
      BOOL fAllowLogonLocationEdits;
      BOOL fSkipConnectComplete;
      BOOL fNewEntryWizard;
  
      /* Auto-dial page.
      */
      DWORD dwRedialAttempts;
      DWORD dwRedialSeconds;
      DWORD dwIdleDisconnectSeconds;
      BOOL  fRedialOnLinkFailure;
      BOOL  fPopupOnTopWhenRedialing;
      BOOL  fExpandAutoDialQuery;
  
      /* Callback page.
      **
      ** This list is of CALLBACKINFO.
      */
      DWORD    dwCallbackMode;
      DTLLIST* pdtllistCallback;
      TCHAR*   pszLastCallbackByCaller;
  
      /* Phone list page.
      */
      DWORD    dwPhonebookMode;
      TCHAR*   pszPersonalFile;
      TCHAR*   pszAlternatePath;
      DTLLIST* pdtllistPhonebooks;
  
      /* Area code strings, in MRU order.
      */
      DTLLIST* pdtllistAreaCodes;
      BOOL     fUseAreaAndCountry;
  
      /* Prefix/suffix information, i.e. the ordered string lists and the
      ** settings for a particular TAPI location.
      */
      DTLLIST* pdtllistPrefixes;
      DTLLIST* pdtllistSuffixes;
      DTLLIST* pdtllistLocations;
  
      /* Phonebook window position and last entry selected used by RASPHONE.EXE.
      */
      DWORD  dwXPhonebook;
      DWORD  dwYPhonebook;
      TCHAR* pszDefaultEntry;
  
      /* Set true if the structure has been initialized.
      */
      BOOL fInitialized;
  
      /* Set true if something's changed since the structure was read.
      */
      BOOL fDirty;
  };
  
  
  /*----------------------------------------------------------------------------
  ** Prototypes
  **----------------------------------------------------------------------------
  */
  
  DTLNODE*
  CreateLocationNode(
      IN DWORD dwLocationId,
      IN DWORD iPrefix,
      IN DWORD iSuffix );
  
  DTLNODE*
  CreateCallbackNode(
      IN TCHAR* pszPortName,
      IN TCHAR* pszDeviceName,
      IN TCHAR* pszNumber,
      IN DWORD  dwDeviceType );
  
  VOID
  DestroyLocationNode(
      IN DTLNODE* pNode );
  
  VOID
  DestroyCallbackNode(
      IN DTLNODE* pNode );
  
  VOID
  DestroyUserPreferences(
      IN PBUSER* pUser );
  
  DTLNODE*
  DuplicateLocationNode(
      IN DTLNODE* pNode );
  
  DWORD
  GetUserPreferences(
      IN HANDLE   hConnection,
      OUT PBUSER* pUser,
      IN  DWORD   dwMode );
  
  DWORD
  SetUserPreferences(
      IN HANDLE  hConnection,
      IN PBUSER* pUser,
      IN DWORD   dwMode );
  
  // These two are provided as an optimization.  
  // They write directly to the registry.
  DWORD GetUserManualDialEnabling (
      IN OUT PBOOL pbEnabled,
      IN DWORD dwMode );
      
  DWORD SetUserManualDialEnabling (
      IN BOOL bEnable,
      IN DWORD dwMode );
  
  #endif // _PBUSER_H_
  