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.
156 lines
5.2 KiB
156 lines
5.2 KiB
/******************************************************************************
|
|
|
|
Copyright (c) 1999-2000 Microsoft Corporation
|
|
|
|
Module Name:
|
|
SRShell.h
|
|
|
|
Abstract:
|
|
This file defines external constants and structures for SR UI and any
|
|
related components.
|
|
|
|
Revision History:
|
|
Seong Kook Khang (SKKhang) 01/30/2000
|
|
created
|
|
Seong Kook Khang (SKKhang) 06/22/2000
|
|
Expanded for Whistler
|
|
|
|
******************************************************************************/
|
|
|
|
#ifndef _SRSHELL_H__INCLUDED_
|
|
#define _SRSHELL_H__INCLUDED_
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Constants / Structures
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Restore Drive Info Flags
|
|
#define RDIF_SYSTEM 0x00000001 // drive contains system
|
|
#define RDIF_FROZEN 0x00000002 // drive is frozen
|
|
#define RDIF_EXCLUDED 0x00000004 // drive is excluded
|
|
#define RDIF_OFFLINE 0x00000008 // drive is not connected
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// SR Restore Log
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#define RSTRLOG_SIGNATURE1 0x72747372 // "rstr"
|
|
#define RSTRLOG_SIGNATURE2 0x1A676F6C // "log" + EOF
|
|
#define RSTRLOG_VER_MAJOR 3
|
|
#define RSTRLOG_VER_MINOR 0
|
|
#define RSTRLOG_VERSION MAKELONG(RSTRLOG_VER_MINOR, RSTRLOG_VER_MAJOR)
|
|
|
|
// File headers of rstrlog.dat file.
|
|
//
|
|
struct SRstrLogHdrBase
|
|
{
|
|
DWORD dwSig1; // Signature (part 1/2)
|
|
DWORD dwSig2; // Signature (part 2/2)
|
|
DWORD dwVer; // Version
|
|
};
|
|
|
|
#define RLHF_SILENT 0x00000001
|
|
#define RLHF_UNDO 0x00000002
|
|
|
|
struct SRstrLogHdrV3
|
|
{
|
|
DWORD dwFlags; // Flags
|
|
DWORD dwRPNum; // Chosen Restore Point ID
|
|
DWORD dwRPNew; // Restore Point ID of the new "Restore" RP
|
|
DWORD dwDrives; // Number of Drives
|
|
};
|
|
|
|
// Information about each drives follows SRstrLogHdrRPInfo:
|
|
// 1. DWORD flags
|
|
// 2. Dynamic sized string of drive letter or mount point.
|
|
// 3. Dynamic sized string of unique volume name (GUID).
|
|
|
|
struct SRstrLogHdrV3Ex
|
|
{
|
|
DWORD dwRPNew; // Restore Point ID of the new "Restore" RP
|
|
DWORD dwCount; // Number of supposed-to-be entries
|
|
// used to validate if every entry is in the log file.
|
|
};
|
|
|
|
// Constants to indicate result of Restore for each restore entries.
|
|
//
|
|
enum // Result Code for Log Entries
|
|
{
|
|
RSTRRES_UNKNOWN = 0,
|
|
RSTRRES_FAIL, // 1 - Failure. (THE ONLY CONDITION TO ABORT RESTORE!)
|
|
RSTRRES_OK, // 2 - Succeeded.
|
|
//RSTRRES_WININIT, // 3 - Locked target, sent to wininit.ini.
|
|
RSTRRES_LOCKED, // 3 - Locked target, use MoveFileEx.
|
|
RSTRRES_DISKRO, // 4 - Target disk is read-only.
|
|
RSTRRES_EXISTS, // 5 - Removed existing ghost file.
|
|
RSTRRES_IGNORE, // 6 - Ignored special files, e.g. wininit.ini.
|
|
RSTRRES_NOTFOUND, // 7 - Target file/dir not exists, ignored.
|
|
RSTRRES_COLLISION, // 8 - Folder name conflict, existing dir was renamed.
|
|
RSTRRES_OPTIMIZED, // 9 - Entry has been optimized, without any temp file.
|
|
RSTRRES_LOCKED_ALT, // 10 - Locked target, but could be renamed. Use MoveFileEx to delete renamed file.
|
|
RSTRRES_SENTINEL
|
|
};
|
|
|
|
#define RSTRLOGID_COLLISION 0xFFFFFFFF
|
|
#define RSTRLOGID_ENDOFMAP 0xFFFFFFFE
|
|
#define RSTRLOGID_STARTUNDO 0xFFFFFFFD
|
|
#define RSTRLOGID_ENDOFUNDO 0xFFFFFFFC
|
|
#define RSTRLOGID_SNAPSHOTFAIL 0xFFFFFFFB
|
|
|
|
// Structure for restore entries stored in rstrlog.dat file.
|
|
//
|
|
// This structure will be followed by three entries of DWORD-aligned
|
|
// strings: (1) source path (2) destination path (3) alternative path
|
|
//
|
|
struct SRstrEntryHdr
|
|
{
|
|
DWORD dwID; // Entry ID (zero-based). 0xFFFFFFFF means a collision entry.
|
|
DWORD dwOpr; // Operation type
|
|
INT64 llSeq; // Sequence Number
|
|
//DWORD dwFlags; // Flags
|
|
DWORD dwRes; // Result code
|
|
DWORD dwErr; // WIN32 error code
|
|
};
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// SRRSTR.DLL (rstrcore)
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// IRestoreContext
|
|
|
|
struct IRestoreContext
|
|
{
|
|
virtual BOOL IsAnyDriveOfflineOrDisabled( LPWSTR szOffline ) = 0;
|
|
virtual void SetSilent() = 0;
|
|
virtual BOOL Release() = 0;
|
|
virtual void SetUndo() = 0;
|
|
};
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// External APIs
|
|
|
|
extern "C"
|
|
{
|
|
BOOL APIENTRY IsSRFrozen();
|
|
BOOL APIENTRY CheckPrivilegesForRestore();
|
|
BOOL APIENTRY InvokeDiskCleanup( LPCWSTR cszDrive );
|
|
BOOL APIENTRY PrepareRestore( int nRP, IRestoreContext **ppCtx );
|
|
BOOL APIENTRY InitiateRestore( IRestoreContext *pCtx, DWORD *pdwNewRP );
|
|
BOOL APIENTRY ResumeRestore();
|
|
|
|
typedef BOOL (APIENTRY * PREPFUNC) ( int nRP, IRestoreContext **ppCtx );
|
|
typedef BOOL (APIENTRY * INITFUNC) ( IRestoreContext *pCtx, DWORD *pdwNewRP );
|
|
}
|
|
|
|
|
|
#endif //_SRSHELL_H__INCLUDED_
|