//*******************************************************************
//
//  Copyright(c) Microsoft Corporation, 1996 - 97
//
//  *** N O T   F O R   E X T E R N A L   R E L E A S E *******
//  This header file is not intended for distribution outside Microsoft.
//
//  FILE: INETCFG.H
//
//  PURPOSE:  Contains API's exported from inetcfg.dll and structures
//            required by those functions. 
//            Note:  Definitions in this header file require RAS.H.
//
//*******************************************************************

#ifndef _INETCFG_H_
#define _INETCFG_H_

#ifndef UNLEN
#include <lmcons.h>
#endif

// Generic HRESULT error code
#define ERROR_INETCFG_UNKNOWN 0x20000000L

#define MAX_EMAIL_NAME          64
#define MAX_EMAIL_ADDRESS       128
#define MAX_LOGON_NAME          UNLEN
#define MAX_LOGON_PASSWORD      PWLEN
#define MAX_SERVER_NAME         64  // max length of DNS name per RFC 1035 +1

// IE Auto proxy value in registry
#define AUTO_ONCE_EVER              0           // Auto proxy discovery
#define AUTO_DISABLED               1 
#define AUTO_ONCE_PER_SESSION       2
#define AUTO_ALWAYS                 3

// Flags for dwfOptions

// install Internet mail
#define INETCFG_INSTALLMAIL           0x00000001
// Invoke InstallModem wizard if NO MODEM IS INSTALLED
#define INETCFG_INSTALLMODEM          0x00000002
// install RNA (if needed)
#define INETCFG_INSTALLRNA            0x00000004
// install TCP (if needed)
#define INETCFG_INSTALLTCP            0x00000008
// connecting with LAN (vs modem)
#define INETCFG_CONNECTOVERLAN        0x00000010
// Set the phone book entry for autodial
#define INETCFG_SETASAUTODIAL         0x00000020
// Overwrite the phone book entry if it exists
// Note: if this flag is not set, and the entry exists, a unique name will
// be created for the entry.
#define INETCFG_OVERWRITEENTRY        0x00000040
// Do not show the dialog that tells the user that files are about to be installed,
// with OK/Cancel buttons.
#define INETCFG_SUPPRESSINSTALLUI     0x00000080
// Check if TCP/IP file sharing is turned on, and warn user to turn it off.
// Reboot is required if the user turns it off.
#define INETCFG_WARNIFSHARINGBOUND    0x00000100
// Check if TCP/IP file sharing is turned on, and force user to turn it off.
// If user does not want to turn it off, return will be ERROR_CANCELLED
// Reboot is required if the user turns it off.
#define INETCFG_REMOVEIFSHARINGBOUND  0x00000200
// Indicates that this is a temporary phone book entry
// In Win3.1 an icon will not be created
#define INETCFG_TEMPPHONEBOOKENTRY    0x00000400
// Show the busy dialog while checking system configuration
#define INETCFG_SHOWBUSYANIMATION     0x00000800

//
// Chrisk 5/8/97
// Note: the next three switches are only valid for InetNeedSystemComponents
// Check if LAN adapter is installed and bound to TCP
//
#define INETCFG_INSTALLLAN            0x00001000

//
// Check if DIALUP adapter is installed and bound to TCP
//
#define INETCFG_INSTALLDIALUP         0x00002000

//
// Check to see if TCP is installed requardless of binding
//
#define INETCFG_INSTALLTCPONLY        0x00004000

#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus

// constants for INETCLIENTINFO.dwFlags

#define INETC_LOGONMAIL     0x00000001
#define INETC_LOGONNEWS     0x00000002
#define INETC_LOGONDIRSERV  0x00000004

