145 lines
4.9 KiB
C
145 lines
4.9 KiB
C
|
/******************************************************************************
|
||
|
|
||
|
Copyright (c) 1999 Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
rstrmap.h
|
||
|
|
||
|
Abstract:
|
||
|
This file contains the declaration of the CRestoreMapManager class, which
|
||
|
manages restore map and performs necessary operations
|
||
|
|
||
|
Revision History:
|
||
|
Seong Kook Khang (SKKhang) 07/06/99
|
||
|
created
|
||
|
|
||
|
Anand Arvind (aarvind) 1999-10-10
|
||
|
Added status for tracking of restore process
|
||
|
Split restore process into three seperate operations
|
||
|
If A: or B: then no restoring takes place
|
||
|
|
||
|
******************************************************************************/
|
||
|
|
||
|
#ifndef _RSTRMAP_H__INCLUDED_
|
||
|
#define _RSTRMAP_H__INCLUDED_
|
||
|
|
||
|
#pragma once
|
||
|
|
||
|
enum
|
||
|
{
|
||
|
RSTRMAP_STATUS_NONE = 0,
|
||
|
RSTRMAP_STATUS_STARTED,
|
||
|
RSTRMAP_STATUS_INITIALIZING,
|
||
|
RSTRMAP_STATUS_CREATING_MAP,
|
||
|
RSTRMAP_STATUS_RESTORING,
|
||
|
RSTRMAP_STATUS_FINISHED
|
||
|
|
||
|
};
|
||
|
|
||
|
struct SMapEntry
|
||
|
{
|
||
|
DWORD dwID; // Internal ID Number
|
||
|
DWORD dwOperation; // Type of Operation
|
||
|
DWORD dwFlags;
|
||
|
DWORD dwAttribute; // Attribute
|
||
|
CSRStr strDrive; // Hard drive GUID
|
||
|
CSRStr strCab; // CAB file name
|
||
|
CSRStr strTemp; // Temp file name
|
||
|
CSRStr strTempPath; // Full path of Temp file
|
||
|
CSRStr strSrc; // Source path
|
||
|
CSRStr strSrcSFN; // Source path, SFN
|
||
|
CSRStr strDst; // Destination path
|
||
|
CSRStr strDstSFN; // Destination path, SFN
|
||
|
DWORD dwRes; // Result of Operation
|
||
|
DWORD dwErr; // Error code, if applicable
|
||
|
SMapEntry *pNext; // Link
|
||
|
};
|
||
|
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// CRestoreMapManager
|
||
|
|
||
|
class CRestoreMapManager
|
||
|
{
|
||
|
public:
|
||
|
CRestoreMapManager();
|
||
|
~CRestoreMapManager();
|
||
|
|
||
|
// Operations
|
||
|
public:
|
||
|
BOOL Initialize( INT64 llSeqNum, BOOL fUI );
|
||
|
BOOL InitRestoreMap( INT64 llSeqNum, INT nMinProgressVal, INT nMaxProgressVal, BOOL fUI );
|
||
|
BOOL FInit_Initialize( INT64 llSeqNum, LPCWSTR cszCAB, BOOL fUI );
|
||
|
BOOL FInit_RestoreMap( INT64 llSeqNum, LPCWSTR cszCAB, INT nMinProgressVal, INT nMaxProgressVal, BOOL fUI );
|
||
|
BOOL DoOperation( BOOL fUI, INT nMinProgressVal, INT nMaxProgressVal);
|
||
|
INT CurrentProgress(void);
|
||
|
BOOL AreRestoreDrivesActive( BOOL *fAllDrivesActive, WCHAR *szInactiveDrives);
|
||
|
|
||
|
protected:
|
||
|
void CleanUp();
|
||
|
DWORD ExtractFile( LPCWSTR cszCAB, LPCWSTR cszTmp, LPCWSTR cszDrive, LPCWSTR &rcszTmp );
|
||
|
void ExtractFile( SMapEntry *pEnt );
|
||
|
BOOL CreatePlaceHolderFile( LPCWSTR cszFile );
|
||
|
BOOL ProcessRegSnapLog( LPCWSTR cszRegCAB );
|
||
|
BOOL UpdateSystemRegistry( LPCWSTR cszTmpPath, BOOL fUI );
|
||
|
BOOL UpdateUserRegistry( LPCWSTR cszTmpPath );
|
||
|
BOOL ScanDependency( SMapEntry *pEnt );
|
||
|
BOOL UpdateWinInitForDirRename( SMapEntry *pEntRen );
|
||
|
BOOL CanFIFO( int chDrive );
|
||
|
|
||
|
BOOL IsDriveValid( LPCWSTR cszDrive );
|
||
|
|
||
|
void OprFileAdd( SMapEntry *pEnt );
|
||
|
void OprFileDelete( SMapEntry *pEnt );
|
||
|
void OprFileModify( SMapEntry *pEnt );
|
||
|
void OprRename( SMapEntry *pEnt );
|
||
|
void OprSetAttribute( SMapEntry *pEnt );
|
||
|
void OprDirectoryCreate( SMapEntry *pEnt );
|
||
|
void OprDirectoryDelete( SMapEntry *pEnt );
|
||
|
void AbortRestore( BOOL fUndo, BOOL fIsDiskFull, BOOL fUI );
|
||
|
void ChangeSrcToCPFileName( SMapEntry *pEnt );
|
||
|
void SetRegKeyRestoreFail( BOOL fUI );
|
||
|
void SetRegKeyRestoreFailLowDisk( BOOL fUI );
|
||
|
|
||
|
void GetSFN( SMapEntry *pEnt, DWORD dwFlags = 0 );
|
||
|
|
||
|
BOOL InitLogFile( DWORD dwEntry );
|
||
|
BOOL WriteLogEntry( SMapEntry *pEnt );
|
||
|
void CloseLogFile();
|
||
|
|
||
|
BOOL InitWinInitFile();
|
||
|
BOOL WriteWinInitEntry( LPCWSTR cszKey, LPCWSTR cszVal );
|
||
|
BOOL CloseWinInitFile( BOOL fDiscard );
|
||
|
|
||
|
BOOL CreateS2LMapFile();
|
||
|
BOOL WriteS2LMapEntry( DWORD dwType, LPCWSTR cszSFN, LPCWSTR cszLFN, DWORD dwAttr = 0 );
|
||
|
BOOL CloseS2LMapFile();
|
||
|
|
||
|
// Attributes
|
||
|
protected:
|
||
|
SMapEntry m_sMapEnt; // Regular Map Entries
|
||
|
SMapEntry m_sMapReg; // Map Entries for the Registry
|
||
|
INT m_nMaxMapEnt ; // Number of map entries
|
||
|
INT m_nMaxMapReg ; // Number of registry map entries
|
||
|
INT m_nRestoreStatus ; // Status of operation
|
||
|
INT m_nRestoreProgress ; // Progress value
|
||
|
INT m_fInitChgLogCalled ; // Called API so shutdown to be done
|
||
|
INT m_fRMapEntriesExist ; // Set if there are no entires in Restore Map
|
||
|
|
||
|
WCHAR m_szDSArchive[MAX_PATH+1];
|
||
|
WCHAR m_szWinInitPath[MAX_PATH+1];
|
||
|
WCHAR m_szWinInitErr[MAX_PATH+1];
|
||
|
HANDLE m_hfLog;
|
||
|
HANDLE m_hfSeqNumLog;
|
||
|
INT m_pfDrive[26];
|
||
|
BOOL m_fFIFODisabled;
|
||
|
|
||
|
WCHAR m_szWITmp[MAX_PATH];
|
||
|
HANDLE m_hfWinInitTmp;
|
||
|
WCHAR m_szS2LMap[MAX_PATH+1];
|
||
|
HANDLE m_hfS2LMap;
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif //_RSTRMAP_H__INCLUDED_
|