windows-nt/Source/XPSP1/NT/admin/wmi/wbem/winmgmt/wbemcomn/persistcfg.h
2020-09-26 16:20:57 +08:00

131 lines
4.2 KiB
C++

/*++
Copyright (C) 1998-2001 Microsoft Corporation
Module Name:
PERSISTCFG.H
Abstract:
This file implements the WinMgmt persistent configuration operations.
Classes implemented:
CPersistentConfig persistent configuration manager
History:
1/13/98 paulall Created.
--*/
#ifndef _persistcfg_h_
#define _persistcfg_h_
#include "corepol.h"
#include "sync.h"
//****** UPDATE PERSIST_CFGVAL_MAX_NUM_EVENTS *******
// WHEN ADDING A NEW VALUE
//****** UPDATE PERSIST_CFGVAL_MAX_NUM_EVENTS *******
//vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
#define PERSIST_CFGVAL_CORE_DATABASE_DIRTY 0
#define PERSIST_CFGVAL_CORE_ESS_NEEDS_LOADING 1
#define PERSIST_CFGVAL_CORE_NEEDSBACKUPCHECK 2
#define PERSIST_CFGVAL_CORE_FSREP_VERSION 3
//vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
//****** UPDATE PERSIST_CFGVAL_MAX_NUM_EVENTS *******
// WHEN ADDING A NEW VALUE
//****** UPDATE PERSIST_CFGVAL_MAX_NUM_EVENTS *******
//vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
#define PERSIST_CFGVAL_MAX_NUM_EVENTS 4
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//****** UPDATE PERSIST_CFGVAL_MAX_NUM_EVENTS *******
// WHEN ADDING A NEW VALUE
//****** UPDATE PERSIST_CFGVAL_MAX_NUM_EVENTS *******
class CDirectoryPath
{
TCHAR *pszDirectory ;
public:
CDirectoryPath();
~CDirectoryPath(){if(pszDirectory) delete pszDirectory;};
TCHAR * GetStr(void){return pszDirectory;};
};
/*=============================================================================
*
* class CPersistentConfig
*
* Retrieves and stores persistent configuration in the $WinMgmt.CFG file.
* All writes are going to be committed to disk by the return of the
* operation.
*=============================================================================
*/
#pragma warning (disable : 4251)
class POLARITY CPersistentConfig
{
public:
//Number of items in the config array. Requesting/setting values
//outside this range will fail the operation.
enum { MaxNumberConfigEntries = PERSIST_CFGVAL_MAX_NUM_EVENTS };
//Constructor. Initialises the structure.
CPersistentConfig();
//Retrieves the configuration from the configuration file if it
//has not yet been retrieved into memory, or retrieves it from a
//memory cache.
// dwOffset needs to be less than MaxNumberConfigEntries and specifies
// the configuration entry required.
// dwValue if sucessful this will contain the value. If the value
// has not been set this will return 0.
// BOOL returns TRUE if successful.
BOOL GetPersistentCfgValue(DWORD dwOffset, DWORD &dwValue);
//Stores the value into the configuration file and to the
//memory cache if it exists. The replacment of the original
//file (if it exists) is the last thing it does.
// dwOffset needs to be less than MaxNumberConfigEntries and specifies
// the configuration entry required.
// dwValue is the value to set the configuration to.
// BOOL returns TRUE if successful.
BOOL SetPersistentCfgValue(DWORD dwOffset, DWORD dwValue);
//Should be called once at startup to make sure the configuration files are
//in a stable state.
void CPersistentConfig::TidyUp();
protected:
//Reads the $WinMgmt.CFG file into the memory cache.
// BOOL returns TRUE if successful.
BOOL ReadConfig();
//Writes the $WinMgmt.CFG file into the memory cache and to the file. It
//protects the existing file until the last minute.
// BOOL returns TRUE if successful.
BOOL WriteConfig();
private:
//This is the memory cache of the configuration.
static DWORD m_ConfigValues[PERSIST_CFGVAL_MAX_NUM_EVENTS];
static bool m_bInitialized;
//Directory of persistent date
static CDirectoryPath m_Directory ;
static CCritSec m_cs;
//Returns a filename with a full DB path prepended to the
//specified filename. Need to delete[] the string returned.
TCHAR *GetFullFilename(const TCHAR *pszFilename);
//Returns TRUE if the file exists, FALSE otherwise (or if an error
//occurs while opening the file.
BOOL FileExists(const TCHAR *pszFilename);
};
#endif