// Struct INETCLIENTINFO
//
// This structure is used when getting and setting the internet
// client parameters
//
// The members are as follows:
//
//  dwSize
//    size of this structure, for future versioning
//    this member should be set before passing the structure to the DLL
//  dwFlags
//    miscellaneous flags
//    see definitions above
//  szEMailName
//    user's internet email name
//  szEMailAddress
//    user's internet email address
//  ***Note: the following three fields are outdated, and should only be used by old legacy code.
//  ***      new code should use szIncomingMail* and iIncomingProtocol fields.
//  szPOPLogonName
//    user's internet mail server logon name 
//  szPOPLogonPassword
//    user's internet mail server logon password
//  szPOPServer
//    user's internet mail POP3 server
//  szSMTPServer
//    user's internet mail SMTP server
//  szNNTPLogonName
//    user's news server logon name
//  szNNTPLogonPassword
//    user's news server logon password
//  szNNTPServer
//    user's news server
//  ** End of original 1.0 structure.
//  ??/??/96 ValdonB
//  szNNTPName
//    user's friendly name to include in NNTP posts.(?? Valdon?)
//  szNNTPAddress
//    user's reply-to email address for NNTP posts.(?? Valdon?)
//  11/23/96  jmazner Normandy #8504
//  iIncomingProtocol
//    user's choice of POP3 or IMAP4 protocol for incoming mail
//    Holds the enum values defined in ACCTTYPE from imact.h//
//  szIncomingMailLogonName
//    user's internet mail server logon name 
//  szIncomingMailLogonPassword
//    user's internet mail server logon password
//  szIncomingMailServer
//    user's internet mail POP3 server
//  12/15/96    jmazner 
//  fMailLogonSPA
//    Use Sicily/SPA/DPA for the incoming mail server
//  fNewsLogonSPA
//    Use Sicily/SPA/DPA for the news server
//  2/4/96 jmazner -- LDAP functionality
//  szLDAPLogonName
//  szLDAPLogonPassword
//  szLDAPServer
//  fLDAPLogonSPA
//  fLDAPResolve

  typedef struct tagINETCLIENTINFOA
  {
    DWORD   dwSize;
    DWORD   dwFlags;
    CHAR    szEMailName[MAX_EMAIL_NAME + 1];
    CHAR    szEMailAddress[MAX_EMAIL_ADDRESS + 1];
    CHAR    szPOPLogonName[MAX_LOGON_NAME + 1];
    CHAR    szPOPLogonPassword[MAX_LOGON_PASSWORD + 1];
    CHAR    szPOPServer[MAX_SERVER_NAME + 1];
    CHAR    szSMTPServer[MAX_SERVER_NAME + 1];
    CHAR    szNNTPLogonName[MAX_LOGON_NAME + 1];
    CHAR    szNNTPLogonPassword[MAX_LOGON_PASSWORD + 1];
    CHAR    szNNTPServer[MAX_SERVER_NAME + 1];
    // end of version 1.0 structure;
    // extended 1.1 structure includes the following fields:
    CHAR    szNNTPName[MAX_EMAIL_NAME + 1];
    CHAR    szNNTPAddress[MAX_EMAIL_ADDRESS + 1];
    int     iIncomingProtocol;
    CHAR    szIncomingMailLogonName[MAX_LOGON_NAME + 1];
    CHAR    szIncomingMailLogonPassword[MAX_LOGON_PASSWORD + 1];
    CHAR    szIncomingMailServer[MAX_SERVER_NAME + 1];
    BOOL    fMailLogonSPA;
    BOOL    fNewsLogonSPA;
    CHAR    szLDAPLogonName[MAX_LOGON_NAME + 1];
    CHAR    szLDAPLogonPassword[MAX_LOGON_PASSWORD + 1];
    CHAR    szLDAPServer[MAX_SERVER_NAME + 1];
    BOOL    fLDAPLogonSPA;
    BOOL    fLDAPResolve;

  } INETCLIENTINFOA, *PINETCLIENTINFOA, FAR *LPINETCLIENTINFOA;

  typedef struct tagINETCLIENTINFOW
  {
    DWORD   dwSize;
    DWORD   dwFlags;
    WCHAR   szEMailName[MAX_EMAIL_NAME + 1];
    WCHAR   szEMailAddress[MAX_EMAIL_ADDRESS + 1];
    WCHAR   szPOPLogonName[MAX_LOGON_NAME + 1];
    WCHAR   szPOPLogonPassword[MAX_LOGON_PASSWORD + 1];
    WCHAR   szPOPServer[MAX_SERVER_NAME + 1];
    WCHAR   szSMTPServer[MAX_SERVER_NAME + 1];
    WCHAR   szNNTPLogonName[MAX_LOGON_NAME + 1];
    WCHAR   szNNTPLogonPassword[MAX_LOGON_PASSWORD + 1];
    WCHAR   szNNTPServer[MAX_SERVER_NAME + 1];
    // end of version 1.0 structure;
    // extended 1.1 structure includes the following fields:
    WCHAR   szNNTPName[MAX_EMAIL_NAME + 1];
    WCHAR   szNNTPAddress[MAX_EMAIL_ADDRESS + 1];
    int     iIncomingProtocol;
    WCHAR   szIncomingMailLogonName[MAX_LOGON_NAME + 1];
    WCHAR   szIncomingMailLogonPassword[MAX_LOGON_PASSWORD + 1];
    WCHAR   szIncomingMailServer[MAX_SERVER_NAME + 1];
    BOOL    fMailLogonSPA;
    BOOL    fNewsLogonSPA;
    WCHAR   szLDAPLogonName[MAX_LOGON_NAME + 1];
    WCHAR   szLDAPLogonPassword[MAX_LOGON_PASSWORD + 1];
    WCHAR   szLDAPServer[MAX_SERVER_NAME + 1];
    BOOL    fLDAPLogonSPA;
    BOOL    fLDAPResolve;

  } INETCLIENTINFOW, *PINETCLIENTINFOW, FAR *LPINETCLIENTINFOW;

