/*++ Copyright (c) 1999 Microsoft Corporation Module Name: ftasr.cpp Abstract: Declaration of class CFtasrDlg This class provides a GUI interface for the FTASR process. It also implements the 3 main FTASR operations: "register" - register FTASR as a BackupRestore command "backup" - save the current FT hierarchy state in dr_state.sif file "restore" - restore the FT hierarchy as it is in dr_state.sif file Author: Cristian Teodorescu 3-March-1999 Notes: Revision History: --*/ #if !defined(AFX_FTASRDLG_H__A507D049_3854_11D2_87D7_006008A71E8F__INCLUDED_) #define AFX_FTASRDLG_H__A507D049_3854_11D2_87D7_006008A71E8F__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include #include #define DISPLAY_HELP 0 #define BACKUP_STATE 1 #define RESTORE_STATE 2 #define REGISTER_STATE 3 #define MAX_STACK_DEPTH 100 ///////////////////////////////////////////////////////////////////////////// // CFtasrDlg dialog class CFtasrDlg : public CDialog { enum { WM_WORKER_THREAD_DONE = WM_USER + 1, WM_UPDATE_STATUS_TEXT, } ; // Construction public: CFtasrDlg(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CFtasrDlg) enum { IDD = IDD_FTASR_DIALOG }; CProgressCtrl m_Progress; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CFtasrDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CFtasrDlg) virtual BOOL OnInitDialog(); //}}AFX_MSG static long DoWork(CFtasrDlg *_this) ; UINT ParseCommandLine(); // Main operations long DoBackup(); long DoRestore() ; long DoRegister(); // Methods used in the Backup process: long AddToCommands( IN FILE* Output ); long PrintOutVolumeNames( IN FILE* Output, IN FT_LOGICAL_DISK_ID RootLogicalDiskId ); long PrintOutDiskInfo( IN FILE* Output, IN FT_LOGICAL_DISK_ID LogicalDiskId ); #ifdef CHECK_UNSUPPORTED_CONFIG // Methods used to check for FT configurations not supported by FTASR long CheckForUnsupportedConfig( IN DWORD NumDisks, IN PFT_LOGICAL_DISK_ID DiskId ); long IsSystemOrBootVolume( IN FT_LOGICAL_DISK_ID DiskId, OUT PBOOL IsSystem, OUT PBOOL IsBoot ); long GetDiskGeometry( ULONG DiskNumber, PDISK_GEOMETRY Geometry ); #endif // #ifdef CHECK_UNSUPPORTED_CONFIG // Methods used in the Restore process: long Restore( IN FILE* Input ); VOID LinkVolumeNamesToLogicalDisk( IN PWCHAR* VolumeNames, IN DWORD NumNames, IN FT_LOGICAL_DISK_ID LogicalDiskId ); FT_LOGICAL_DISK_ID BuildFtDisk( IN FILE* Input, IN OUT PFT_LOGICAL_DISK_ID ExpectedPath, IN WORD ExpectedPathSize, IN BOOL AllowBreak, OUT PBOOL Existing, /* OPTIONAL */ OUT PBOOL Overwriteable /* OPTIONAL */ ); FT_LOGICAL_DISK_ID CreateFtPartition( IN ULONG Signature, IN LONGLONG Offset, IN LONGLONG Length, OUT PBOOL Overwriteable ); BOOL QueryPartitionInformation( IN HANDLE Handle, OUT PDWORD Signature, OUT PLONGLONG Offset, OUT PLONGLONG Length ); BOOL GetPathFromLogicalDiskToRoot( IN FT_LOGICAL_DISK_ID LogicalDiskId, OUT PFT_LOGICAL_DISK_ID Path, OUT PWORD PathSize ); BOOL GetParentLogicalDiskInVolume( IN FT_LOGICAL_DISK_ID VolumeId, IN FT_LOGICAL_DISK_ID LogicalDiskId, OUT PFT_LOGICAL_DISK_ID ParentId ); BOOL FtGetParentLogicalDisk( IN FT_LOGICAL_DISK_ID LogicalDiskId, OUT PFT_LOGICAL_DISK_ID ParentId ); // Display error messages void DisplayError (const CString& ErrorMsg); void DisplaySystemError (DWORD ErrorCode); void DisplayResourceError (DWORD ErrorId); void DisplayResourceSystemError (DWORD ErrorId, DWORD ErrorCode); void DisplayResourceResourceError (DWORD ErrorId1, DWORD ErrorId2); protected: HICON m_hIcon; HANDLE m_Thread ; DWORD m_EndStatusCode; CString m_StatusText; DECLARE_MESSAGE_MAP() // manually added message-handler afx_msg LRESULT OnWorkerThreadDone( WPARAM wparam, LPARAM lparam ) ; afx_msg LRESULT OnUpdateStatusText( WPARAM wparam, LPARAM lparam ) ; }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_FTASRDLG_H__A507D049_3854_11D2_87D7_006008A71E8F__INCLUDED_)