|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1997 - 1999
//
// File: config.h
//
//--------------------------------------------------------------------------
#ifndef _INC_CSCVIEW_CONFIG_H
#define _INC_CSCVIEW_CONFIG_H
#ifndef _INC_CSCVIEW_REGISTRY_H
# include "registry.h"
#endif
#ifndef _INC_CSCVIEW_UTILS_H
# include "util.h"
#endif
class CConfig { public: ~CConfig(void) { }
enum SyncAction { eSyncNone = -1, // No sync.
eSyncPartial, // Sync only transient files at logoff.
eSyncFull, // Sync all files at logoff.
eNumSyncActions };
enum OfflineAction { //
// These MUST match the order of the IDS_GOOFFLINE_ACTION_XXXXX
// string resource IDs.
//
eGoOfflineSilent = 0, // Silently transition share to offline mode.
eGoOfflineFail, // Fail the share (NT4 behavior).
eNumOfflineActions };
//
// Represents one custom go-offline action.
//
struct OfflineActionInfo { TCHAR szServer[MAX_PATH]; // Name of the associated server.
int iAction; // Action code. One of enum OfflineAction.
};
//
// Represents one entry in the customized server list.
// "GOA" is "GoOfflineAction".
//
class CustomGOA { public: CustomGOA(void) : m_action(eGoOfflineSilent), m_bSetByPolicy(false) { m_szServer[0] = TEXT('\0'); }
CustomGOA(LPCTSTR pszServer, OfflineAction action, bool bSetByPolicy) : m_action(action), m_bSetByPolicy(bSetByPolicy) { lstrcpyn(m_szServer, pszServer, ARRAYSIZE(m_szServer)); }
bool operator == (const CustomGOA& rhs) const { return (m_action == rhs.m_action && 0 == CompareByServer(rhs)); }
bool operator != (const CustomGOA& rhs) const { return !(*this == rhs); }
bool operator < (const CustomGOA& rhs) const;
int CompareByServer(const CustomGOA& rhs) const;
void SetServerName(LPCTSTR pszServer) { lstrcpyn(m_szServer, pszServer, ARRAYSIZE(m_szServer)); }
void SetAction(OfflineAction action) { m_action = action; }
void GetServerName(LPTSTR pszServer, UINT cchServer) const { lstrcpyn(pszServer, m_szServer, cchServer); }
const LPCTSTR GetServerName(void) const { return m_szServer; }
OfflineAction GetAction(void) const { return m_action; }
bool SetByPolicy(void) const { return m_bSetByPolicy; }
private: TCHAR m_szServer[MAX_PATH]; // The name of the server.
OfflineAction m_action; // The action code.
bool m_bSetByPolicy; // Was action set by policy?
};
//
// Iterator for enumerating custom go-offline actions.
//
class OfflineActionIter { public: OfflineActionIter(const CConfig *pConfig = NULL);
~OfflineActionIter(void);
HRESULT Next(OfflineActionInfo *pInfo);
void Reset(void) { m_iAction = 0; }
private: CConfig *m_pConfig; HDPA m_hdpaGOA; int m_iAction; };
static CConfig& GetSingleton(void);
bool CscEnabled(bool *pbSetByPolicy = NULL) const { return boolify(GetValue(iVAL_CSCENABLED, pbSetByPolicy)); }
DWORD DefaultCacheSize(bool *pbSetByPolicy = NULL) const { return GetValue(iVAL_DEFCACHESIZE, pbSetByPolicy); }
int EventLoggingLevel(bool *pbSetByPolicy = NULL) const { return int(GetValue(iVAL_EVENTLOGGINGLEVEL, pbSetByPolicy)); }
bool FirstPinWizardShown(void) const { return boolify(GetValue(iVAL_FIRSTPINWIZARDSHOWN)); }
void GetCustomGoOfflineActions(HDPA hdpaGOA, bool *pbSetByPolicy = NULL);
int GoOfflineAction(bool *pbSetByPolicy = NULL) const { return int(GetValue(iVAL_GOOFFLINEACTION, pbSetByPolicy)); }
int GoOfflineAction(LPCTSTR pszServer) const;
int InitialBalloonTimeoutSeconds(bool *pbSetByPolicy = NULL) const { return int(GetValue(iVAL_INITIALBALLOONTIMEOUTSECONDS, pbSetByPolicy)); }
bool NoCacheViewer(bool *pbSetByPolicy = NULL) const { return boolify(GetValue(iVAL_NOCACHEVIEWER, pbSetByPolicy)); }
bool NoConfigCache(bool *pbSetByPolicy = NULL) const { return boolify(GetValue(iVAL_NOCONFIGCACHE, pbSetByPolicy)); }
bool NoMakeAvailableOffline(bool *pbSetByPolicy = NULL) const { return boolify(GetValue(iVAL_NOMAKEAVAILABLEOFFLINE, pbSetByPolicy)); }
bool NoReminders(bool *pbSetByPolicy = NULL) const { return boolify(GetValue(iVAL_NOREMINDERS, pbSetByPolicy)); }
bool PurgeAtLogoff(bool *pbSetByPolicy = NULL) const { return boolify(GetValue(iVAL_PURGEATLOGOFF, pbSetByPolicy)); }
bool PurgeOnlyAutoCachedFilesAtLogoff(bool *pbSetByPolicy = NULL) const { return boolify(GetValue(iVAL_PURGEONLYAUTOCACHEATLOGOFF, pbSetByPolicy)); }
bool AlwaysPinSubFolders(bool *pbSetByPolicy = NULL) const { return boolify(GetValue(iVAL_ALWAYSPINSUBFOLDERS, pbSetByPolicy)); }
bool NoAdminPinSpecialFolders(bool *pbSetByPolicy = NULL) const { return boolify(GetValue(iVAL_NOFRADMINPIN, pbSetByPolicy)); }
bool EncryptCache(bool *pbSetByPolicy = NULL) const { return boolify(GetValue(iVAL_ENCRYPTCACHE, pbSetByPolicy)); }
int ReminderBalloonTimeoutSeconds(bool *pbSetByPolicy = NULL) const { return int(GetValue(iVAL_REMINDERBALLOONTIMEOUTSECONDS, pbSetByPolicy)); }
int ReminderFreqMinutes(bool *pbSetByPolicy = NULL) const { return int(GetValue(iVAL_REMINDERFREQMINUTES, pbSetByPolicy)); }
int SyncAtLogoff(bool *pbSetByPolicy = NULL) const { return int(GetValue(iVAL_SYNCATLOGOFF, pbSetByPolicy)); }
int SyncAtLogon(bool *pbSetByPolicy = NULL) const { return int(GetValue(iVAL_SYNCATLOGON, pbSetByPolicy)); }
int SyncAtSuspend(bool *pbSetByPolicy = NULL) const { return int(GetValue(iVAL_SYNCATSUSPEND, pbSetByPolicy)); }
int SlowLinkSpeed(bool *pbSetByPolicy = NULL) const { return int(GetValue(iVAL_SLOWLINKSPEED, pbSetByPolicy)); }
OfflineActionIter CreateOfflineActionIter(void) const { return OfflineActionIter(this); }
static HRESULT SaveCustomGoOfflineActions(RegKey& key, HDPA hdpaGOA);
static void ClearCustomGoOfflineActions(HDPA hdpaGOA);
private: //
// Indexes into s_rgpszSubkeys[].
//
enum eSubkeys { iSUBKEY_PREF, iSUBKEY_POL, MAX_SUBKEYS }; //
// Indexes into s_rgpszValues[].
//
enum eValues { iVAL_DEFCACHESIZE, iVAL_CSCENABLED, iVAL_GOOFFLINEACTION, iVAL_NOCONFIGCACHE, iVAL_NOCACHEVIEWER, iVAL_NOMAKEAVAILABLEOFFLINE, iVAL_SYNCATLOGOFF, iVAL_SYNCATLOGON, iVAL_SYNCATSUSPEND, iVAL_NOREMINDERS, iVAL_REMINDERFREQMINUTES, iVAL_INITIALBALLOONTIMEOUTSECONDS, iVAL_REMINDERBALLOONTIMEOUTSECONDS, iVAL_EVENTLOGGINGLEVEL, iVAL_PURGEATLOGOFF, iVAL_PURGEONLYAUTOCACHEATLOGOFF, iVAL_FIRSTPINWIZARDSHOWN, iVAL_SLOWLINKSPEED, iVAL_ALWAYSPINSUBFOLDERS, iVAL_ENCRYPTCACHE, iVAL_NOFRADMINPIN, MAX_VALUES }; //
// Mask to specify source of a config value.
//
enum eSources { eSRC_PREF_CU = 0x00000001, eSRC_PREF_LM = 0x00000002, eSRC_POL_CU = 0x00000004, eSRC_POL_LM = 0x00000008, eSRC_POL = eSRC_POL_LM | eSRC_POL_CU, eSRC_PREF = eSRC_PREF_LM | eSRC_PREF_CU };
static LPCTSTR s_rgpszSubkeys[MAX_SUBKEYS]; static LPCTSTR s_rgpszValues[MAX_VALUES];
DWORD GetValue(eValues iValue, bool *pbSetByPolicy = NULL) const;
bool CustomGOAExists(HDPA hdpaGOA, const CustomGOA& goa);
static bool IsValidGoOfflineAction(DWORD dwAction) { return ((OfflineAction)dwAction == eGoOfflineSilent || (OfflineAction)dwAction == eGoOfflineFail); }
static bool IsValidSyncAction(DWORD dwAction) { return ((SyncAction)dwAction == eSyncPartial || (SyncAction)dwAction == eSyncFull); }
//
// Enforce use of GetSingleton() for instantiation.
//
CConfig(void) { } //
// Prevent copy.
//
CConfig(const CConfig& rhs); CConfig& operator = (const CConfig& rhs); };
#endif // _INC_CSCVIEW_CONFIG_H
|