#ifdef UNICODE
typedef INETCLIENTINFOW     INETCLIENTINFO;
typedef PINETCLIENTINFOW    PINETCLIENTINFO;
typedef LPINETCLIENTINFOW   LPINETCLIENTINFO;
#else
typedef INETCLIENTINFOA     INETCLIENTINFO;
typedef PINETCLIENTINFOA    PINETCLIENTINFO;
typedef LPINETCLIENTINFOA   LPINETCLIENTINFO;
#endif

// Function prototypes

//*******************************************************************
//
//  FUNCTION:   InetGetClientInfo
//
//  PURPOSE:    This function will get the internet client params
//              from the registry
//
//  PARAMETERS: lpClientInfo - on return, this structure will contain
//              the internet client params as set in the registry.
//              lpszProfileName - Name of client info profile to
//              retrieve.  If this is NULL, the default profile is used.
//
//  RETURNS:    HRESULT code, ERROR_SUCCESS if no errors occurred
//
//*******************************************************************

HRESULT WINAPI InetGetClientInfoA(
  LPCSTR            lpszProfileName,
  LPINETCLIENTINFOA lpClientInfo);

HRESULT WINAPI InetGetClientInfoW(
  LPCWSTR           lpszProfileName,
  LPINETCLIENTINFOW lpClientInfo);

#ifdef UNICODE
#define InetGetClientInfo   InetGetClientInfoW
#else
#define InetGetClientInfo   InetGetClientInfoA
#endif


//*******************************************************************
//
//  FUNCTION:   InetSetClientInfo
//
//  PURPOSE:    This function will set the internet client params
//
//  PARAMETERS: lpClientInfo - pointer to struct with info to set
//              in the registry.
//              lpszProfileName - Name of client info profile to
//              modify.  If this is NULL, the default profile is used.
//
//  RETURNS:    HRESULT code, ERROR_SUCCESS if no errors occurred
//
//*******************************************************************

HRESULT WINAPI InetSetClientInfoA(
  LPCSTR            lpszProfileName,
  LPINETCLIENTINFOA lpClientInfo);

HRESULT WINAPI InetSetClientInfoW(
  LPCWSTR           lpszProfileName,
  LPINETCLIENTINFOW lpClientInfo);

#ifdef UNICODE
#define InetSetClientInfo   InetSetClientInfoW
#else
#define InetSetClientInfo   InetSetClientInfoA
#endif

