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.
208 lines
7.7 KiB
208 lines
7.7 KiB
/*++
|
|
|
|
Copyright (c) 2001 Microsoft Corporation
|
|
|
|
Module Name :
|
|
|
|
xmlupgrade.hxx
|
|
|
|
Abstract:
|
|
|
|
Classes that are used to upgrade the xml metabase and mbschema from
|
|
one version to another
|
|
|
|
Author:
|
|
|
|
Christopher Achille (cachille)
|
|
|
|
Project:
|
|
|
|
Internet Services Setup
|
|
|
|
Revision History:
|
|
|
|
September 2001: Created
|
|
|
|
--*/
|
|
|
|
#define CFILEMODIFY_BLOCKSIZE 1024 * 4
|
|
#define CXMLBASE_METABASEPATH _T("\\inetsrv\\metabase.xml")
|
|
#define CXMLBASE_MBSCHEMAPATH _T("\\inetsrv\\mbschema.xml")
|
|
|
|
// class: CFileModify
|
|
//
|
|
// This is a generic class, for reading through a file, while modifing its contents
|
|
// based on what you find. It has an internal buffer, which keeps track of the
|
|
// information you are currently editing
|
|
//
|
|
class CFileModify {
|
|
private:
|
|
HANDLE m_hReadFile; // Handle to read from file
|
|
HANDLE m_hWriteFile; // Handle to write to file
|
|
TCHAR m_szReadFileName[_MAX_PATH]; // Name of read from file
|
|
TCHAR m_szWriteFileName[_MAX_PATH]; // Name of write to file
|
|
BUFFER m_buffData; // Buffer for file io
|
|
DWORD m_dwSizeofData; // Size of Data in Bytes
|
|
LPBYTE m_szCurrentData; // Current location of data in block
|
|
BOOL m_bUnicode;
|
|
|
|
BOOL ResizeData(DWORD dwNewSize); // Resize the buffer size
|
|
BOOL ResizeData(DWORD dwNewSize, LPBYTE *szString); // Resize the buffer size and move the string
|
|
|
|
public:
|
|
CFileModify();
|
|
~CFileModify();
|
|
BOOL OpenFile(LPTSTR szFileName, BOOL bModify = FALSE);
|
|
BOOL CloseFile();
|
|
BOOL AbortFile();
|
|
BOOL MoveCurrentPtr(LPBYTE szCurrent);
|
|
LPBYTE GetCurrentLocation();
|
|
LPBYTE GetBaseLocation();
|
|
BOOL ReadNextChunk();
|
|
BOOL MoveData(LPBYTE szCurrent, INT iBytes);
|
|
BOOL IsUnicode();
|
|
DWORD GetBufferSize();
|
|
|
|
// Function for getting values, and updating pointer location
|
|
DWORD GetNextChar(LPBYTE &szCurrent);
|
|
DWORD GetNextWideChar(LPBYTE &szCurrent);
|
|
DWORD GetPrevChar(LPBYTE &szCurrent);
|
|
DWORD GetChar(LPBYTE szCurrent);
|
|
WCHAR GetWideChar(LPBYTE szCurrent);
|
|
void SetValue(LPBYTE szCurrent, DWORD dwValue, DWORD dwOffset = 0);
|
|
void SetValue(PVOID szCurrent, DWORD dwValue, DWORD dwOffset = 0);
|
|
void CopyString(LPBYTE szCurrent, LPTSTR szInsertString);
|
|
LPBYTE MoveXChars(LPBYTE szCurrent, DWORD dwChars);
|
|
LPBYTE MoveXChars(PVOID szCurrent, DWORD dwChars);
|
|
};
|
|
|
|
// class: CXMLEdit
|
|
//
|
|
// This is a class to help you modify an XML File. It allows you to move through
|
|
// all of the items, with all of the properties in order to either remove or edit
|
|
// and item. It also lets you add/remove a property or change the value
|
|
//
|
|
class CXMLEdit {
|
|
private:
|
|
CFileModify XMLFile;
|
|
DWORD m_dwItemOffset;
|
|
DWORD m_dwPropertyOffset;
|
|
DWORD m_dwValueOffset;
|
|
|
|
LPBYTE FindNextItem(BOOL bReturnName = TRUE); // Find the Next Item
|
|
LPBYTE FindNextItem(LPBYTE szStartLocation, BOOL bReturnName = TRUE); // Find the Next Item
|
|
LPBYTE FindNextProperty(LPBYTE &szValue); // Find the Next Property
|
|
LPBYTE SkipString(LPBYTE szString, BOOL bSkipTrailingWhiteSpaces = TRUE);
|
|
BOOL ReadNextChunk(); // Read the next chunk, and update pointers
|
|
static BOOL IsWhiteSpace(DWORD ch); // Returns if the character is a white space equival
|
|
static BOOL IsTerminator(DWORD ch); // Returns if the character is a xml string terminator
|
|
BOOL IsEqual(LPCWSTR szWideString, LPCSTR szAnsiString); // Compare an unicode and ansi string
|
|
BOOL IsEqual(LPBYTE szGenericString, LPCTSTR szTCHARString); // Compare a generic LPBYTE and LPTSTR
|
|
BOOL IsEqual(LPCTSTR szString1, LPCTSTR szString2); // Compare two unicode strings or two ansi strings
|
|
void LoadFullItem();
|
|
BOOL MoveData(LPBYTE szCurrent, INT iBytes);
|
|
BOOL ReplaceString(LPBYTE szLocation, LPTSTR szNewValue); // Replace any stirng at any location
|
|
LPBYTE FindBeginingofItem(LPBYTE szInput); // Find the beginging of the last item
|
|
|
|
public:
|
|
CXMLEdit(); // Constructor
|
|
~CXMLEdit(); // Destructor
|
|
|
|
// File open/closing
|
|
BOOL Open(LPTSTR szName, BOOL bModify = FALSE); // Open the file for processing
|
|
BOOL Close(); // Close the file for processing
|
|
|
|
// Pointer movement
|
|
BOOL MovetoNextItem(); // Move to the Next Item
|
|
BOOL MovetoFirstProperty(); // Move to the First Property
|
|
BOOL MovetoNextProperty(); // Move to the Next Property
|
|
|
|
// file Modifications
|
|
BOOL DeleteProperty(); // Delete the current Property
|
|
BOOL DeleteItem(); // Delete the current Item
|
|
BOOL DeleteValue(); // Delete the current Value
|
|
BOOL ReplaceProperty(LPTSTR szNewProperty); // Replace the current property with this name
|
|
BOOL ReplaceItem(LPTSTR szNewItem); // Replace the current item with this name
|
|
BOOL ReplaceValue(LPTSTR szNewValue); // Replace the current value with this one
|
|
|
|
// QueryValues
|
|
LPBYTE GetCurrentItem(); // Get the Current Item
|
|
LPBYTE GetCurrentProperty(); // Get the Current Property
|
|
LPBYTE GetCurrentValue(); // Get the Current Property
|
|
BOOL RetrieveCurrentValue( TSTR *pstrValue );
|
|
void SetCurrentItem(LPBYTE szInput); // Set the location for the current Item
|
|
void SetCurrentProperty(LPBYTE szInput);// Set the location for the current property
|
|
void SetCurrentValue(LPBYTE szInput); // Set the location for the current value
|
|
|
|
// Conditional (for ANSI 'compatable' strings)
|
|
BOOL IsEqualItem(LPCTSTR szItemName); // Is the name of the item, and this item the same?
|
|
BOOL IsEqualProperty(LPCTSTR szPropertyName); // Is the name of the property, and this property the same?
|
|
BOOL IsEqualValue(LPCTSTR szValue); // Is the value equal to what we are sending in?
|
|
|
|
// Others
|
|
DWORD ExtractVersion(LPBYTE szVersion);
|
|
};
|
|
|
|
// class: CXML_Base
|
|
//
|
|
// This is the base class for the XML functions
|
|
//
|
|
class CXML_Base : public CBaseFunction {
|
|
protected:
|
|
BOOL GetMetabasePath(TSTR *pstrPath);
|
|
BOOL GetSchemaPath(TSTR *pstrPath);
|
|
BOOL IsFileWithinVersion(LPTSTR szFileName, LPTSTR szItemName, LPTSTR szPropName, DWORD dwMinVer, DWORD dwMaxVer);
|
|
BOOL ParseFile(LPTSTR szFile, CItemList &ciList);
|
|
};
|
|
|
|
// class: CXML_VerifyValue
|
|
//
|
|
// This function will verify the version of either the
|
|
// XML Metabase, or the XML Schema
|
|
//
|
|
class CXML_Metabase_VerifyVersion : public CXML_Base {
|
|
private:
|
|
virtual BOOL VerifyParameters(CItemList &ciParams);
|
|
virtual BOOL DoInternalWork(CItemList &ciList);
|
|
|
|
public:
|
|
virtual LPTSTR GetMethodName();
|
|
};
|
|
|
|
// class: CXML_Metabase_Upgrade
|
|
//
|
|
// This function will upgrade the metabase
|
|
//
|
|
class CXML_Metabase_Upgrade : public CXML_Base {
|
|
private:
|
|
virtual BOOL DoInternalWork(CItemList &ciList);
|
|
|
|
public:
|
|
virtual LPTSTR GetMethodName();
|
|
};
|
|
|
|
// class: CXML_VerifyValue
|
|
//
|
|
// This function will verify the version of either the
|
|
// XML Metabase, or the XML Schema
|
|
//
|
|
class CXML_MBSchema_VerifyVersion : public CXML_Base {
|
|
private:
|
|
virtual BOOL VerifyParameters(CItemList &ciParams);
|
|
virtual BOOL DoInternalWork(CItemList &ciList);
|
|
|
|
public:
|
|
virtual LPTSTR GetMethodName();
|
|
};
|
|
|
|
// class: CXML_MBSchema_Upgrade
|
|
//
|
|
// This function will upgrade the metabase
|
|
//
|
|
class CXML_MBSchema_Upgrade : public CXML_Base {
|
|
private:
|
|
virtual BOOL DoInternalWork(CItemList &ciList);
|
|
|
|
public:
|
|
virtual LPTSTR GetMethodName();
|
|
};
|