WindowsXP-SP1/admin/pchealth/sr/restmap/reslist.h
2020-09-30 16:53:49 +02:00

164 lines
3.3 KiB
C++

#ifndef _RESLIST_H_
#define _RESLIST_H_
#include "srapi.h"
#define MAX_TEMP_FNAME 10
#define HEAP_ALLOC( size ) \
HeapAlloc( GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY, size )
#define HEAP_REALLOC( p, size ) \
HeapReAlloc( GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS | HEAP_ZERO_MEMORY, p, size )
#define HEAP_FREE( p ) \
if (p) { HeapFree( GetProcessHeap(), 0, p ); p = NULL; }
#define STRCOPY(a,b) \
if (b) { HEAP_FREE(a); a = (LPWSTR) HEAP_ALLOC(STRSIZE(b)); \
if (a) memcpy(a, b, STRSIZE(b)); }
#define STRSIZE(pa) (lstrlen(pa) + 1) * sizeof(WCHAR)
//
// CNode : Stores node specific data
//
struct CNode
{
CNode * m_pNext; // Pointer to the sibling node.
CNode * m_pPrev; // Pointer to Prev node.
DWORD m_dwOperation; // Restore operation.
DWORD m_dwAttributes; // Restore Attributes.
LPWSTR m_pszTemp; // Temp File
BYTE* m_pbAcl; // acl data
DWORD m_cbAcl; // acl data size
BOOL m_fAclInline; // whether acl is inline or in file
LPWSTR m_pPath1; // source path
LPWSTR m_pPath2; // dest path on rename
};
CNode *
AllocateNode(
LPWSTR,
LPWSTR);
VOID
FreeNode(
CNode *);
class CRestoreList
{
private:
CNode * m_pListHead;
CNode * m_pListTail;
public:
CRestoreList::CRestoreList();
CRestoreList::~CRestoreList();
BOOL
GenerateRestoreMap(
HANDLE hFile
);
CNode *
AppendNode(
LPWSTR pPath1,
LPWSTR pPath2);
CNode *
RemoveNode(
CNode * pNode
);
CNode *
GetLastNode(
LPWSTR pPath,
LPWSTR pPath2,
BOOL fFailOnPrefixMatch
);
BOOL
CopyNode(
CNode * pSrc,
CNode * pDes,
BOOL fReplacePPath2
);
BOOL
CheckIntegrity(
LPWSTR pszDrive,
DWORD dwOpr,
DWORD dwAttr,
DWORD dwFlags,
LPWSTR pTmpFile,
LPWSTR pPath1,
LPWSTR pPath2,
BYTE * pbAcl,
DWORD cbAcl,
BOOL fAclInline);
BOOL
AddMergeElement(
LPWSTR pszDrive,
DWORD dwOpr,
DWORD dwAttr,
DWORD dwFlags,
LPWSTR pTmpFile,
LPWSTR pPath1,
LPWSTR pPath2,
BYTE * pbAcl,
DWORD cbAcl,
BOOL fAclInline);
BOOL
CreateRestoreNode(
CNode *pNode,
DWORD dwOpr,
DWORD dwAttr,
DWORD dwFlags,
LPWSTR pTmpFile,
LPWSTR pPath1,
LPWSTR pPath2,
BYTE * pbAcl,
DWORD cbAcl,
BOOL fAclInline);
BOOL
MergeRestoreNode(
CNode *pNode,
DWORD dwOpr,
DWORD dwAttr,
DWORD dwFlags,
LPWSTR pTmpFile,
LPWSTR pPath1,
LPWSTR pPath2,
BYTE * pbAcl,
DWORD cbAcl,
BOOL fAclInline);
BOOL
GenerateRenameEntry(
CNode * pNode ,
HANDLE hFile
);
BOOL
GenerateOperation(
CNode * pNode ,
HANDLE hFile
);
};
#endif