//*******************************************************************
//
//  FUNCTION:   InetConfigSystem
//
//  PURPOSE:    This function will install files that are needed
//              for internet access (such as TCP/IP and RNA) based
//              the state of the options flags.
//
//  PARAMETERS: hwndParent - window handle of calling application.  This
//              handle will be used as the parent for any dialogs that
//              are required for error messages or the "installing files"
//              dialog.
//              dwfOptions - a combination of INETCFG_ flags that controls
//              the installation and configuration as follows:
//
//                INETCFG_INSTALLMAIL - install Internet mail
//                INETCFG_INSTALLMODEM - Invoke InstallModem wizard if NO
//                                       MODEM IS INSTALLED.
//                INETCFG_INSTALLRNA - install RNA (if needed)
//                INETCFG_INSTALLTCP - install TCP/IP (if needed)
//                INETCFG_CONNECTOVERLAN - connecting with LAN (vs modem)
//                INETCFG_WARNIFSHARINGBOUND - Check if TCP/IP file sharing is
//                                            turned on, and warn user to turn
//                                            it off.  Reboot is required if
//                                            the user turns it off.
//                INETCFG_REMOVEIFSHARINGBOUND - Check if TCP/IP file sharing is
//                                              turned on, and force user to turn
//                                              it off.  If user does not want to
//                                              turn it off, return will be
//                                              ERROR_CANCELLED.  Reboot is
//                                              required if the user turns it off.
//
//              lpfNeedsRestart - if non-NULL, then on return, this will be
//              TRUE if windows must be restarted to complete the installation.
//
//  RETURNS:    HRESULT code, ERROR_SUCCESS if no errors occurred
//
//*******************************************************************

HRESULT WINAPI InetConfigSystem(
  HWND    hwndParent,          
  DWORD   dwfOptions,         
  LPBOOL  lpfNeedsRestart);  


//*******************************************************************
//
//  FUNCTION:   InetConfigSystemFromPath
//
//  PURPOSE:    This function will install files that are needed
//              for internet access (such as TCP/IP and RNA) based
//              the state of the options flags and from the given [ath.
//
//  PARAMETERS: hwndParent - window handle of calling application.  This
//              handle will be used as the parent for any dialogs that
//              are required for error messages or the "installing files"
//              dialog.
//              dwfOptions - a combination of INETCFG_ flags that controls
//              the installation and configuration as follows:
//
//                INETCFG_INSTALLMAIL - install Internet mail
//                INETCFG_INSTALLMODEM - Invoke InstallModem wizard if NO
//                                       MODEM IS INSTALLED.
//                INETCFG_INSTALLRNA - install RNA (if needed)
//                INETCFG_INSTALLTCP - install TCP/IP (if needed)
//                INETCFG_CONNECTOVERLAN - connecting with LAN (vs modem)
//                INETCFG_WARNIFSHARINGBOUND - Check if TCP/IP file sharing is
//                                            turned on, and warn user to turn
//                                            it off.  Reboot is required if
//                                            the user turns it off.
//                INETCFG_REMOVEIFSHARINGBOUND - Check if TCP/IP file sharing is
//                                              turned on, and force user to turn
//                                              it off.  If user does not want to
//                                              turn it off, return will be
//                                              ERROR_CANCELLED.  Reboot is
//                                              required if the user turns it off.
//
//              lpfNeedsRestart - if non-NULL, then on return, this will be
//              TRUE if windows must be restarted to complete the installation.
//              lpszSourcePath - full path of location of files to install.  If
//              this is NULL, default path is used.
//
//  RETURNS:    HRESULT code, ERROR_SUCCESS if no errors occurred
//
//*******************************************************************

HRESULT WINAPI InetConfigSystemFromPathA(
  HWND    hwndParent,
  DWORD   dwfOptions,
  LPBOOL  lpfNeedsRestart,
  LPCSTR  lpszSourcePath);

HRESULT WINAPI InetConfigSystemFromPathW(
  HWND    hwndParent,
  DWORD   dwfOptions,
  LPBOOL  lpfNeedsRestart,
  LPCWSTR lpszSourcePath);

#ifdef UNICODE
#define InetConfigSystemFromPath  InetConfigSystemFromPathW
#else
#define InetConfigSystemFromPath  InetConfigSystemFromPathA
#endif

