windows-nt/Source/XPSP1/NT/admin/pchealth/sr/inc/xmlparser.h
2020-09-26 16:20:57 +08:00

183 lines
3.9 KiB
C++

//++
//
// Copyright (c) 1999 Microsoft Corporation
//
// Module Name:
// CXMLParser.h
//
// Abstract: ( references CXMLParser.cpp )
// This file contains the functions used by Filelist in order to real the
// XML encoded list of files/directories. It also performs translations
// between symbols like %windir% to C:\windows
//
// Revision History:
// Eugene Mesgar (eugenem) 6/16/99
// created
// Kanwaljit Marok (kmarok) 6/06/00
// ported
//
//--
#ifndef _XMLFILELISTPARSER_H
#define _XMLFILELISTPARSER_H
#ifndef MAX_BUFFER
#define MAX_BUFFER 1500
#endif
#define MAX_REPLACE_ENTRIES 50
#define NUM_FILE_TYPES 3
#define INCLUDE_COLL 0
#define EXCLUDE_COLL 1
#define SNAPSHOT_COLL 2
#include <xmlparser.h>
//
// Public File type
//
#define INCLUDE_TYPE _TEXT('i')
#define EXCLUDE_TYPE _TEXT('e')
#define SNAPSHOT_TYPE _TEXT('s')
class CXMLFileListParser
{
//
// # of times we've initialized the com space
//
LONG m_clComInitialized;
//
// references the currently open document
//
IXMLDocument *m_pDoc;
//
// references the named sub collection
//
IXMLElementCollection *m_pDir[NUM_FILE_TYPES];
IXMLElementCollection *m_pFiles[NUM_FILE_TYPES];
IXMLElementCollection *m_pExt[NUM_FILE_TYPES];
//
// version
//
DWORD m_adwVersion[4];
//
// default node type
//
TCHAR m_chDefaultType;
public:
BOOL Init(LPCTSTR pszFile);
BOOL Init();
//
// return symbol translated versions
// pchType values == 'S', 'I', 'E' (snapshot,include,exclude)
//
LONG GetDirectory(LONG ilElement,
LPTSTR pszBuf,
LONG lBufMax,
TCHAR chType);
LONG GetDirectory(LONG ilElement,
LPTSTR pszBuf,
LONG lBufMax,
TCHAR chType,
BOOL *pfDisable);
LONG GetExt (LONG ilElement, LPTSTR pszBuf, LONG lBufMax, TCHAR chType);
LONG GetFile(LONG ilElement, LPTSTR pszBuf, LONG lBufMax, TCHAR chType);
//
// file list version info ( pointer to 4 dword array );
//
BOOL GetVersion(LPDWORD pdwVersion);
//
// get the default type
//
TCHAR GetDefaultType();
//
// return the number of elements in the sets
//
LONG GetDirectoryCount(TCHAR chType);
LONG GetExtCount(TCHAR chType);
LONG GetFileCount(TCHAR chType);
//
// Debug function to print current file translations supported.
//
void DebugPrintTranslations();
CXMLFileListParser();
virtual ~CXMLFileListParser();
private:
//
// load & unloading the symbolic location->true location mappings
// there is just dummy code in here which hard codes some generic mapping.
//
BOOL PopulateReplaceEntries();
BOOL DepopulateReplaceEntries();
//
// inplace search and function which search&replaces on the
// symbol->location mappings
//
LONG SearchAndReplace(LPTSTR szBuf, LONG lMaxBuf);
//
// the true guts of the GetExt/File/Directory functions
//
LONG GetFileInfo(IXMLElementCollection *pCol,
LONG ilElement,
LPTSTR pszBuf,
LONG lBufMax,
BOOL *pfDisable);
BOOL LoadOneCollection(IXMLElement *pColHead,
IXMLElementCollection **pCol );
LONG GetCollectionSize(IXMLElementCollection *pCol);
//
// init broken down
//
BOOL ParseFile(LPCTSTR pszFile);
BOOL LoadCollections();
BOOL ParseVersion(IXMLElement *pVerElement);
//
// helper functions
//
LONG ConvertAndFreeBSTR(BSTR bstrIn, LPTSTR szpOut, LONG lMaxBuf);
LONG TranslateType(TCHAR chType);
};
#endif