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.
 
 
 
 
 
 

233 lines
7.1 KiB

//=======================================================================
//
// Copyright (c) 1998-2000 Microsoft Corporation. All Rights Reserved.
//
// File: History.h
// Author: Charles Ma, 10/13/2000
//
// Revision History:
//
//
//
// Description:
//
// Class to handle history log
//
//=======================================================================
#include "iuxml.h"
// ----------------------------------------------------------------------
//
// define the enum for download/install status
//
// ----------------------------------------------------------------------
enum _HISTORY_STATUS {
HISTORY_STATUS_COMPLETE = 0,
HISTORY_STATUS_IN_PROGRESS = 1, // currently should be ignored of this!
HISTORY_STATUS_FAILED = -1
};
// ----------------------------------------------------------------------
//
// define the class for history
//
// ----------------------------------------------------------------------
class CIUHistory
{
public:
CIUHistory();
~CIUHistory();
// ------------------------------------------------------------------
//
// public function SetDownloadBasePath()
// this function should be called before AddHistoryItemDownloadStatus()
// for corporate case to set the download path that the user has input,
// so that we know where to save the history log.
//
// ------------------------------------------------------------------
HRESULT SetDownloadBasePath(LPCTSTR pszDownloadedBasePath);
// ------------------------------------------------------------------
//
// public function AddHistoryItemDownloadStatus()
// this function should be called when you want to record the
// download status of this item. A new history item will be
// added to the history file
//
// ------------------------------------------------------------------
HRESULT AddHistoryItemDownloadStatus(
CXmlCatalog* pCatalog,
HANDLE_NODE hCatalogItem, // a handle points to node in catalog
_HISTORY_STATUS enDownloadStatus,
LPCTSTR lpcszDownloadedTo,
LPCTSTR lpcszClient,
DWORD dwErrorCode = 0
);
// ------------------------------------------------------------------
//
// public function AddHistoryItemInstallStatus()
// this function should be called when you want to record the
// install status of this item. This function will go to the
// existing history tree and find the first item that matches
// the identity of hCatalogItem, and assume that one as
// the one you want to modify the install status
//
//
// return:
// HRESULT - S_OK if succeeded
// - E_HANDLE if can't find hCatalogItem from
// the current history log tree
// - or other HRESULT error
//
// ------------------------------------------------------------------
HRESULT AddHistoryItemInstallStatus(
CXmlCatalog* pCatalog,
HANDLE_NODE hCatalogItem, // a handle points to node in catalog
_HISTORY_STATUS enInstallStatus,
LPCTSTR lpcszClient,
BOOL fNeedsReboot,
DWORD dwErrorCode = 0
);
// ------------------------------------------------------------------
//
// public function UpdateHistoryItemInstallStatus()
// this function should be called when you want to record the
// install status of this item. This function will go to the
// existing history tree and find the first item that matches
// the identity of hCatalogItem, and assume that one as
// the one you want to modify the install status
//
//
// return:
// HRESULT - S_OK if succeeded
// - E_HANDLE if can't find hCatalogItem from
// the current history log tree
// - or other HRESULT error
//
// ------------------------------------------------------------------
HRESULT UpdateHistoryItemInstallStatus(
CXmlCatalog* pCatalog,
HANDLE_NODE hCatalogItem, // a handle points to node in catalog
_HISTORY_STATUS enInstallStatus,
BOOL fNeedsReboot,
DWORD dwErrorCode /*= 0*/
);
/* // ------------------------------------------------------------------
//
// public function RetrieveItemDownloadPath()
// this function will go to the existing history tree and find
// the first item that matches the identity of hCatalogItem, and
// assume that's the one you want to retrieve the download path from
//
// return:
// HRESULT - S_OK if succeeded
// - E_HANDLE if can't find hCatalogItem from
// the current history log tree
// - or other HRESULT error
//
// ------------------------------------------------------------------
HRESULT CIUHistory::RetrieveItemDownloadPath(
CXmlCatalog* pCatalog,
HANDLE_NODE hCatalogItem, // a handle points to node in catalog
BSTR* pbstrDownloadPath
);
*/
// ------------------------------------------------------------------
//
// public function ReadHistoryFromDisk()
// this function will read the history from the given file
//
// ------------------------------------------------------------------
HRESULT ReadHistoryFromDisk(LPCTSTR lpszLogFile, BOOL fCorpAdmin = FALSE);
// ------------------------------------------------------------------
//
// public function SaveHistoryToDisk()
// this function will re-read the history in exclusive mode, and
// merge the newly added data to the tree (so we don't overwrite
// new changes made by other instances of this control) and
// write it back
//
// ------------------------------------------------------------------
HRESULT SaveHistoryToDisk(void);
// ------------------------------------------------------------------
//
// public function to set the client name
//
// a client name is used to put in history to denode who
// caused download/install happened.
//
// ------------------------------------------------------------------
void SetClientName(BSTR bstrClientName);
// ------------------------------------------------------------------
//
// public function GetHistory
//
// read the current history XML file and convert it
// into bstr to pass out
//
// ------------------------------------------------------------------
HRESULT GetHistoryStr(
LPCTSTR lpszLogFile,
BSTR BeginDateTime,
BSTR EndDateTime,
BSTR* pbstrHistory);
private:
// ------------------------------------------------------------------
//
// private inline function GetBSTRStatus
//
// ------------------------------------------------------------------
inline BSTR GetBSTRStatus(_HISTORY_STATUS enStatus)
{
BSTR bstrStatus = NULL;
switch (enStatus)
{
case HISTORY_STATUS_COMPLETE:
bstrStatus = SysAllocString(L"COMPLETE");
break;
case HISTORY_STATUS_IN_PROGRESS:
bstrStatus = SysAllocString(L"IN_PROGRESS");
break;
default:
bstrStatus = SysAllocString(L"FAILED");
};
return bstrStatus;
};
//
// named mutex used to gain exclusive access to the history file
//
BOOL m_fSavePending;
HANDLE m_hMutex;
HRESULT m_ErrorCode;
BSTR m_bstrCurrentClientName;
TCHAR m_szLogFilePath[MAX_PATH];
LPTSTR m_pszDownloadBasePath;
CXmlItems *m_pxmlExisting;
CXmlItems *m_pxmlDownload;
CXmlItems *m_pxmlInstall;
};