//*******************************************************************
//
//  FUNCTION:   InetConfigClient
//
//  PURPOSE:    This function requires a valid phone book entry name
//              (unless it is being used just to set the client info).
//              If lpRasEntry points to a valid RASENTRY struct, the phone
//              book entry will be created (or updated if it already exists)
//              with the data in the struct.
//              If username and password are given, these
//              will be set as the dial params for the phone book entry.
//              If a client info struct is given, that data will be set.
//              Any files (ie TCP and RNA) that are needed will be
//              installed by calling InetConfigSystem().
//              This function will also perform verification on the device
//              specified in the RASENTRY struct.  If no device is specified,
//              the user will be prompted to install one if there are none
//              installed, or they will be prompted to choose one if there
//              is more than one installed.
//
//  PARAMETERS: hwndParent - window handle of calling application.  This
//              handle will be used as the parent for any dialogs that
//              are required for error messages or the "installing files"
//              dialog.
//              lpszPhonebook - name of phone book to store the entry in
//              lpszEntryName - name of phone book entry to be
//              created or modified
//              lpRasEntry - specifies a RASENTRY struct that contains
//              the phone book entry data for the entry lpszEntryName
//              lpszUsername - username to associate with the phone book entry
//              lpszPassword - password to associate with the phone book entry
//              lpszProfileName - Name of client info profile to
//              retrieve.  If this is NULL, the default profile is used.
//              lpINetClientInfo - client information
//              dwfOptions - a combination of INETCFG_ flags that controls
//              the installation and configuration as follows:
//
//                INETCFG_INSTALLMAIL - install Internet mail
//                INETCFG_INSTALLMODEM - Invoke InstallModem wizard if NO
//                                       MODEM IS INSTALLED.  Note that if
//                                       no modem is installed and this flag
//                                       is not set, the function will fail
//                INETCFG_INSTALLRNA - install RNA (if needed)
//                INETCFG_INSTALLTCP - install TCP/IP (if needed)
//                INETCFG_CONNECTOVERLAN - connecting with LAN (vs modem)
//                INETCFG_SETASAUTODIAL - Set the phone book entry for autodial
//                INETCFG_OVERWRITEENTRY - Overwrite the phone book entry if it
//                                         exists.  Note: if this flag is not
//                                         set, and the entry exists, a unique
//                                         name will be created for the entry.
//                INETCFG_WARNIFSHARINGBOUND - Check if TCP/IP file sharing is
//                                            turned on, and warn user to turn
//                                            it off.  Reboot is required if
//                                            the user turns it off.
//                INETCFG_REMOVEIFSHARINGBOUND - Check if TCP/IP file sharing is
//                                              turned on, and force user to turn
//                                              it off.  If user does not want to
//                                              turn it off, return will be
//                                              ERROR_CANCELLED.  Reboot is
//                                              required if the user turns it off.
//
//              lpfNeedsRestart - if non-NULL, then on return, this will be
//              TRUE if windows must be restarted to complete the installation.
//
//  RETURNS:    HRESULT code, ERROR_SUCCESS if no errors occurred
//
//*******************************************************************

HRESULT WINAPI InetConfigClientA(
  HWND              hwndParent,         
  LPCSTR            lpszPhonebook,
  LPCSTR            lpszEntryName,
  LPRASENTRY        lpRasEntry,         
  LPCSTR            lpszUsername,       
  LPCSTR            lpszPassword,       
  LPCSTR            lpszProfileName,
  LPINETCLIENTINFOA lpINetClientInfo,   
  DWORD             dwfOptions,                     
  LPBOOL            lpfNeedsRestart);              

HRESULT WINAPI InetConfigClientW(
  HWND              hwndParent,         
  LPCWSTR           lpszPhonebook,
  LPCWSTR           lpszEntryName,
  LPRASENTRY        lpRasEntry,         
  LPCWSTR           lpszUsername,       
  LPCWSTR           lpszPassword,       
  LPCWSTR           lpszProfileName,
  LPINETCLIENTINFOW lpINetClientInfo,   
  DWORD             dwfOptions,                     
  LPBOOL            lpfNeedsRestart);              

#ifdef UNICODE
#define InetConfigClient    InetConfigClientW
#else
#define InetConfigClient    InetConfigClientA
#endif

