Leaked source code of windows server 2003
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

//***************************************************************************
//
// (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