Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// This is a part of the Active Template Library.
// Copyright (C) 1996-1997 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Active Template Library Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Active Template Library product.
#ifndef __STATREG_H
#define __STATREG_H
#define E_ATL_REGISTRAR_DESC 0x0201
#define E_ATL_NOT_IN_MAP 0x0202
#define E_ATL_UNEXPECTED_EOS 0x0203
#define E_ATL_VALUE_SET_FAILED 0x0204
#define E_ATL_RECURSE_DELETE_FAILED 0x0205
#define E_ATL_EXPECTING_EQUAL 0x0206
#define E_ATL_CREATE_KEY_FAILED 0x0207
#define E_ATL_DELETE_KEY_FAILED 0x0208
#define E_ATL_OPEN_KEY_FAILED 0x0209
#define E_ATL_CLOSE_KEY_FAILED 0x020A
#define E_ATL_UNABLE_TO_COERCE 0x020B
#define E_ATL_BAD_HKEY 0x020C
#define E_ATL_MISSING_OPENKEY_TOKEN 0x020D
#define E_ATL_CONVERT_FAILED 0x020E
#define E_ATL_TYPE_NOT_SUPPORTED 0x020F
#define E_ATL_COULD_NOT_CONCAT 0x0210
#define E_ATL_COMPOUND_KEY 0x0211
#define E_ATL_INVALID_MAPKEY 0x0212
#define E_ATL_UNSUPPORTED_VT 0x0213
#define E_ATL_VALUE_GET_FAILED 0x0214
#define E_ATL_VALUE_TOO_LARGE 0x0215
#define E_ATL_MISSING_VALUE_DELIMETER 0x0216
#define E_ATL_DATA_NOT_BYTE_ALIGNED 0x0217
#ifndef ATL_NO_NAMESPACE
namespace ATL { #endif
const TCHAR chSemiColon = _T(';'); const TCHAR chDirSep = _T('\\'); const TCHAR chEscape = _T('\\'); const TCHAR chComma = _T(','); const TCHAR chDelete = _T('~'); const TCHAR chEOS = _T('\0'); const TCHAR chTab = _T('\t'); const TCHAR chLF = _T('\n'); const TCHAR chCR = _T('\r'); const TCHAR chSpace = _T(' '); const TCHAR chRightBracket = _T('}'); const TCHAR chLeftBracket = _T('{'); const TCHAR chVarLead = _T('%'); const TCHAR chQuote = _T('\''); const TCHAR chEquals = _T('='); //const LPCTSTR szRightBracket = _T("}");
//const LPCTSTR szLeftBracket = _T("{");
//const LPCTSTR szEquals = _T("=");
//const LPCTSTR szDirSep = _T("\\");
const LPCTSTR szStringVal = _T("S"); const LPCTSTR szDwordVal = _T("D"); const LPCTSTR szBinaryVal = _T("B"); const LPCTSTR szValToken = _T("Val"); const LPCTSTR szForceRemove = _T("ForceRemove"); const LPCTSTR szNoRemove = _T("NoRemove"); const LPCTSTR szDelete = _T("Delete");
struct EXPANDER { LPOLESTR szKey; LPOLESTR szValue; };
class CExpansionVector { public: CExpansionVector() { m_cEls = 0; m_nSize=10; m_p=(EXPANDER**)malloc(m_nSize*sizeof(EXPANDER*)); } HRESULT Add(LPCOLESTR lpszKey, LPCOLESTR lpszValue); LPCOLESTR Find(LPTSTR lpszKey); HRESULT ClearReplacements();
private: EXPANDER** m_p; int m_cEls; int m_nSize; };
#if defined(_ATL_DLL) | defined(_ATL_DLL_IMPL)
class ATL_NO_VTABLE CRegObject : public IRegistrar #else
class CRegObject #endif
{ public:
~CRegObject(){ClearReplacements();} HRESULT FinalConstruct() {return S_OK;} void FinalRelease() {}
// Map based methods
HRESULT STDMETHODCALLTYPE AddReplacement(LPCOLESTR lpszKey, LPCOLESTR lpszItem); HRESULT STDMETHODCALLTYPE ClearReplacements(); LPCOLESTR StrFromMap(LPTSTR lpszKey);
// Register via a given mechanism
HRESULT STDMETHODCALLTYPE ResourceRegister(LPCOLESTR pszFileName, UINT nID, LPCOLESTR pszType); HRESULT STDMETHODCALLTYPE ResourceRegisterSz(LPCOLESTR pszFileName, LPCOLESTR pszID, LPCOLESTR pszType); HRESULT STDMETHODCALLTYPE ResourceUnregister(LPCOLESTR pszFileName, UINT nID, LPCOLESTR pszType); HRESULT STDMETHODCALLTYPE ResourceUnregisterSz(LPCOLESTR pszFileName, LPCOLESTR pszID, LPCOLESTR pszType); HRESULT STDMETHODCALLTYPE FileRegister(LPCOLESTR pszFileName); HRESULT STDMETHODCALLTYPE FileUnregister(LPCOLESTR pszFileName); HRESULT STDMETHODCALLTYPE StringRegister(LPCOLESTR pszData); HRESULT STDMETHODCALLTYPE StringUnregister(LPCOLESTR pszData);
protected:
HRESULT MemMapAndRegister(LPCOLESTR pszFileName, BOOL bRegister); HRESULT RegisterFromResource(LPCOLESTR pszFileName, LPCTSTR pszID, LPCTSTR pszType, BOOL bRegister); HRESULT RegisterWithString(LPCOLESTR pszData, BOOL bRegister);
static HRESULT GenerateError(UINT nID);
CExpansionVector m_RepMap; CComObjectThreadModel::AutoCriticalSection m_csMap; };
class CRegParser { public: CRegParser(CRegObject* pRegObj);
HRESULT PreProcessBuffer(LPTSTR lpszReg, LPTSTR* ppszReg); HRESULT RegisterBuffer(LPTSTR szReg, BOOL bRegister);
protected:
void SkipWhiteSpace(); HRESULT NextToken(LPTSTR szToken); HRESULT AddValue(CRegKey& rkParent,LPCTSTR szValueName, LPTSTR szToken); BOOL CanForceRemoveKey(LPCTSTR szKey); BOOL HasSubKeys(HKEY hkey); BOOL HasValues(HKEY hkey); HRESULT RegisterSubkeys(HKEY hkParent, BOOL bRegister, BOOL bInRecovery = FALSE); BOOL IsSpace(TCHAR ch); void IncrementLinePos(); void IncrementLineCount(){m_cLines++;}
LPTSTR m_pchCur; int m_cLines;
CRegObject* m_pRegObj;
HRESULT GenerateError(UINT nID); HRESULT HandleReplacements(LPTSTR& szToken); HRESULT SkipAssignment(LPTSTR szToken);
BOOL EndOfVar() { return chQuote == *m_pchCur && chQuote != *CharNext(m_pchCur); }
};
#ifndef ATL_NO_NAMESPACE
}; //namespace ATL
#endif
#endif //__STATREG_H
|