//*******************************************************************
//
//  FUNCTION:   InetGetAutodial
//
//  PURPOSE:    This function will get the autodial settings from the registry.
//
//  PARAMETERS: lpfEnable - on return, this will be TRUE if autodial
//              is enabled
//              lpszEntryName - on return, this buffer will contain the 
//              name of the phone book entry that is set for autodial
//              cbEntryNameSize - size of buffer for phone book entry name
//
//  RETURNS:    HRESULT code, ERROR_SUCCESS if no errors occurred
//
//*******************************************************************

HRESULT WINAPI InetGetAutodialA(
  LPBOOL  lpfEnable,     
  LPSTR   lpszEntryName,  
  DWORD   cbEntryNameSize);

HRESULT WINAPI InetGetAutodialW(
  LPBOOL  lpfEnable,     
  LPWSTR  lpszEntryName,  
  DWORD   cbEntryNameSize);

#ifdef UNICODE
#define InetGetAutodial   InetGetAutodialW
#else
#define InetGetAutodial   InetGetAutodialA
#endif

//*******************************************************************
//
//  FUNCTION:   InetSetAutodial
//
//  PURPOSE:    This function will set the autodial settings in the registry.
//
//  PARAMETERS: fEnable - If set to TRUE, autodial will be enabled.
//                        If set to FALSE, autodial will be disabled.
//              lpszEntryName - name of the phone book entry to set
//                              for autodial.  If this is "", the
//                              entry is cleared.  If NULL, it is not changed.
//
//  RETURNS:    HRESULT code, ERROR_SUCCESS if no errors occurred
//
//*******************************************************************

HRESULT WINAPI   InetSetAutodialA(
  BOOL    fEnable,       
  LPCSTR  lpszEntryName); 

HRESULT WINAPI   InetSetAutodialW(
  BOOL    fEnable,       
  LPCWSTR lpszEntryName); 

#ifdef UNICODE
#define InetSetAutodial    InetSetAutodialW
#else
#define InetSetAutodial    InetSetAutodialA
#endif

//*******************************************************************
//
//  FUNCTION:   InetSetAutoProxy
//
//  PURPOSE:    This function will set the auto config proxy settings
//              in the registry.
//
//  PARAMETERS: fEnable - If set to TRUE, proxy will be enabled.
//              If set to FALSE, proxy will be disabled.
//              dwProxyDetectMode - value to be update in the
//                                  HKEY_CURRENT_USER\Software\Microsoft
//                                  \Windows\CurrentVersion\Internet Settings
//                                  AutoProxyDetectMode
//              lpszScriptAddr - value to be update in 
//                                  HKEY_CURRENT_USER\Software\Microsoft
//                                  \Windows\CurrentVersion\Internet Settings
//                                  AutoConfigURL
//
//  RETURNS:    HRESULT code, ERROR_SUCCESS if no errors occurred
//
//*******************************************************************

HRESULT WINAPI   InetSetAutoProxyA(
  BOOL    fEnable,
  DWORD   dwProxyDetectMode,
  LPCSTR  lpszScriptAddr);

HRESULT WINAPI   InetSetAutoProxyW(
  BOOL    fEnable,
  DWORD   dwProxyDetectMode,
  LPCWSTR lpszScriptAddr);

#ifdef UNICODE
#define InetSetAutoProxy   InetSetAutoProxyW
#else
#define InetSetAutoProxy   InetSetAutoProxyA
#endif

//*******************************************************************
//
//  FUNCTION:   InetSetProxy
//
//  PURPOSE:    This function is currently replaced by InetSetProxyEx
//              due to a change in Wininet API. It will return 
//              ERROR_SUCCESS.
//
//  PARAMETERS: fEnable - If set to TRUE, proxy will be enabled.
//              If set to FALSE, proxy will be disabled.
//              lpszServer - name of the proxy server.  If this is "", the
//                           entry is cleared.  If NULL, it is not changed.
//              lpszOverride - proxy override. If this is "", the
//                           entry is cleared.  If NULL, it is not changed.
//
//  RETURNS:    ERROR_SUCCESS
//
//*******************************************************************

HRESULT WINAPI   InetSetProxyA(
  BOOL    fEnable,
  LPCSTR  lpszServer,
  LPCSTR  lpszOverride);

