1453 lines
46 KiB
C
1453 lines
46 KiB
C
|
//+----------------------------------------------------------------------------
|
||
|
//
|
||
|
// File: icm.h
|
||
|
//
|
||
|
// Module: CMDIAL32.DLL
|
||
|
//
|
||
|
// Synopsis: Main header file for cmdial32.dll
|
||
|
//
|
||
|
// Copyright (c) 1998-1999 Microsoft Corporation
|
||
|
//
|
||
|
// Author: nickball Created 02/10/98
|
||
|
//
|
||
|
//+----------------------------------------------------------------------------
|
||
|
#ifndef _ICM_INC
|
||
|
#define _ICM_INC
|
||
|
|
||
|
#include <stddef.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <limits.h>
|
||
|
#include <windows.h>
|
||
|
#include <windowsx.h>
|
||
|
#include <shlobj.h>
|
||
|
#include <stdio.h>
|
||
|
#include <errno.h>
|
||
|
#include <olectl.h>
|
||
|
#include <ctype.h>
|
||
|
#include <wininet.h>
|
||
|
#include <wchar.h>
|
||
|
|
||
|
// #undef WINVER
|
||
|
// #define WINVER 0x0401
|
||
|
|
||
|
#include <commctrl.h>
|
||
|
#include <ras.h>
|
||
|
#include <raserror.h>
|
||
|
#include <tapi.h>
|
||
|
#include <mbstring.h>
|
||
|
#include <wininet.h>
|
||
|
#include <rasdlg.h>
|
||
|
#include <olectl.h>
|
||
|
#include <ntsecapi.h> // for LSA stuff
|
||
|
|
||
|
#include "cmglobal.h"
|
||
|
#include "cm_def.h"
|
||
|
#include "reg_str.h"
|
||
|
#include "cmmgr32.h" // help IDs
|
||
|
#include "cm_phbk.h"
|
||
|
#include "cmdial.h"
|
||
|
#include "cmutil.h"
|
||
|
#include "cm_misc.h"
|
||
|
#include "cmlog.h"
|
||
|
#include "state.h"
|
||
|
#include "cmsecure.h"
|
||
|
#include "cmdebug.h"
|
||
|
#include "contable.h"
|
||
|
#include "ary.hxx"
|
||
|
#include "ctr.h"
|
||
|
#include "resource.h"
|
||
|
#include "cmfmtstr.h"
|
||
|
#include "base_str.h"
|
||
|
#include "mgr_str.h"
|
||
|
#include "ShellDll.h"
|
||
|
#include "mutex.h"
|
||
|
#include "cmras.h"
|
||
|
#include "userinfo.h"
|
||
|
#include "lanawait.h"
|
||
|
#include "linkdll.h" // LinkToDll and BindLinkage
|
||
|
#include "uapi.h"
|
||
|
#include "bmpimage.h" // Common bitmap processing code
|
||
|
#include "pwutil.h"
|
||
|
#include "stp_str.h"
|
||
|
#include "dial_str.h"
|
||
|
#include "mon_str.h"
|
||
|
#include "tooltip.h"
|
||
|
#include "gppswithalloc.h"
|
||
|
#include "hnetcfg.h"
|
||
|
#include "netconp.h"
|
||
|
|
||
|
#if DEBUG && defined(CMASSERTMSG)
|
||
|
#define CELEMS(x) ( \
|
||
|
CMASSERTMSG(sizeof(x) != sizeof(void*), TEXT("possible incorrect usage of CELEMS")), \
|
||
|
(sizeof(x))/(sizeof(x[0])) \
|
||
|
)
|
||
|
#else
|
||
|
#define CELEMS(x) ((sizeof(x))/(sizeof(x[0])))
|
||
|
#endif // DEBUG
|
||
|
|
||
|
// we haven't done the strsafe pass for the entire XPSP codebase - make sure we can still build
|
||
|
#define STRSAFE_NO_DEPRECATE
|
||
|
#include <strsafe.h>
|
||
|
|
||
|
|
||
|
//************************************************************************
|
||
|
// define's
|
||
|
//************************************************************************
|
||
|
|
||
|
#define TIMER_RATE 1000 // 1 second
|
||
|
#define PAUSE_DELAY 3
|
||
|
#define PWHANDLE_NONE 0
|
||
|
#define PWHANDLE_LOWER 1
|
||
|
#define PWHANDLE_UPPER 2
|
||
|
|
||
|
#define CE_PASSWORD_NOT_PRESENT 1223
|
||
|
|
||
|
#define CUSTOM_BUTTON_WIDTH 88
|
||
|
//#define DEFAULT_MAX_DOMAIN_LENGTH 256
|
||
|
|
||
|
//
|
||
|
// User defined msg for telling CM itself to start loading startup info
|
||
|
//
|
||
|
#define WM_LOADSTARTUPINFO (WM_USER + 6)
|
||
|
|
||
|
//
|
||
|
// Delayed hangup of CM for W9x
|
||
|
// wParam indicates if entry should be removed from table.
|
||
|
// lParam is the RAS error code for hangup or ERROR_CANCELLED (currently unused)
|
||
|
|
||
|
#define WM_HANGUP_CM (WM_USER + 7)
|
||
|
|
||
|
//
|
||
|
// Connected CM - CM is connected, do connect processing
|
||
|
//
|
||
|
|
||
|
#define WM_CONNECTED_CM (WM_USER + 8)
|
||
|
|
||
|
//
|
||
|
// Pause RasDial - Resume dialing after pause state.
|
||
|
//
|
||
|
|
||
|
#define WM_PAUSE_RASDIAL (WM_USER + 9)
|
||
|
|
||
|
// Duration message flags
|
||
|
|
||
|
#define DMF_NUL 0x0000
|
||
|
#define DMF_H 0x0001 // Hours
|
||
|
#define DMF_M 0x0002 // Minutes
|
||
|
#define DMF_S 0x0004 // Seconds
|
||
|
#define DMF_HM 0x0003 // Hours, Minutes
|
||
|
#define DMF_HS 0x0005 // Hours, Seconds
|
||
|
#define DMF_MS 0x0006 // Minutes, Seconds
|
||
|
#define DMF_HMS 0x0007 // Hours, Minutes, Seconds
|
||
|
|
||
|
// for NT RasSetEntryProperties()
|
||
|
#define SCRIPT_PATCH_BUFFER_SIZE 2048
|
||
|
#define SIZEOF_NULL 1
|
||
|
|
||
|
#define MIN_TAPI_VERSION 0x10003
|
||
|
#define MAX_TAPI_VERSION 0x10004
|
||
|
|
||
|
#define NElems(a) (sizeof a / sizeof a[0])
|
||
|
|
||
|
#define INETCFG_INSTALLMODEM 0x00000002
|
||
|
#define INETCFG_INSTALLRNA 0x00000004
|
||
|
#define INETCFG_INSTALLTCP 0x00000008
|
||
|
#define INETCFG_SUPPRESSINSTALLUI 0x00000080
|
||
|
//
|
||
|
// Check to see if TCP is installed regardless of binding
|
||
|
//
|
||
|
#define INETCFG_INSTALLTCPONLY 0x00004000
|
||
|
|
||
|
//
|
||
|
// Components Checked flags
|
||
|
//
|
||
|
#define CC_RNA 0x00000001 // RNA installed
|
||
|
#define CC_TCPIP 0x00000002 // TCPIP installed
|
||
|
#define CC_MODEM 0x00000004 // Modem installed
|
||
|
#define CC_PPTP 0x00000008 // PPTP installed
|
||
|
#define CC_SCRIPTING 0x00000010 // Scripting installed
|
||
|
#define CC_RASRUNNING 0X00000020 // RAS services is running
|
||
|
// on NT
|
||
|
#define CC_CHECK_BINDINGS 0x00000040 // Check if PPP is bound to TCP
|
||
|
|
||
|
#define DT_CMMON 0x00000001
|
||
|
#define DT_EXPLORER 0x00000002
|
||
|
#define DT_CMMGR 0x00000004
|
||
|
#define DT_CMSTP 0x00000008
|
||
|
#define DT_RUNDLL32 0x00000010
|
||
|
#define DT_RASAUTOU 0x00000020
|
||
|
#define DT_USER (DT_CMMGR | DT_CMMON | DT_EXPLORER | DT_CMSTP | DT_RUNDLL32 | DT_RASAUTOU)
|
||
|
|
||
|
#define MAX_PHONE_NUMBERS 2
|
||
|
|
||
|
#define MAX_PHONE_LEN95 36 //Win 95 has 36 char phone limit
|
||
|
#define MAX_PHONE_LENNT 80 //NT has 80 char phone limit
|
||
|
|
||
|
//
|
||
|
// Country list limits and defines
|
||
|
//
|
||
|
|
||
|
#define DEF_COUNTRY_INFO_SIZE 1024
|
||
|
#define MAX_COUNTRY_NAME 36
|
||
|
|
||
|
#define DEFAULT_COUNTRY_CODE 1
|
||
|
#define DEFAULT_COUNTRY_ID 1 // US
|
||
|
//
|
||
|
// Default settings values
|
||
|
//
|
||
|
|
||
|
#define DEFAULT_IDLETIMEOUT 10 // # of minutes to wait before idle disconnect
|
||
|
|
||
|
#define DEFAULT_DIALEXTRAPERCENT 80 // see ArgsStruct dwDialExtraPercent
|
||
|
#define DEFAULT_DIALEXTRASAMPLESECONDS 30 // see ArgsStruct dwDialExtraSampleSeconds
|
||
|
#define DEFAULT_HANGUPEXTRAPERCENT 40 // see ArgsStruct dwHangupExtraPercent
|
||
|
#define DEFAULT_HANGUPEXTRASAMPLESECONDS 300 // see ArgsStruct dwHangupExtraSampleSeconds
|
||
|
|
||
|
|
||
|
#define DEFAULT_REDIAL_DELAY 5
|
||
|
#define DEFAULT_MAX_REDIALS 3
|
||
|
|
||
|
#define NT4_BUILD_NUMBER 1381
|
||
|
|
||
|
//
|
||
|
// isdn dial mode
|
||
|
//
|
||
|
#define CM_ISDN_MODE_SINGLECHANNEL 0
|
||
|
#define CM_ISDN_MODE_DUALCHANNEL_ONLY 1
|
||
|
#define CM_ISDN_MODE_DUALCHANNEL_FALLBACK 2
|
||
|
|
||
|
//
|
||
|
// len for the var lasterror string
|
||
|
//
|
||
|
#define MAX_LASTERR_LEN 128
|
||
|
|
||
|
//
|
||
|
// Flags for manipulating dialog template mask
|
||
|
//
|
||
|
#define CMTM_UID 0x00000001 // Username to be displayed
|
||
|
#define CMTM_PWD 0x00000002 // Password to be displayed
|
||
|
#define CMTM_DMN 0x00000004 // Domain to be displayed
|
||
|
#define CMTM_FAVS 0x00000008 // Favorite enbabled dialogs
|
||
|
#define CMTM_GCOPT 0x00000010 // Global Credential Options
|
||
|
|
||
|
|
||
|
#define CMTM_UID_AND_PWD CMTM_UID | CMTM_PWD // 0x00000003 // No domain displayed
|
||
|
#define CMTM_UID_AND_DMN CMTM_UID | CMTM_DMN // 0x00000005 // No Password displayed
|
||
|
#define CMTM_PWD_AND_DMN CMTM_PWD | CMTM_DMN // 0x00000006 // No Username displayed
|
||
|
#define CMTM_U_P_D CMTM_UID | CMTM_PWD | CMTM_DMN // 0x00000007 // All userinfo displayed
|
||
|
|
||
|
//
|
||
|
// Access point names should be no longer than 32 chars (not counting the NULL terminator)
|
||
|
//
|
||
|
#define MAX_ACCESSPOINT_LENGTH 32
|
||
|
#define ID_OK_RELAUNCH_MAIN_DLG 123174
|
||
|
|
||
|
//
|
||
|
// Balloon Tip Flags
|
||
|
//
|
||
|
#define BT_ACCESS_POINTS 0x00000001 // Access Point balloon tip has already been displayed
|
||
|
|
||
|
//
|
||
|
// Connection Types
|
||
|
//
|
||
|
#define DIAL_UP_CONNECTION 0
|
||
|
#define DIRECT_CONNECTION 1
|
||
|
#define DOUBLE_DIAL_CONNECTION 2
|
||
|
|
||
|
class CConnStatistics;
|
||
|
|
||
|
//
|
||
|
// Special-case some smart-card PIN errors
|
||
|
//
|
||
|
#define BAD_SCARD_PIN(x) ((SCARD_W_WRONG_CHV == (x)) || (SCARD_E_INVALID_CHV == (x)))
|
||
|
|
||
|
|
||
|
//************************************************************************
|
||
|
// structures, typdef's
|
||
|
//************************************************************************
|
||
|
|
||
|
//
|
||
|
// Function prototypes for entrypoints into RAS. We will link to RAS using LoadLibary()/GetProcAddress(),
|
||
|
// so that we can be flexible concerning how we load (for example, if RAS is not installed on the machine,
|
||
|
// we can print a polite message, instead of just having Windows put up an ugly dialog about RASAPI32.DLL
|
||
|
// not being found.
|
||
|
//
|
||
|
|
||
|
#include "raslink.h"
|
||
|
|
||
|
//
|
||
|
// Function prototypes for entrypoints into TAPI. We will link to TAPI using LoadLibary()/GetProcAddress(),
|
||
|
// so that we can be flexible concerning how we load (for example, if TAPI is not installed on the machine,
|
||
|
// we can print a polite message, instead of just having Windows put up an ugly dialog about TAPI32.DLL
|
||
|
// not being found.
|
||
|
//
|
||
|
|
||
|
typedef LONG (WINAPI *pfnTapilineInitialize)(LPHLINEAPP, HINSTANCE, LINECALLBACK, LPCTSTR, LPDWORD);
|
||
|
typedef LONG (WINAPI *pfnTapilineNegotiateAPIVersion)(HLINEAPP, DWORD, DWORD, DWORD, LPDWORD, LPLINEEXTENSIONID);
|
||
|
typedef LONG (WINAPI *pfnTapilineGetDevCaps)(HLINEAPP, DWORD, DWORD, DWORD, LPLINEDEVCAPS);
|
||
|
typedef LONG (WINAPI *pfnTapilineShutdown)(HLINEAPP);
|
||
|
typedef LONG (WINAPI *pfnTapilineTranslateAddress)(HLINEAPP, DWORD, DWORD, LPCTSTR, DWORD, DWORD, LPLINETRANSLATEOUTPUT);
|
||
|
typedef LONG (WINAPI *pfnTapilineTranslateDialog)(HLINEAPP, DWORD, DWORD, HWND, LPCTSTR);
|
||
|
typedef LONG (WINAPI *pfnTapilineGetDevConfig)(DWORD, LPVARSTRING, LPCSTR);
|
||
|
|
||
|
//typedef LONG (WINAPI *pfnTapilineGetID)(HLINE, DWORD, HCALL, DWORD, LPVARSTRING, LPCTSTR);
|
||
|
//typedef LONG (WINAPI *pfnTapitapiGetLocationInfo)(LPCTSTR, LPCTSTR);
|
||
|
|
||
|
typedef LONG (WINAPI *pfnTapilineGetTranslateCaps)(HLINEAPP, DWORD, LPLINETRANSLATECAPS);
|
||
|
typedef LONG (WINAPI *pfnTapilineSetCurrentLocation)(HLINEAPP, DWORD);
|
||
|
|
||
|
//
|
||
|
// function prototypes for LSA stuff.
|
||
|
//
|
||
|
typedef NTSTATUS (NTAPI *pfnLsaOpenPolicy)(PLSA_UNICODE_STRING, PLSA_OBJECT_ATTRIBUTES, ACCESS_MASK, PLSA_HANDLE);
|
||
|
typedef NTSTATUS (NTAPI *pfnLsaRetrievePrivateData)(LSA_HANDLE, PLSA_UNICODE_STRING, PLSA_UNICODE_STRING *);
|
||
|
typedef NTSTATUS (NTAPI *pfnLsaStorePrivateData)(LSA_HANDLE, PLSA_UNICODE_STRING, PLSA_UNICODE_STRING);
|
||
|
typedef ULONG (NTAPI *pfnLsaNtStatusToWinError)(NTSTATUS);
|
||
|
typedef NTSTATUS (NTAPI *pfnLsaClose)(LSA_HANDLE);
|
||
|
typedef NTSTATUS (NTAPI *pfnLsaFreeMemory)(PVOID);
|
||
|
|
||
|
//
|
||
|
// Connect Action Function Prototype
|
||
|
//
|
||
|
typedef DWORD (WINAPI *pfnCmConnectActionFunc)(HWND, HINSTANCE, LPCSTR, int);
|
||
|
|
||
|
//
|
||
|
// Structure used to describe the linkage to TAPI. NOTE: Changes to this structure
|
||
|
// will probably require changes to LinkToTapi() and UnlinkFromTapi().
|
||
|
//
|
||
|
typedef struct _TapiLinkageStruct {
|
||
|
HINSTANCE hInstTapi;
|
||
|
union {
|
||
|
struct {
|
||
|
pfnTapilineInitialize pfnlineInitialize;
|
||
|
pfnTapilineNegotiateAPIVersion pfnlineNegotiateAPIVersion;
|
||
|
pfnTapilineGetDevCaps pfnlineGetDevCaps;
|
||
|
pfnTapilineGetDevConfig pfnlineGetDevConfig;
|
||
|
pfnTapilineShutdown pfnlineShutdown;
|
||
|
pfnTapilineTranslateAddress pfnlineTranslateAddress;
|
||
|
// pfnTapitapiGetLocationInfo pfntapiGetLocationInfo;
|
||
|
pfnTapilineTranslateDialog pfnlineTranslateDialog;
|
||
|
// pfnTapilineGetID pfnlineGetID;
|
||
|
pfnTapilineGetTranslateCaps pfnlineGetTranslateCaps;
|
||
|
pfnTapilineSetCurrentLocation pfnlineSetCurrentLocation;
|
||
|
};
|
||
|
void *apvPfnTapi[10]; // see comment for RasLinkageStruct for 10.
|
||
|
};
|
||
|
HLINEAPP hlaLine;
|
||
|
DWORD dwDevCnt;
|
||
|
BOOL bOpen;
|
||
|
BOOL bDevicePicked;
|
||
|
TCHAR szDeviceName[RAS_MaxDeviceName + 1];
|
||
|
DWORD dwDeviceId;
|
||
|
DWORD dwApiVersion;
|
||
|
BOOL bModemSpeakerOff;
|
||
|
DWORD dwTapiLocationForAccessPoint; // Tapi location for current access point
|
||
|
DWORD dwOldTapiLocation; // Tapi location when CM is started, restored when CM exits
|
||
|
} TapiLinkageStruct;
|
||
|
|
||
|
|
||
|
typedef struct _LsaLinkageStruct {
|
||
|
HINSTANCE hInstLsa;
|
||
|
union {
|
||
|
struct {
|
||
|
pfnLsaOpenPolicy pfnOpenPolicy;
|
||
|
pfnLsaRetrievePrivateData pfnRetrievePrivateData;
|
||
|
pfnLsaStorePrivateData pfnStorePrivateData;
|
||
|
pfnLsaNtStatusToWinError pfnNtStatusToWinError;
|
||
|
pfnLsaClose pfnClose;
|
||
|
pfnLsaFreeMemory pfnFreeMemory;
|
||
|
};
|
||
|
void *apvPfnLsa[7];
|
||
|
};
|
||
|
} LsaLinkageStruct;
|
||
|
|
||
|
#define PHONE_DESC_LEN 80
|
||
|
#define PB_MAX_SERVICE 256
|
||
|
#define PB_MAX_REGION 256
|
||
|
|
||
|
//
|
||
|
// Phone Info Flags
|
||
|
//
|
||
|
|
||
|
#define PIF_USE_DIALING_RULES 0x00000001
|
||
|
|
||
|
typedef struct _PHONEINFO
|
||
|
{
|
||
|
DWORD dwCountryID;
|
||
|
TCHAR szPhoneNumber[RAS_MaxPhoneNumber+1];
|
||
|
TCHAR szCanonical[RAS_MaxPhoneNumber+1];
|
||
|
TCHAR szDUN[MAX_PATH+1];
|
||
|
TCHAR szPhoneBookFile[MAX_PATH+1]; // the service file associate with the phone #
|
||
|
TCHAR szDialablePhoneNumber[RAS_MaxPhoneNumber+1];
|
||
|
TCHAR szDisplayablePhoneNumber[RAS_MaxPhoneNumber+1];
|
||
|
TCHAR szDesc[PHONE_DESC_LEN];
|
||
|
DWORD dwPhoneInfoFlags;
|
||
|
|
||
|
//
|
||
|
// The following 2 vars are set by the phone book dlg(OnGeneralPhoneChange).
|
||
|
// We need to save them and then write them out when the user clicks OK.
|
||
|
//
|
||
|
TCHAR szServiceType[PB_MAX_SERVICE];
|
||
|
TCHAR szRegionName[PB_MAX_REGION];
|
||
|
|
||
|
} PHONEINFO, *PPHONEINFO;
|
||
|
|
||
|
//
|
||
|
// Structure for all of the program's data. Basically, the program doesn't have any
|
||
|
// global variables - everything is stored in this structure.
|
||
|
//
|
||
|
typedef struct _ArgsStruct
|
||
|
{
|
||
|
public:
|
||
|
LPICMOCCtr pCtr; // OC ctr for FS OC
|
||
|
UINT uMsgId; // message ID used for driving the dialing state machine
|
||
|
DWORD dwFlags; // any flags from the command line -- see IniArgs
|
||
|
RasLinkageStruct rlsRasLink; // linkade to RAS
|
||
|
HRASCONN hrcRasConn; // the handle of the RAS connection
|
||
|
TapiLinkageStruct tlsTapiLink; // linkage to TAPI
|
||
|
LsaLinkageStruct llsLsaLink; // linkage to LSA
|
||
|
BOOL fIgnoreChangeNotification; // TRUE if EN_CHANGE messages should be ignored
|
||
|
TCHAR szLastErrorSrc[MAX_LASTERR_LEN]; // the source of last err(either RAS or a connect action name)
|
||
|
TCHAR szDeviceName[RAS_MaxDeviceName+1]; // device being used
|
||
|
TCHAR szDeviceType[RAS_MaxDeviceName+1]; // device type of the device being used
|
||
|
TCHAR szUserName[UNLEN+1]; // username for corp account
|
||
|
TCHAR szPassword[PWLEN+1]; // password for corp account
|
||
|
TCHAR szDomain[DNLEN+1]; // domain for corp account
|
||
|
TCHAR szConnectoid[RAS_MaxEntryName]; // connectoid name
|
||
|
TCHAR szServiceName[RAS_MaxEntryName]; // top-level long service name
|
||
|
// added for tunneling
|
||
|
HRASCONN hrcTunnelConn; // the handle of the tunnel connection
|
||
|
TCHAR szTunnelDeviceType[RAS_MaxDeviceType+1]; // device type
|
||
|
TCHAR szTunnelDeviceName[RAS_MaxDeviceName+1]; // device being used for tunneling
|
||
|
TCHAR szInetUserName[UNLEN+1]; // username for internet(isp)
|
||
|
TCHAR szInetPassword[PWLEN+1]; // password for internet(isp)
|
||
|
BOOL fUseSameUserName; // TRUE if will use the same password for dialup
|
||
|
BOOL fHideDialAutomatically; // don't show 'dial automatically..." checkbox
|
||
|
BOOL fHideRememberPassword; // don't show 'remember password" checkbox
|
||
|
BOOL fHideRememberInetPassword; // don't show 'remember Internet password" checkbox
|
||
|
BOOL fDialAutomatically; // dial automatically upon start?
|
||
|
BOOL fRememberInetPassword; // remember the internet password
|
||
|
BOOL fRememberMainPassword; // remember the password in the main dialog box
|
||
|
BOOL fHideUserName; // Hide the username on the main logon tab
|
||
|
BOOL fHidePassword; // Hide the password on the main logon tab
|
||
|
BOOL fHideDomain; // Hide the domain on the main logon tab
|
||
|
BOOL fHideInetUsername; // Hide the username on the Inet logon tab
|
||
|
BOOL fHideInetPassword; // Hide the password on the Inet logon tab
|
||
|
BOOL fTunnelPrimary; // if TRUE, we'll tunnel only if the user selects a phone #
|
||
|
// from the pbk associated with the primary service profile
|
||
|
BOOL fTunnelReferences; // if TRUE, we'll tunnel only if the user selects a phone #
|
||
|
// from the pbk associated with the referenced service profile
|
||
|
BOOL fUseTunneling; // TRUE if use tunneling for dial-up networking(it is NOT the same
|
||
|
// as (fTunnel|fTunnelReferences)!!! It's determined by
|
||
|
// looking at the above 3 flags plus more.
|
||
|
BOOL bUseRasCredStore; // TRUE if this profile uses RasSetCredentials and RasGetCredentials
|
||
|
// to store creds on win2k+. Will be FALSE on legacy platforms
|
||
|
BOOL bShowHNetCfgAdvancedTab; // displays the ICF & ICS (Advanced) tab
|
||
|
// Internet Connection Sharing & Internet Connection Firewall tab
|
||
|
// TRUE by default
|
||
|
DWORD dwSCardErr; // special case handling for SmartCard errors
|
||
|
|
||
|
LPTSTR GetProperty(const TCHAR* pszName, BOOL *pbValidPropertyName); // get the cm property by name
|
||
|
DWORD GetTypeOfConnection(); // is the connection dialup, direct, or double dial?
|
||
|
protected:
|
||
|
//
|
||
|
// Encapsulate the tunnel address
|
||
|
//
|
||
|
|
||
|
// IP(or DNS name) in the profile for tunnel server
|
||
|
TCHAR szPrimaryTunnelIP[RAS_MaxPhoneNumber+1];
|
||
|
|
||
|
public:
|
||
|
|
||
|
const TCHAR* GetTunnelAddress()
|
||
|
{return szPrimaryTunnelIP;}
|
||
|
|
||
|
void SetPrimaryTunnel(LPCTSTR pszTunnelIP)
|
||
|
{lstrcpynU(szPrimaryTunnelIP, pszTunnelIP, sizeof(szPrimaryTunnelIP)/sizeof(TCHAR));}
|
||
|
|
||
|
public:
|
||
|
UINT_PTR nTimerId; // ID of the timer
|
||
|
ProgState psState; // the program's state
|
||
|
DWORD dwStateStartTime; // the time that the state started
|
||
|
UINT nRedialDelay; // the number of seconds to wait between redial attempts
|
||
|
UINT nMaxRedials; // the maximum number of times to redial
|
||
|
UINT nRedialCnt; // number of re-dial attempts remaining
|
||
|
UINT nLastSecondsDisplay; // the last seconds count which was displayed
|
||
|
UINT nDialIdx; // zero-based index of current phone number
|
||
|
PHONEINFO aDialInfo[MAX_PHONE_NUMBERS]; // actual phone number that's to be dialed
|
||
|
CIni *piniProfile;
|
||
|
CIni *piniService;
|
||
|
CIni *piniBoth;
|
||
|
CIni *piniBothNonFav;
|
||
|
LPTSTR pszHelpFile; // file name of help file
|
||
|
BMPDATA BmpData; // bitmap handles for main sign-in dialog
|
||
|
HPALETTE hMasterPalette; // the current palette for the app
|
||
|
HICON hBigIcon; // icon for Alt-Tab task bar
|
||
|
HICON hSmallIcon; // icon for main title bar and task bar
|
||
|
DWORD dwExitCode;
|
||
|
DWORD dwIdleTimeout; // Idle time out in minutes, 0 means never time out
|
||
|
HWND hwndResetPasswdButton;
|
||
|
HWND hwndTT; // tooltip
|
||
|
HANDLE *phWatchProcesses;
|
||
|
LPTSTR pszResetPasswdExe;
|
||
|
LPTSTR pszCurrentAccessPoint; // String to store the current access point
|
||
|
BOOL fAccessPointsEnabled; // Are Access Points enabled?
|
||
|
DWORD dwOldTapiLocation; // tapi location when CM is started
|
||
|
BOOL fHideBalloonTips; // Are Balloon Tips enabled?
|
||
|
CBalloonTip *pBalloonTip; // pointer to the Balloon tip class
|
||
|
|
||
|
// for references
|
||
|
BOOL fHasRefs;
|
||
|
BOOL fHasValidTopLevelPBK;
|
||
|
BOOL fHasValidReferencedPBKs;
|
||
|
|
||
|
//
|
||
|
// for IdleThreshold -- byao 5/30/97
|
||
|
//
|
||
|
|
||
|
CConnStatistics *pConnStatistics;
|
||
|
CConnectionTable *pConnTable;
|
||
|
|
||
|
// idle threshold value
|
||
|
|
||
|
BOOL fCheckOSComponents; // should we check OS components?
|
||
|
BOOL bDoNotCheckBindings; // Check if TCP is bound to PPP?
|
||
|
Ole32LinkageStruct olsOle32Link; // links to Ole32 DLL for future splashing
|
||
|
BOOL fFastEncryption; // Whether we want a faster encryption or a more secure one
|
||
|
DWORD bDialInfoLoaded; // Whether the dial info is loaded
|
||
|
BOOL fStartupInfoLoaded; // have we loaded Startup info? (OnMainLoadStartupInfo())
|
||
|
BOOL fNeedConfigureTapi; // need to configure TAPI location info
|
||
|
BOOL fIgnoreTimerRasMsg; // Whether to ignore WM_TIMER and RAS messages
|
||
|
BOOL fInFastUserSwitch; // Are we in the process of doing a fast user switch (FUS)
|
||
|
CShellDll m_ShellDll; // The link to Shell dll
|
||
|
|
||
|
public:
|
||
|
BOOL IsDirectConnect() const;
|
||
|
void SetDirectConnect(BOOL fDirect) ; // set the connection type direct or dial-up
|
||
|
BOOL IsBothConnTypeSupported() const;
|
||
|
void SetBothConnTypeSupported(BOOL fBoth);
|
||
|
|
||
|
protected:
|
||
|
BOOL m_fBothConnTypeSupported; // Whether the profile support both direct connect an dial-up
|
||
|
BOOL m_fDirectConnect; // Whether the current configuration is using direct connection
|
||
|
public:
|
||
|
LPTSTR pszRasPbk; // Ras phonebook path
|
||
|
LPTSTR pszRasHiddenPbk; // Hidden Ras phonebook path for dial-up portion of wholesale dial
|
||
|
LPTSTR pszVpnFile;
|
||
|
//
|
||
|
// ISDN dual channel support(dial all initially, dial on demand)
|
||
|
//
|
||
|
// Dial-on-demand:
|
||
|
// CM dials an additional channel when the total bandwidth used exceeds
|
||
|
// dwDialExtraPercent percent of the available bandwidth for at least
|
||
|
// dwDialExtraSampleSeconds seconds.
|
||
|
//
|
||
|
BOOL dwIsdnDialMode; // see CM_ISDN_MODE*
|
||
|
DWORD dwDialExtraPercent; // used when dialmode = dialasneeded
|
||
|
DWORD dwDialExtraSampleSeconds; // used when dialmode = dialasneeded
|
||
|
DWORD dwHangUpExtraPercent; // used when dialmode = dialasneeded
|
||
|
DWORD dwHangUpExtraSampleSeconds; // used when dialmode = dialasneeded
|
||
|
BOOL fInitSecureCalled; // whether InitSecure() is called for password Encryption
|
||
|
|
||
|
//
|
||
|
// pucDnsTunnelIpAddr_list:
|
||
|
// the h_addr_list of a HOSTENT - a list of ip addrs obtained by resolving the
|
||
|
// tunnel server DNS name.
|
||
|
// uiCurrentTunnelAddr
|
||
|
// the index for h_TunnelIpAddr_list. Points to the currently used ip addr address.
|
||
|
// rgwRandomDnsIndex
|
||
|
// an array of random index to index into the tunnel addr list
|
||
|
//
|
||
|
unsigned char *pucDnsTunnelIpAddr_list;
|
||
|
UINT uiCurrentDnsTunnelAddr;
|
||
|
DWORD dwDnsTunnelAddrCount;
|
||
|
PWORD rgwRandomDnsIndex;
|
||
|
BOOL fAllUser;
|
||
|
UINT uLanaMsgId; // Window handle of Lana window if any
|
||
|
LPRASDIALPARAMS pRasDialParams;
|
||
|
LPRASDIALEXTENSIONS pRasDialExtensions;
|
||
|
DWORD dwRasSubEntry;
|
||
|
HWND hwndMainDlg;
|
||
|
BOOL fNoDialingRules;
|
||
|
LPRASNOUSER lpRasNoUser;
|
||
|
PEAPLOGONINFO lpEapLogonInfo;
|
||
|
//
|
||
|
// Note: RAS will pass either a LPRASNOUSER or LPEAPLOGONINFO ptr through the
|
||
|
// RasCustomDialDlg interface when calling CM from WinLogon. RAS will
|
||
|
// differentiate them by the RCD_Eap flag, which will be set if the
|
||
|
// LPEAPLOGONINFO is passed. When not running in WinLogon, neither
|
||
|
// will be sent.
|
||
|
//
|
||
|
BOOL fChangedPassword; // User changed password during logon
|
||
|
HWND hWndChangePassword; // Hwnd of change passwor dialog
|
||
|
BOOL fWaitingForCallback; // We're waiting for RAS to call us back
|
||
|
HWND hWndCallbackNumber; // Hwnd of callback number dialog
|
||
|
HWND hWndRetryAuthentication; // Hwnd of Retry Authentication dialog
|
||
|
//
|
||
|
// Support for global credentials
|
||
|
//
|
||
|
BOOL fGlobalCredentialsSupported; // enables/disables support for global creds
|
||
|
DWORD dwCurrentCredentialType; // Which credentials are currently selected
|
||
|
DWORD dwExistingCredentials; // uses bit flags to mark if credentials exist
|
||
|
DWORD dwDeleteCredentials; // uses bit flag to mark creds for deletion
|
||
|
DWORD dwWinLogonType; // 0 - User logged on
|
||
|
// 1 - Winlogon: dial-up
|
||
|
// 2 - Winlogon: ICS (no one is logged on)
|
||
|
DWORD dwGlobalUserInfo; // uses bit flags to load/save global user info
|
||
|
|
||
|
LONG lInConnectOrCancel; // to protect against Cancel during Connect processing, and vice-versa
|
||
|
|
||
|
CmLogFile Log;
|
||
|
} ArgsStruct;
|
||
|
|
||
|
//
|
||
|
// Global Credential Support
|
||
|
//
|
||
|
|
||
|
// Used to identify the current RAS credential store being used.
|
||
|
// Used with ArgsStruct.dwCurrentCredentialType
|
||
|
#define CM_CREDS_USER 1
|
||
|
#define CM_CREDS_GLOBAL 2
|
||
|
|
||
|
// Identifies which type of credentials want to be use used
|
||
|
#define CM_CREDS_TYPE_MAIN 0
|
||
|
#define CM_CREDS_TYPE_INET 1
|
||
|
#define CM_CREDS_TYPE_BOTH 2
|
||
|
|
||
|
// Used to identify who is logged on.
|
||
|
// Used with ArgsStruct.dwWinLogonType
|
||
|
#define CM_LOGON_TYPE_USER 0 // User is logged on
|
||
|
#define CM_LOGON_TYPE_WINLOGON 1 // Dial-up, winlogon, reconnect user initiated logon
|
||
|
#define CM_LOGON_TYPE_ICS 2 // No user is logged on, but need to dial unattended (ICS)
|
||
|
|
||
|
// Used with ArgsStruct.dwGlobalUserInfo
|
||
|
#define CM_GLOBAL_USER_INFO_READ_ICS_DATA 0x0001 // used to load user settings for ICS
|
||
|
#define CM_GLOBAL_USER_INFO_WRITE_ICS_DATA 0x0002 // used to save user settings for ICS
|
||
|
|
||
|
|
||
|
// Used with ArgsStruct.dwExistingCredentials
|
||
|
#define CM_EXIST_CREDS_MAIN_GLOBAL 0x0001 // set if RAS credential store has main global creds
|
||
|
#define CM_EXIST_CREDS_MAIN_USER 0x0002 // set if RAS credential store has main user creds
|
||
|
#define CM_EXIST_CREDS_INET_GLOBAL 0x0004 // set if RAS credential store has Internet global creds
|
||
|
#define CM_EXIST_CREDS_INET_USER 0x0008 // set if RAS credential store has Internet user creds
|
||
|
|
||
|
// Used with ArgsStruct.dwDeleteCredentials
|
||
|
#define CM_DELETE_CREDS_MAIN_GLOBAL 0x0001 // set to delete main global creds
|
||
|
#define CM_DELETE_CREDS_MAIN_USER 0x0002 // set to delete main user creds
|
||
|
#define CM_DELETE_CREDS_INET_GLOBAL 0x0004 // set to delete Internet global creds
|
||
|
#define CM_DELETE_CREDS_INET_USER 0x0008 // set to delete Internet user creds
|
||
|
|
||
|
|
||
|
//
|
||
|
// RasNumEntry - phone number subset of RASENTRY
|
||
|
//
|
||
|
|
||
|
typedef struct tagRasNumEntry
|
||
|
{
|
||
|
DWORD dwSize;
|
||
|
DWORD dwfOptions;
|
||
|
DWORD dwCountryID;
|
||
|
DWORD dwCountryCode;
|
||
|
TCHAR szAreaCode[ RAS_MaxAreaCode + 1 ];
|
||
|
TCHAR szLocalPhoneNumber[ RAS_MaxPhoneNumber + 1 ];
|
||
|
} RASNUMENTRY, *LPRASNUMENTRY;
|
||
|
|
||
|
//
|
||
|
// EditNumData struct used to pass data to/from EditNum dialog.
|
||
|
//
|
||
|
|
||
|
typedef struct tagEditNumData
|
||
|
{
|
||
|
ArgsStruct *pArgs;
|
||
|
RASNUMENTRY RasNumEntry;
|
||
|
|
||
|
} EDITNUMDATA, *LPEDITNUMDATA;
|
||
|
|
||
|
|
||
|
//************************************************************************
|
||
|
// string constants
|
||
|
//************************************************************************
|
||
|
|
||
|
//
|
||
|
// CMMON exe name, expected to be local
|
||
|
//
|
||
|
const TCHAR* const c_pszCmMonExeName = TEXT("CMMON32.EXE");
|
||
|
|
||
|
//************************************************************************
|
||
|
// function prototypes
|
||
|
//************************************************************************
|
||
|
|
||
|
// init.cpp
|
||
|
|
||
|
void InitProfileFromName(ArgsStruct *pArgs,
|
||
|
LPCTSTR pszArg);
|
||
|
|
||
|
HRESULT InitProfile(ArgsStruct *pArgs,
|
||
|
LPCTSTR pszEntry);
|
||
|
|
||
|
HRESULT InitArgsForDisconnect(ArgsStruct *pArgs, BOOL fAllUser);
|
||
|
|
||
|
HRESULT InitArgsForConnect(ArgsStruct *pArgs,
|
||
|
LPCTSTR pszRasPhoneBook,
|
||
|
LPCMDIALINFO lpCmInfo,
|
||
|
BOOL fAllUser);
|
||
|
|
||
|
HRESULT InitCredentials(ArgsStruct *pArgs,
|
||
|
LPCMDIALINFO lpCmInfo,
|
||
|
DWORD dwFlags,
|
||
|
PVOID pvLogonBlob);
|
||
|
|
||
|
HRESULT InitLogging(ArgsStruct *pArgs,
|
||
|
LPCTSTR pszEntry,
|
||
|
BOOL fBanner);
|
||
|
|
||
|
LRESULT CreateIniObjects(ArgsStruct *pArgs);
|
||
|
|
||
|
void ReleaseIniObjects(ArgsStruct *pArgs);
|
||
|
|
||
|
DWORD RegisterBitmapClass(HINSTANCE hInst);
|
||
|
|
||
|
HRESULT WriteCmpInfoToReg(LPCTSTR pszSubKey,
|
||
|
LPCTSTR pszEntryName,
|
||
|
PVOID pEntryValue,
|
||
|
DWORD dwType,
|
||
|
DWORD dwSize);
|
||
|
|
||
|
LPTSTR GetEntryFromCmp(const TCHAR *pszSectionName,
|
||
|
LPTSTR pszEntryName,
|
||
|
LPCTSTR pszCmpPath);
|
||
|
|
||
|
void ReplaceCmpFile(LPCTSTR pszCmpPath);
|
||
|
|
||
|
LPTSTR FormRegPathFromAccessPoint(ArgsStruct *pArgs);
|
||
|
|
||
|
|
||
|
// disconn.cpp
|
||
|
|
||
|
DWORD Disconnect(CConnectionTable *pConnTable,
|
||
|
LPCM_CONNECTION pConnection,
|
||
|
BOOL fIgnoreRefCount,
|
||
|
BOOL fPersist);
|
||
|
|
||
|
DWORD HangupNotifyCmMon(CConnectionTable *pConnTable,
|
||
|
LPCTSTR pszEntry);
|
||
|
|
||
|
// connect.cpp
|
||
|
|
||
|
HRESULT Connect(HWND hwndParent,
|
||
|
LPCTSTR lpszEntry,
|
||
|
LPTSTR lpszPhonebook,
|
||
|
LPRASDIALDLG lpRasDialDlg,
|
||
|
LPRASENTRYDLG lpRasEntryDlg,
|
||
|
LPCMDIALINFO lpCmInfo,
|
||
|
DWORD dwFlags,
|
||
|
LPVOID lpvLogonBlob);
|
||
|
|
||
|
#define NOT_IN_CONNECT_OR_CANCEL 0
|
||
|
#define IN_CONNECT_OR_CANCEL 1
|
||
|
|
||
|
void GetConnectType(ArgsStruct *pArgs);
|
||
|
|
||
|
void AddWatchProcessId(ArgsStruct *pArgs, DWORD dwProcessId);
|
||
|
void AddWatchProcess(ArgsStruct *pArgs, HANDLE hProcess);
|
||
|
|
||
|
DWORD DoRasHangup(RasLinkageStruct *prlsRasLink,
|
||
|
HRASCONN hRasConnection,
|
||
|
HWND hwndDlg = NULL,
|
||
|
BOOL fWaitForComplete = FALSE,
|
||
|
LPBOOL pfWaiting = NULL);
|
||
|
|
||
|
DWORD MyRasHangup(ArgsStruct *pArgs,
|
||
|
HRASCONN hRasConnection,
|
||
|
HWND hwndDlg = NULL,
|
||
|
BOOL fWaitForComplete = FALSE);
|
||
|
|
||
|
DWORD HangupCM(
|
||
|
ArgsStruct *pArgs,
|
||
|
HWND hwndDlg,
|
||
|
BOOL fWaitForComplete = FALSE,
|
||
|
BOOL fUpdateTable = TRUE);
|
||
|
|
||
|
BOOL UseTunneling(
|
||
|
ArgsStruct *pArgs,
|
||
|
DWORD dwEntry
|
||
|
);
|
||
|
|
||
|
void SetMainDlgUserInfo(
|
||
|
ArgsStruct *pArgs,
|
||
|
HWND hwndDlg
|
||
|
);
|
||
|
|
||
|
BOOL OnResetPassword(
|
||
|
HWND hwndDlg,
|
||
|
ArgsStruct *pArgs
|
||
|
);
|
||
|
|
||
|
void AppendStatusPane(HWND hwndDlg,
|
||
|
DWORD dwMsgId);
|
||
|
|
||
|
void AppendStatusPane(HWND hwndDlg,
|
||
|
LPCTSTR pszMsg);
|
||
|
|
||
|
LPTSTR GetPhoneByIdx(ArgsStruct *pArgs,
|
||
|
UINT nIdx,
|
||
|
LPTSTR *ppszDesc,
|
||
|
LPTSTR *ppszDUN,
|
||
|
LPDWORD pdwCountryID,
|
||
|
LPTSTR *ppszRegionName,
|
||
|
LPTSTR *ppszServiceType,
|
||
|
LPTSTR *ppszPhoneBookFile,
|
||
|
LPTSTR *ppszCanonical,
|
||
|
DWORD *pdwPhoneInfoFlags);
|
||
|
|
||
|
void PutPhoneByIdx(ArgsStruct *pArgs,
|
||
|
UINT nIdx,
|
||
|
LPCTSTR pszPhone,
|
||
|
LPCTSTR pszDesc,
|
||
|
LPCTSTR pszDUN,
|
||
|
DWORD dwCountryID,
|
||
|
LPCTSTR pszRegionName,
|
||
|
LPCTSTR pszServiceType,
|
||
|
LPCTSTR pszPhoneBookFile,
|
||
|
LPCTSTR ppszCanonical,
|
||
|
DWORD dwPhoneInfoFlags);
|
||
|
|
||
|
DWORD LoadDialInfo(ArgsStruct *pArgs, HWND hwndDlg, BOOL fInstallModem = TRUE, BOOL fAlwaysMunge = FALSE);
|
||
|
VOID MungeDialInfo(ArgsStruct *pArgs);
|
||
|
|
||
|
void LoadHelpFileInfo(ArgsStruct *pArgs);
|
||
|
|
||
|
void CopyPhone(ArgsStruct *pArgs,
|
||
|
LPRASENTRY preEntry,
|
||
|
DWORD dwEntry);
|
||
|
|
||
|
VOID LoadLogoBitmap(ArgsStruct * pArgs,
|
||
|
HWND hwndDlg);
|
||
|
|
||
|
HRESULT LoadFutureSplash(ArgsStruct * pArgs,
|
||
|
HWND hwndDlg);
|
||
|
|
||
|
void LoadProperties(
|
||
|
ArgsStruct *pArgs
|
||
|
);
|
||
|
|
||
|
void LoadIconsAndBitmaps(
|
||
|
ArgsStruct *pArgs,
|
||
|
HWND hwndDlg
|
||
|
);
|
||
|
|
||
|
DWORD DoRasDial(HWND hwndDlg,
|
||
|
ArgsStruct *pArgs,
|
||
|
DWORD dwEntry);
|
||
|
|
||
|
DWORD DoTunnelDial(HWND hwndDlg,
|
||
|
ArgsStruct *pArgs);
|
||
|
|
||
|
BOOL CheckConnect(HWND hwndDlg,
|
||
|
ArgsStruct *pArgs,
|
||
|
UINT *pnCtrlFocus,
|
||
|
BOOL fShowMsg = FALSE);
|
||
|
|
||
|
void MainSetDefaultButton(HWND hwndDlg,
|
||
|
UINT nCtrlId);
|
||
|
|
||
|
VOID MapStateToFrame(ArgsStruct * pArgs);
|
||
|
|
||
|
void SetInteractive(HWND hwndDlg,
|
||
|
ArgsStruct *pArgs);
|
||
|
|
||
|
void OnMainLoadStartupInfo(
|
||
|
HWND hwndDlg,
|
||
|
ArgsStruct *pArgs
|
||
|
);
|
||
|
|
||
|
BOOL SetupInternalInfo(
|
||
|
ArgsStruct *pArgs,
|
||
|
HWND hwndDlg
|
||
|
);
|
||
|
|
||
|
void OnMainInit(HWND hwndDlg,
|
||
|
ArgsStruct *pArgs);
|
||
|
|
||
|
void OnMainConnect(HWND hwndDlg,
|
||
|
ArgsStruct *pArgs);
|
||
|
|
||
|
int OnMainProperties(HWND hwndDlg,
|
||
|
ArgsStruct *pArgs);
|
||
|
|
||
|
void OnMainCancel(HWND hwndDlg,
|
||
|
ArgsStruct *pArgs);
|
||
|
|
||
|
void OnMainEnChange(HWND hwndDlg,
|
||
|
ArgsStruct *pArgs);
|
||
|
|
||
|
DWORD OnRasNotificationMessage(HWND hwndDlg,
|
||
|
ArgsStruct *pArgs,
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam);
|
||
|
|
||
|
void OnRasErrorMessage(HWND hwndDlg,
|
||
|
ArgsStruct *pArgs,
|
||
|
DWORD dwError);
|
||
|
|
||
|
void OnMainTimer(HWND hwndDlg,
|
||
|
ArgsStruct *pArgs);
|
||
|
|
||
|
void OnConnectedCM(HWND hwndDlg,
|
||
|
ArgsStruct *pArgs);
|
||
|
|
||
|
INT_PTR CALLBACK MainDlgProc(HWND hwndDlg,
|
||
|
UINT uMsg,
|
||
|
WPARAM wParam,
|
||
|
LPARAM lParam);
|
||
|
|
||
|
BOOL ShowAccessPointInfoFromReg(ArgsStruct *pArgs,
|
||
|
HWND hwndParent,
|
||
|
UINT uiComboID);
|
||
|
|
||
|
BOOL ChangedAccessPoint(ArgsStruct *pArgs,
|
||
|
HWND hwndDlg,
|
||
|
UINT uiComboID);
|
||
|
|
||
|
// dialogs.cpp
|
||
|
|
||
|
int DoPropertiesPropSheets(
|
||
|
HWND hwndDlg,
|
||
|
ArgsStruct *pArgs
|
||
|
);
|
||
|
|
||
|
void CheckConnectionAndInformUser(
|
||
|
HWND hwndDlg,
|
||
|
ArgsStruct *pArgs
|
||
|
);
|
||
|
|
||
|
BOOL HaveContextHelp(
|
||
|
HWND hwndDlg,
|
||
|
HWND hwndCtrl
|
||
|
);
|
||
|
|
||
|
// refs.cpp
|
||
|
|
||
|
BOOL ValidTopLevelPBK(
|
||
|
ArgsStruct *pArgs
|
||
|
);
|
||
|
|
||
|
BOOL ValidReferencedPBKs(
|
||
|
ArgsStruct *pArgs
|
||
|
);
|
||
|
|
||
|
CIni* GetAppropriateIniService(
|
||
|
ArgsStruct *pArgs,
|
||
|
DWORD dwEntry
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
// ctr.cpp
|
||
|
|
||
|
VOID CleanupCtr(LPICMOCCtr pCtr);
|
||
|
|
||
|
BOOL LinkToOle32(
|
||
|
Ole32LinkageStruct *polsOle32Link,
|
||
|
LPCSTR pszOle32);
|
||
|
|
||
|
void UnlinkFromOle32(
|
||
|
Ole32LinkageStruct *polsOle32Link);
|
||
|
|
||
|
// util.cpp
|
||
|
|
||
|
BOOL InBetween(int iLowerBound, int iNumber, int iUpperBound);
|
||
|
|
||
|
void GetPrefixSuffix
|
||
|
(
|
||
|
ArgsStruct *pArgs,
|
||
|
CIni* piniService,
|
||
|
LPTSTR *ppszUsernamePrefix,
|
||
|
LPTSTR *ppszUsernameSuffix
|
||
|
);
|
||
|
|
||
|
LPTSTR ApplyPrefixSuffixToBufferAlloc
|
||
|
(
|
||
|
ArgsStruct *pArgs,
|
||
|
CIni *piniService,
|
||
|
LPTSTR pszBuffer
|
||
|
);
|
||
|
|
||
|
LPTSTR ApplyDomainPrependToBufferAlloc
|
||
|
(
|
||
|
ArgsStruct *pArgs,
|
||
|
CIni *piniService,
|
||
|
LPTSTR pszBuffer,
|
||
|
LPCTSTR pszDunName
|
||
|
);
|
||
|
|
||
|
void ApplyPasswordHandlingToBuffer
|
||
|
(
|
||
|
ArgsStruct *pArgs,
|
||
|
LPTSTR pszBuffer
|
||
|
);
|
||
|
|
||
|
BOOL IsActionEnabled(CONST WCHAR *pszProgram,
|
||
|
CONST WCHAR *pszServiceName,
|
||
|
CONST WCHAR *pszServiceFileName,
|
||
|
LPDWORD lpdwLoadType);
|
||
|
|
||
|
BOOL IsLogonAsSystem();
|
||
|
|
||
|
BOOL UnRegisterWindowClass(HINSTANCE hInst);
|
||
|
|
||
|
DWORD RegisterWindowClass(HINSTANCE hInst);
|
||
|
|
||
|
LPCM_CONNECTION GetConnection(ArgsStruct *pArgs);
|
||
|
|
||
|
void NotifyUserOfExistingConnection(
|
||
|
HWND hwndParent,
|
||
|
LPCM_CONNECTION pConnection,
|
||
|
BOOL fStatus);
|
||
|
|
||
|
BOOL FileExists(LPCTSTR pszFullNameAndPath);
|
||
|
|
||
|
LPTSTR CmGetWindowTextAlloc(
|
||
|
HWND hwndDlg,
|
||
|
UINT nCtrl);
|
||
|
|
||
|
LPTSTR GetServiceName(CIni *piniService);
|
||
|
|
||
|
LPTSTR GetTunnelSuffix();
|
||
|
|
||
|
LPTSTR GetDefaultDunSettingName(CIni* piniService, BOOL fTunnelEntry);
|
||
|
|
||
|
LPTSTR GetDunSettingName(ArgsStruct * pArgs, DWORD dwEntry, BOOL fTunnelEntry);
|
||
|
|
||
|
LPTSTR GetCMSforPhoneBook(ArgsStruct * pArgs, DWORD dwEntry);
|
||
|
|
||
|
BOOL ReadMappingByRoot(
|
||
|
HKEY hkRoot,
|
||
|
LPCTSTR pszDUN,
|
||
|
LPTSTR pszMapping,
|
||
|
DWORD dwMapping,
|
||
|
BOOL bExpandEnvStrings
|
||
|
);
|
||
|
|
||
|
BOOL ReadMapping(
|
||
|
LPCTSTR pszDUN,
|
||
|
LPTSTR pszMapping,
|
||
|
DWORD dwMapping,
|
||
|
BOOL fAllUser,
|
||
|
BOOL bExpandEnvStrings
|
||
|
);
|
||
|
|
||
|
LPTSTR ReducePathToRelative(
|
||
|
ArgsStruct *pArgs,
|
||
|
LPCTSTR pszFullPath);
|
||
|
|
||
|
BOOL IsBlankString(LPCTSTR pszString);
|
||
|
|
||
|
BOOL IsValidPhoneNumChar(TCHAR tChar);
|
||
|
|
||
|
LPTSTR StripPath(LPCTSTR pszFullNameAndPath);
|
||
|
|
||
|
void SingleSpace(LPTSTR pszStr, UINT uNumCharsInStr);
|
||
|
|
||
|
void Ip_GPPS(CIni *pIni,
|
||
|
LPCTSTR pszSection,
|
||
|
LPCTSTR pszEntry,
|
||
|
RASIPADDR *pIP);
|
||
|
|
||
|
void CopyGPPS(CIni *pIni,
|
||
|
LPCTSTR pszSection,
|
||
|
LPCTSTR pszEntry,
|
||
|
LPTSTR pszBuffer,
|
||
|
size_t nLen);
|
||
|
|
||
|
BYTE HexValue(IN CHAR ch);
|
||
|
CHAR HexChar(IN BYTE byte);
|
||
|
|
||
|
void StripCanonical(LPTSTR pszSrc);
|
||
|
void StripFirstElement(LPTSTR pszSrc);
|
||
|
|
||
|
BOOL FrontExistingUI
|
||
|
(
|
||
|
CConnectionTable *pConnTable,
|
||
|
LPCTSTR pszServiceName,
|
||
|
BOOL fConnect
|
||
|
);
|
||
|
|
||
|
|
||
|
LPTSTR GetPropertiesDlgTitle(
|
||
|
LPCTSTR pszServiceName
|
||
|
);
|
||
|
|
||
|
int GetPPTPMsgId(void);
|
||
|
|
||
|
BOOL IsServicePackInstalled(void);
|
||
|
|
||
|
// pb.cpp
|
||
|
|
||
|
#define CPBMAP_ERROR -1
|
||
|
|
||
|
class CPBMap {
|
||
|
public:
|
||
|
CPBMap();
|
||
|
~CPBMap();
|
||
|
DWORD Open(LPCSTR pszISP, DWORD dwParam=0);
|
||
|
DWORD ToCookie(DWORD_PTR dwPB, DWORD dwIdx, DWORD *pdwParam=NULL);
|
||
|
DWORD_PTR PBFromCookie(DWORD dwCookie, DWORD *pdwParam=NULL);
|
||
|
DWORD IdxFromCookie(DWORD dwCookie, DWORD *pdwParam=NULL);
|
||
|
DWORD_PTR GetPBByIdx(DWORD_PTR dwIdx, DWORD *pdwParam=NULL);
|
||
|
DWORD GetCnt();
|
||
|
private:
|
||
|
UINT m_nCnt;
|
||
|
void *m_pvData;
|
||
|
};
|
||
|
|
||
|
#define PB_MAX_PHONE (RAS_MaxPhoneNumber+1)
|
||
|
#define PB_MAX_DESC 256
|
||
|
|
||
|
typedef struct tagPBArgs {
|
||
|
LPCTSTR pszCMSFile;
|
||
|
TCHAR szServiceType[PB_MAX_SERVICE];
|
||
|
DWORD dwCountryId;
|
||
|
TCHAR szRegionName[PB_MAX_REGION];
|
||
|
TCHAR szNonCanonical[PB_MAX_PHONE];
|
||
|
TCHAR szCanonical[PB_MAX_PHONE];
|
||
|
TCHAR szDesc[PB_MAX_DESC];
|
||
|
LPTSTR pszMessage;
|
||
|
TCHAR szPhoneBookFile[MAX_PATH+1];
|
||
|
LPTSTR pszBitmap;
|
||
|
LPCTSTR pszHelpFile;
|
||
|
TCHAR szDUNFile[MAX_PATH+1];
|
||
|
HPALETTE *phMasterPalette;
|
||
|
} PBArgs;
|
||
|
|
||
|
|
||
|
BOOL DisplayPhoneBook(HWND hwndDlg, PBArgs *pArgs, BOOL fHasValidTopLevelPBK, BOOL fHasValidReferencedPBKs);
|
||
|
|
||
|
// rnawnd.cpp
|
||
|
|
||
|
HANDLE ZapRNAConnectedTo(LPCTSTR pszDUN, HANDLE hEvent);
|
||
|
|
||
|
// userinfo.cpp
|
||
|
|
||
|
BOOL GetUserInfo(
|
||
|
ArgsStruct *pArgs,
|
||
|
UINT uiEntry,
|
||
|
PVOID *ppvData
|
||
|
);
|
||
|
|
||
|
BOOL SaveUserInfo(
|
||
|
ArgsStruct *pArgs,
|
||
|
UINT uiEntry,
|
||
|
PVOID pvData
|
||
|
);
|
||
|
|
||
|
BOOL DeleteUserInfo(
|
||
|
ArgsStruct *pArgs,
|
||
|
UINT uiEntry
|
||
|
);
|
||
|
|
||
|
int NeedToUpgradeUserInfo(
|
||
|
ArgsStruct *pArgs
|
||
|
);
|
||
|
|
||
|
BOOL UpgradeUserInfoFromCmp(
|
||
|
ArgsStruct *pArgs
|
||
|
);
|
||
|
|
||
|
BOOL UpgradeUserInfoFromRegToRasAndReg(
|
||
|
ArgsStruct *pArgs
|
||
|
);
|
||
|
|
||
|
BOOL ReadUserInfoFromReg(
|
||
|
ArgsStruct *pArgs,
|
||
|
UINT uiDataID,
|
||
|
PVOID *ppvData);
|
||
|
|
||
|
LPTSTR BuildUserInfoSubKey(
|
||
|
LPCTSTR pszServiceKey,
|
||
|
BOOL fAllUser);
|
||
|
|
||
|
LPTSTR BuildICSDataInfoSubKey(
|
||
|
LPCTSTR pszServiceKey);
|
||
|
|
||
|
BOOL WriteUserInfoToReg(
|
||
|
ArgsStruct *pArgs,
|
||
|
UINT uiDataID,
|
||
|
PVOID pvData);
|
||
|
|
||
|
// ntlsa.cpp
|
||
|
|
||
|
DWORD LSA_ReadString(
|
||
|
ArgsStruct *pArgs,
|
||
|
LPTSTR pszKey,
|
||
|
LPTSTR pszStr,
|
||
|
DWORD dwStrLen
|
||
|
);
|
||
|
|
||
|
DWORD LSA_WriteString(
|
||
|
ArgsStruct *pArgs,
|
||
|
LPTSTR pszKey,
|
||
|
LPCTSTR pszStr
|
||
|
);
|
||
|
|
||
|
BOOL InitLsa(
|
||
|
ArgsStruct *pArgs
|
||
|
);
|
||
|
|
||
|
BOOL DeInitLsa(
|
||
|
ArgsStruct *pArgs
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
// ras.cpp
|
||
|
BOOL IsRasLoaded(const RasLinkageStruct * const prlsRasLink);
|
||
|
BOOL LinkToRas(RasLinkageStruct *prlsRasLink);
|
||
|
void UnlinkFromRas(RasLinkageStruct *prlsRasLink);
|
||
|
BOOL GetRasModems(const RasLinkageStruct *prlsRasLink,
|
||
|
LPRASDEVINFO *pprdiRasDevInfo,
|
||
|
LPDWORD pdwCnt);
|
||
|
|
||
|
BOOL PickModem(IN const ArgsStruct *pArgs,
|
||
|
OUT LPTSTR pszDeviceType,
|
||
|
OUT LPTSTR pszDeviceName,
|
||
|
OUT BOOL* pfSameModem = NULL);
|
||
|
|
||
|
BOOL GetDeviceType(ArgsStruct *pArgs,
|
||
|
LPTSTR pszDeviceType,
|
||
|
UINT uNumCharsInDeviceType,
|
||
|
LPTSTR pszDeviceName);
|
||
|
|
||
|
BOOL PickTunnelDevice(LPTSTR pszDeviceType,
|
||
|
LPTSTR pszDeviceName,
|
||
|
LPRASDEVINFO prdiModems,
|
||
|
DWORD dwCnt);
|
||
|
|
||
|
BOOL PickTunnelDevice(ArgsStruct *pArgs,
|
||
|
LPTSTR pszDeviceType,
|
||
|
LPTSTR pszDeviceName);
|
||
|
|
||
|
void CopyAutoDial(LPRASENTRY preEntry);
|
||
|
|
||
|
LPRASENTRY MyRGEP(LPCTSTR pszRasPbk,
|
||
|
LPCTSTR pszEntryName,
|
||
|
RasLinkageStruct *prlsRasLink);
|
||
|
|
||
|
BOOL CheckConnectionError(HWND hwndDlg,
|
||
|
DWORD dwErr,
|
||
|
ArgsStruct *pArgs,
|
||
|
BOOL fTunneling,
|
||
|
LPTSTR *ppszRasErrMsg = NULL);
|
||
|
|
||
|
LPTSTR GetRasConnectoidName(
|
||
|
ArgsStruct *pArgs,
|
||
|
CIni* piniService,
|
||
|
BOOL fTunnelEntry
|
||
|
);
|
||
|
|
||
|
LPRASENTRY CreateRASEntryStruct(
|
||
|
ArgsStruct *pArgs,
|
||
|
LPCTSTR pszDUN,
|
||
|
CIni* piniService,
|
||
|
BOOL fTunnelEntry,
|
||
|
LPTSTR pszRasPbk,
|
||
|
LPBYTE *ppbEapData,
|
||
|
LPDWORD pdwEapSize
|
||
|
);
|
||
|
|
||
|
LRESULT ReadDUNSettings(
|
||
|
ArgsStruct *pArgs,
|
||
|
LPCTSTR pszFile,
|
||
|
LPCTSTR pszDunName,
|
||
|
LPVOID pvBuffer,
|
||
|
LPBYTE *ppbEapData,
|
||
|
LPDWORD pdwEapSiz,
|
||
|
BOOL fTunnel
|
||
|
);
|
||
|
|
||
|
BOOL ValidateDialupDunSettings(LPCTSTR pszCmsFile,
|
||
|
LPCTSTR pszDunName,
|
||
|
LPCTSTR pszTopLevelCms);
|
||
|
|
||
|
LPTSTR CreateRasPrivatePbk(
|
||
|
ArgsStruct *pArgs);
|
||
|
|
||
|
DWORD AllocateSecurityDescriptorAllowAccessToWorld(PSECURITY_DESCRIPTOR *ppSd);
|
||
|
|
||
|
LPTSTR GetPathToPbk(
|
||
|
LPCTSTR pszCmp, ArgsStruct *pArgs);
|
||
|
|
||
|
void DisableWin95RasWizard(
|
||
|
void
|
||
|
);
|
||
|
|
||
|
BOOL SetIsdnDualChannelEntries(
|
||
|
ArgsStruct *pArgs,
|
||
|
LPRASENTRY pre,
|
||
|
LPRASSUBENTRY *pprse,
|
||
|
PDWORD pdwSubEntryCount
|
||
|
);
|
||
|
|
||
|
BOOL SetNtIdleDisconnectInRasEntry(
|
||
|
ArgsStruct *pArgs,
|
||
|
LPRASENTRY pre
|
||
|
);
|
||
|
|
||
|
BOOL DisableSystemIdleDisconnect(LPRASENTRY pre);
|
||
|
|
||
|
DWORD WINAPI RasDialFunc2(
|
||
|
ULONG_PTR dwCallbackId, // user-defined value specified in RasDial
|
||
|
// call
|
||
|
DWORD dwSubEntry, // subentry index in multilink connection
|
||
|
HRASCONN hrasconn, // handle to RAS connection
|
||
|
UINT unMsg, // type of event that has occurred
|
||
|
RASCONNSTATE rascs, // connection state about to be entered
|
||
|
DWORD dwError, // error that may have occurred
|
||
|
DWORD dwExtendedError // extended error information for some
|
||
|
// errors
|
||
|
);
|
||
|
|
||
|
LPRASENTRY AllocateRasEntry();
|
||
|
|
||
|
LPRASDIALEXTENSIONS AllocateAndInitRasDialExtensions();
|
||
|
DWORD InitRasDialExtensions(LPRASDIALEXTENSIONS lpRasDialExtensions);
|
||
|
DWORD SetRasDialExtensions(ArgsStruct* pArgs, BOOL fEnablePausedStates, BOOL fEnableCustomScripting);
|
||
|
|
||
|
LPVOID GetRasCallBack(ArgsStruct* pArgs);
|
||
|
DWORD GetRasCallBackType();
|
||
|
|
||
|
#if 0
|
||
|
/*
|
||
|
void InitDefaultRasPhoneBook();
|
||
|
LPTSTR GetRasSystemPhoneBookPath();
|
||
|
*/
|
||
|
#endif
|
||
|
|
||
|
LPRASDIALPARAMS AllocateAndInitRasDialParams();
|
||
|
DWORD InitRasDialParams(LPRASDIALPARAMS lpRasDialParams);
|
||
|
|
||
|
|
||
|
LPTSTR GetRasPbkFromNT5ProfilePath(LPCTSTR pszProfile);
|
||
|
|
||
|
DWORD OnPauseRasDial(HWND hwndDlg, ArgsStruct *pArgs, WPARAM wParam, LPARAM lParam);
|
||
|
|
||
|
// tapi.cpp
|
||
|
|
||
|
BOOL OpenTapi(HINSTANCE hInst, TapiLinkageStruct *ptlsTapiLink);
|
||
|
void CloseTapi(TapiLinkageStruct *ptlsTapiLink);
|
||
|
BOOL LinkToTapi(TapiLinkageStruct *ptlsTapiLink, LPCSTR pszTapi);
|
||
|
void UnlinkFromTapi(TapiLinkageStruct *ptlsTapiLink);
|
||
|
BOOL SetTapiDevice(HINSTANCE hInst,
|
||
|
TapiLinkageStruct *ptlsTapiLink,
|
||
|
LPCTSTR pszModem);
|
||
|
|
||
|
LRESULT MungePhone(LPCTSTR pszModem,
|
||
|
LPTSTR *ppszPhone,
|
||
|
TapiLinkageStruct *ptlsTapiLink,
|
||
|
HINSTANCE hInst,
|
||
|
BOOL fDialingRulesEnabled,
|
||
|
LPTSTR *ppszDial,
|
||
|
BOOL fAccessPointsEnabled);
|
||
|
|
||
|
DWORD GetCurrentTapiLocation(TapiLinkageStruct *ptlsTapiLink);
|
||
|
|
||
|
DWORD SetCurrentTapiLocation(TapiLinkageStruct *ptlsTapiLink, DWORD dwLocation);
|
||
|
|
||
|
void RestoreOldTapiLocation(TapiLinkageStruct *ptlsTapiLink);
|
||
|
|
||
|
HANDLE HookLights(ArgsStruct *pArgs);
|
||
|
|
||
|
inline BOOL IsTunnelEnabled(const ArgsStruct* pArgs)
|
||
|
{
|
||
|
return (pArgs->fTunnelPrimary || pArgs->fTunnelReferences);
|
||
|
}
|
||
|
|
||
|
inline BOOL IsDialingTunnel(const ArgsStruct* pArgs)
|
||
|
{
|
||
|
return pArgs->psState == PS_TunnelDialing
|
||
|
|| pArgs->psState == PS_TunnelAuthenticating;
|
||
|
}
|
||
|
|
||
|
inline BOOL _ArgsStruct::IsDirectConnect() const
|
||
|
{
|
||
|
return m_fDirectConnect;
|
||
|
}
|
||
|
|
||
|
inline void _ArgsStruct::SetDirectConnect(BOOL fDirect)
|
||
|
{
|
||
|
m_fDirectConnect = fDirect;
|
||
|
}
|
||
|
|
||
|
inline BOOL _ArgsStruct::IsBothConnTypeSupported() const
|
||
|
{
|
||
|
return m_fBothConnTypeSupported;
|
||
|
}
|
||
|
|
||
|
inline void _ArgsStruct::SetBothConnTypeSupported(BOOL fBoth)
|
||
|
{
|
||
|
m_fBothConnTypeSupported = fBoth;
|
||
|
}
|
||
|
|
||
|
// wsock.cpp
|
||
|
|
||
|
BOOL TryAnotherTunnelDnsAddress(
|
||
|
ArgsStruct *pArgs
|
||
|
);
|
||
|
|
||
|
// main.cpp
|
||
|
|
||
|
BOOL WhoIsCaller(
|
||
|
DWORD dwCaller = DT_USER
|
||
|
);
|
||
|
|
||
|
|
||
|
// lanawait.cpp
|
||
|
|
||
|
BOOL LanaWait(
|
||
|
ArgsStruct *pArgs,
|
||
|
HWND hwndMainDlg
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Credential helper functions
|
||
|
//
|
||
|
|
||
|
#define CM_DELETE_SAVED_CREDS_KEEP_GLOBALS FALSE
|
||
|
#define CM_DELETE_SAVED_CREDS_DELETE_GLOBALS TRUE
|
||
|
#define CM_DELETE_SAVED_CREDS_KEEP_IDENTITY FALSE
|
||
|
#define CM_DELETE_SAVED_CREDS_DELETE_IDENTITY TRUE
|
||
|
|
||
|
BOOL InitializeCredentialSupport(ArgsStruct *pArgs);
|
||
|
BOOL RefreshCredentialTypes(ArgsStruct *pArgs, BOOL fSetCredsDefault);
|
||
|
VOID RefreshCredentialInfo(ArgsStruct *pArgs, DWORD dwCredsType);
|
||
|
DWORD FindEntryCredentialsForCM(ArgsStruct *pArgs, LPTSTR pszPhoneBook, BOOL *pfUser, BOOL *pfGlobal);
|
||
|
DWORD GetCurrentCredentialType(ArgsStruct *pArgs);
|
||
|
BOOL DeleteSavedCredentials(ArgsStruct *pArgs, DWORD dwCredsType, BOOL fDeleteGlobal, BOOL fDeleteIdentity);
|
||
|
VOID SetCredentialUIOptionBasedOnDefaultCreds(ArgsStruct *pArgs, HWND hwndDlg);
|
||
|
VOID GetAndStoreUserInfo(ArgsStruct *pArgs, HWND hwndDlg, BOOL fSaveUPD, BOOL fSaveOtherUserInfo);
|
||
|
VOID TryToDeleteAndSaveCredentials(ArgsStruct *pArgs, HWND hwndDlg);
|
||
|
VOID GetUserInfoFromDialog(ArgsStruct *pArgs, HWND hwndDlg, RASCREDENTIALS *prc);
|
||
|
VOID SwitchToLocalCreds(ArgsStruct *pArgs, HWND hwndDlg, BOOL fSwitchToLocal);
|
||
|
VOID SwitchToGlobalCreds(ArgsStruct *pArgs, HWND hwndDlg, BOOL fSwitchToGlobal);
|
||
|
VOID ReloadCredentials(ArgsStruct *pArgs, HWND hwndDlg, DWORD dwWhichCredType);
|
||
|
|
||
|
//
|
||
|
// Global User Info help functions
|
||
|
//
|
||
|
VOID SetIniObjectReadWriteFlags(ArgsStruct *pArgs);
|
||
|
|
||
|
VOID VerifyAdvancedTabSettings(ArgsStruct *pArgs);
|
||
|
HRESULT InternalGetSharingEnabled(IHNetConnection *pHNetConnection, BOOLEAN *pbEnabled, SHARINGCONNECTIONTYPE* pType);
|
||
|
HRESULT InternalGetFirewallEnabled(IHNetConnection *pHNetConnection, BOOLEAN *pbEnabled);
|
||
|
STDMETHODIMP DisableSharing(IHNetConnection *pHNetConn);
|
||
|
VOID EnableInternetFirewall(IHNetConnection *pHNetConn);
|
||
|
HRESULT FindINetConnectionByGuid(GUID *pGuid, INetConnection **ppNetCon);
|
||
|
VOID SetProxyBlanket(IUnknown *pUnk);
|
||
|
BOOL IsAdmin(VOID);
|
||
|
BOOL IsMemberOfGroup(DWORD dwGroupRID, BOOL bUseBuiltinDomainRid);
|
||
|
|
||
|
HRESULT APIENTRY HrCreateNetConnectionUtilities(INetConnectionUiUtilities ** ppncuu);
|
||
|
|
||
|
#endif // _ICM_INC
|
||
|
|