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.
83 lines
2.9 KiB
83 lines
2.9 KiB
//***************************************************************************
|
|
//
|
|
// (c) 2001 by Microsoft Corp. All Rights Reserved.
|
|
//
|
|
//***************************************************************************
|
|
|
|
#ifndef __A51_OBJHEAP__H_
|
|
#define __A51_OBJHEAP__H_
|
|
|
|
#include "index.h"
|
|
#include "VarObjHeap.h"
|
|
|
|
typedef DWORD TOffset;
|
|
typedef DWORD TPage;
|
|
|
|
class CObjectHeap
|
|
{
|
|
protected:
|
|
BOOL m_bInit;
|
|
|
|
CVarObjHeap m_Heap;
|
|
CBtrIndex m_Index;
|
|
|
|
bool KeyRootInstancePath(const wchar_t *wszPath);
|
|
|
|
|
|
public:
|
|
CObjectHeap() :m_bInit(FALSE)
|
|
{}
|
|
virtual ~CObjectHeap(){}
|
|
|
|
long Initialize(CPageSource * pAbstractSource,
|
|
WCHAR * wszBaseName,
|
|
DWORD dwBaseNameLen);
|
|
|
|
long Uninitialize(DWORD dwShutDownFlags);
|
|
|
|
//Transaction aborts require caches to be flushed and re-read
|
|
void InvalidateCache();
|
|
|
|
long FlushCaches();
|
|
|
|
//File read/write methods
|
|
long WriteObject(LPCWSTR wszFilePath1, LPCWSTR wszFilePath2, DWORD dwBufferLen, BYTE* pBuffer);
|
|
long WriteLink(LPCWSTR wszLinkPath);
|
|
long DeleteObject(LPCWSTR wszFilePath);
|
|
long DeleteLink(LPCWSTR wszLinkPath);
|
|
long DeleteNode(LPCWSTR wszNodeName);
|
|
|
|
long ReadObject(LPCWSTR wszFilePath, DWORD* pdwBufferLen, BYTE** ppBuffer);
|
|
long ReadNextIndex(CFileName &wszSearch, CFileName &wszNextIndex);
|
|
|
|
// for the dump utility
|
|
CBtrIndex * GetIndex(){ return &m_Index; };
|
|
CVarObjHeap * GetFileHeap(){ return &m_Heap; };
|
|
|
|
long ObjectEnumerationBegin(const wchar_t *wszSearchPrefix, void **ppHandle);
|
|
long ObjectEnumerationEnd(void *pHandle);
|
|
long ObjectEnumerationNext(void *pHandle, CFileName &wszFileName, BYTE **ppBlob, DWORD *pdwSize);
|
|
long ObjectEnumerationFree(void *pHandle, BYTE *pBlob);
|
|
|
|
long IndexEnumerationBegin(const wchar_t *wszSearchPrefix, void **ppHandle);
|
|
long IndexEnumerationEnd(void *pHandle);
|
|
long IndexEnumerationNext(void *pHandle, CFileName &wszFileName, bool bCopyFullPath = false);
|
|
|
|
protected:
|
|
long GetIndexFileName(LPCWSTR wszFilePath, CFileName& wszIndexFileName);
|
|
long GetFileInfo(LPCWSTR wszFilePath, TPage *pnPage, TOffset* pnOffset, DWORD* pdwLength);
|
|
long ParseInfoFromIndexFile(LPCWSTR wszIndexFileName, TPage *pnPage, TOffset* pnOffset, DWORD* pdwLength);
|
|
long CreateIndexFile(LPCWSTR wszFilePath, TPage nPage, TOffset nOffset, DWORD dwLength);
|
|
long DeleteIndexFile(LPCWSTR wszFilePath, LPCWSTR wszIndexFileName);
|
|
long CreateZeroLengthFile(LPCWSTR wszFilePath);
|
|
long DeleteZeroLengthFile(LPCWSTR wszFilePath);
|
|
long WriteAllocation(DWORD dwDataLength, BYTE* pData, TPage *pnPage, TOffset *pnOffset);
|
|
long WriteExistingAllocation(TPage nOldPage, TOffset nOldOffset, DWORD dwBufferLen, BYTE *pBuffer, DWORD *pnNewPage, DWORD *pnNewOffset);
|
|
long ReadAllocation(TPage nPage, TOffset nOffset, DWORD dwDataLength, BYTE* pBuffer);
|
|
};
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|