HRESULT WINAPI   InetSetProxyW(
  BOOL    fEnable,
  LPCWSTR lpszServer,
  LPCWSTR lpszOverride);

#ifdef UNICODE
#define InetSetProxy   InetSetProxyW
#else
#define InetSetProxy   InetSetProxyA
#endif

//*******************************************************************
//
//  FUNCTION:   InetSetProxyEx
//
//  PURPOSE:    This function will set the proxy settings in the registry.
//
//  PARAMETERS: fEnable - If set to TRUE, proxy will be enabled.
//                        If set to FALSE, proxy will be disabled.
//              lpszConnectoidName - Name of connectoid to set proxy on
//                                   NULL for LAN
//              lpszServer - name of the proxy server.  If this is "", the
//                           entry is cleared.  If NULL, it is not changed.
//              lpszOverride - proxy override. If this is "", the
//                           entry is cleared.  If NULL, it is not changed.
//
//  RETURNS:    HRESULT code, ERROR_SUCCESS if no errors occurred
//
//*******************************************************************

HRESULT WINAPI   InetSetProxyExA(
  BOOL    fEnable,
  LPCSTR  lpszConnectoidName,
  LPCSTR  lpszServer,
  LPCSTR  lpszOverride);

HRESULT WINAPI   InetSetProxyExW(
  BOOL    fEnable,
  LPCWSTR lpszConnectoidName,
  LPCWSTR lpszServer,
  LPCWSTR lpszOverride);

#ifdef UNICODE
#define InetSetProxyEx   InetSetProxyExW
#else
#define InetSetProxyEx   InetSetProxyExA
#endif

//*******************************************************************
//
//  FUNCTION:   InetGetProxy
//
//  PURPOSE:    This function will get the proxy settings from the registry.
//
//  PARAMETERS: lpfEnable - on return, this will be TRUE if proxy
//              is enabled
//              lpszServer - on return, this buffer will contain the 
//              name of the proxy server
//              cbServer - size of buffer for proxy server name
//              lpszOverride - on return, this buffer will contain the 
//              name of the proxy server
//              cbOverride - size of buffer for proxy override
//
//  RETURNS:    HRESULT code, ERROR_SUCCESS if no errors occurred
//
//*******************************************************************

HRESULT WINAPI   InetGetProxyA(
  LPBOOL  lpfEnable,
  LPSTR   lpszServer,
  DWORD   cbServer,
  LPSTR   lpszOverride,
  DWORD   cbszOverride);

HRESULT WINAPI   InetGetProxyW(
  LPBOOL  lpfEnable,
  LPWSTR  lpszServer,
  DWORD   cbServer,
  LPWSTR  lpszOverride,
  DWORD   cbszOverride);

#ifdef UNICODE
#define InetGetProxy    InetGetProxyW
#else
#define InetGetProxy    InetGetProxyA
#endif

//*******************************************************************
//
//  FUNCTION:   InetStartServices
//
//  PURPOSE:    This function guarentees that RAS services are running
//
//  PARAMETERS: none
//
//  RETURNS     ERROR_SUCCESS - if the services are enabled and running
//
//*******************************************************************
HRESULT WINAPI  InetStartServices();

//*******************************************************************
//
//  Function:   IsSmartStart
//
//  Synopsis:   This function will determine if the ICW should be run.  The
//              decision is made based on the current state of the user's machine.
//              
//  Arguments:  none
//
//  Returns:    TRUE - run ICW; FALSE - quit now
//
//  History:    5/8/97  ChrisK  Created
//
//*******************************************************************
DWORD WINAPI IsSmartStart();

//*******************************************************************
//
//  FUNCTION:   SetAutoProxyConnectoid
//
//  PURPOSE:    This function will set the enable/disable auto
//              proxy settings in creating connectoid.
//
//  PARAMETERS: fEnable - If set to TRUE, proxy will be enabled.
//              If set to FALSE, proxy will be disabled.
//
//*******************************************************************

HRESULT WINAPI SetAutoProxyConnectoid( BOOL bEnable);

#ifdef __cplusplus
}
#endif // __cplusplus

#endif //_INETCFG_H_#