182 lines
4.6 KiB
C++
182 lines
4.6 KiB
C++
//
|
|
// rdpfstore.h
|
|
//
|
|
// Definition of CRdpFileStore, implements ISettingsStore
|
|
//
|
|
// CRdpFileStore implements a persistent settings store for
|
|
// ts client settings.
|
|
//
|
|
// Copyright(C) Microsoft Corporation 2000
|
|
// Author: Nadim Abdo (nadima)
|
|
//
|
|
|
|
#ifndef _rdpfstore_h_
|
|
#define _rdpfstore_h_
|
|
|
|
#include "setstore.h"
|
|
#include "fstream.h"
|
|
|
|
//
|
|
// rdpfile record
|
|
//
|
|
typedef UINT RDPF_RECTYPE;
|
|
#define RDPF_RECTYPE_UINT 0
|
|
#define RDPF_RECTYPE_SZ 1
|
|
#define RDPF_RECTYPE_BINARY 2
|
|
#define RDPF_RECTYPE_UNPARSED 3
|
|
|
|
#define RDPF_NAME_LEN 32
|
|
|
|
#define IS_VALID_RDPF_TYPECODE(x) \
|
|
(x == RDPF_RECTYPE_UINT || \
|
|
x == RDPF_RECTYPE_SZ || \
|
|
x == RDPF_RECTYPE_BINARY || \
|
|
x == RDPF_RECTYPE_UNPARSED)
|
|
|
|
typedef struct tagRDPF_RECORD
|
|
{
|
|
tagRDPF_RECORD* pNext;
|
|
tagRDPF_RECORD* pPrev;
|
|
|
|
TCHAR szName[RDPF_NAME_LEN];
|
|
//
|
|
// works like a variant
|
|
//
|
|
RDPF_RECTYPE recType;
|
|
union {
|
|
UINT iVal; // RDPF_RECTYPE_UINT
|
|
LPTSTR szVal; // RDPF_RECTYPE_SZ
|
|
PBYTE pBinVal; // RDPF_RECTYPE_BINARY
|
|
LPTSTR szUnparsed; // RDPF_RECTYPE_UNPARSED
|
|
} u;
|
|
|
|
//length of RDPF_RECTYPE_BINARY
|
|
DWORD dwBinValLen;
|
|
|
|
DWORD flags;
|
|
} RDPF_RECORD, *PRDPF_RECORD;
|
|
|
|
class CRdpFileStore : public ISettingsStore
|
|
{
|
|
public:
|
|
CRdpFileStore();
|
|
virtual ~CRdpFileStore();
|
|
|
|
//
|
|
// IUnknown methods
|
|
//
|
|
STDMETHOD(QueryInterface)
|
|
( THIS_
|
|
IN REFIID,
|
|
OUT PVOID *
|
|
);
|
|
|
|
STDMETHOD_(ULONG,AddRef)
|
|
( THIS
|
|
);
|
|
|
|
STDMETHOD_(ULONG,Release)
|
|
( THIS
|
|
);
|
|
|
|
//
|
|
// ISettingsStore methods
|
|
//
|
|
|
|
//
|
|
// Open a store..Moniker is store specific info that points to the store
|
|
//
|
|
virtual BOOL OpenStore(LPCTSTR szStoreMoniker, BOOL bReadOnly=FALSE);
|
|
//
|
|
// Commit the current in-memory contents of the store
|
|
//
|
|
virtual BOOL CommitStore();
|
|
|
|
//
|
|
// Close the store
|
|
//
|
|
virtual BOOL CloseStore();
|
|
|
|
//
|
|
// State access functions
|
|
//
|
|
virtual BOOL IsOpenForRead();
|
|
virtual BOOL IsOpenForWrite();
|
|
virtual BOOL IsDirty();
|
|
virtual BOOL SetDirtyFlag(BOOL bIsDirty);
|
|
|
|
//
|
|
// Typed read and write functions, writes are not commited until a ComitStore()
|
|
// Values equal to the default are not persisted out
|
|
// On read error (e.g if Name key is not found, the specified default value is returned)
|
|
//
|
|
|
|
virtual BOOL ReadString(LPCTSTR szName, LPTSTR szDefault, LPTSTR szOutBuf, UINT strLen);
|
|
virtual BOOL WriteString(LPCTSTR szName, LPTSTR szDefault, LPTSTR szValue,
|
|
BOOL fIgnoreDefault=FALSE);
|
|
|
|
virtual BOOL ReadBinary(LPCTSTR szName, PBYTE pOutuf, UINT cbBufLen);
|
|
virtual BOOL WriteBinary(LPCTSTR szName,PBYTE pBuf, UINT cbBufLen);
|
|
|
|
virtual BOOL ReadInt(LPCTSTR szName, UINT defaultVal, PUINT pval);
|
|
virtual BOOL WriteInt(LPCTSTR szName, UINT defaultVal, UINT val,
|
|
BOOL fIgnoreDefault=FALSE);
|
|
|
|
virtual BOOL ReadBool(LPCTSTR szName, UINT defaultVal, PBOOL pbVal);
|
|
virtual BOOL WriteBool(LPCTSTR szName, UINT defaultVal, BOOL bVal,
|
|
BOOL fIgnoreDefault=FALSE);
|
|
|
|
virtual BOOL DeleteValueIfPresent(LPCTSTR szName);
|
|
virtual BOOL IsValuePresent(LPTSTR szName);
|
|
|
|
//
|
|
// Initiliaze to an empty store that can be read from
|
|
//
|
|
virtual BOOL SetToNullStore();
|
|
|
|
virtual DWORD GetDataLength(LPCTSTR szName);
|
|
|
|
protected:
|
|
//
|
|
// Protected member functions
|
|
//
|
|
BOOL ParseFile();
|
|
BOOL DeleteRecords();
|
|
BOOL InsertRecordFromLine(LPTSTR szLine);
|
|
BOOL ParseLine(LPTSTR szLine, PUINT pTypeCode, LPTSTR szNameField, LPTSTR szValueField);
|
|
inline BOOL SetNodeValue(PRDPF_RECORD pNode, RDPF_RECTYPE TypeCode, LPCTSTR szValue);
|
|
BOOL RecordToString(PRDPF_RECORD pNode, LPTSTR szBuf, UINT strLen);
|
|
|
|
//
|
|
// Record list fns
|
|
//
|
|
BOOL InsertRecord(LPCTSTR szName, UINT TypeCode, LPCTSTR szValue);
|
|
BOOL InsertIntRecord(LPCTSTR szName, UINT value);
|
|
BOOL InsertBinaryRecord(LPCTSTR szName, PBYTE pBuf, DWORD dwLen);
|
|
|
|
inline PRDPF_RECORD FindRecord(LPCTSTR szName);
|
|
inline PRDPF_RECORD NewRecord(LPCTSTR szName, UINT TypeCode);
|
|
inline BOOL AppendRecord(PRDPF_RECORD node);
|
|
inline BOOL DeleteRecord(PRDPF_RECORD node);
|
|
private:
|
|
//
|
|
// Private data members
|
|
//
|
|
|
|
LONG _cRef;
|
|
BOOL _fReadOnly;
|
|
BOOL _fOpenForRead;
|
|
BOOL _fOpenForWrite;
|
|
BOOL _fIsDirty;
|
|
|
|
PRDPF_RECORD _pRecordListHead;
|
|
PRDPF_RECORD _pRecordListTail;
|
|
|
|
TCHAR _szFileName[MAX_PATH];
|
|
|
|
//file stream
|
|
CTscFileStream _fs;
|
|
};
|
|
|
|
#endif //_rdpfstore_h_
|