windows-nt/Source/XPSP1/NT/enduser/stuff/hhsetup/fs.h
2020-09-26 16:20:57 +08:00

116 lines
2.6 KiB
C++

// Copyright 1997-1997 Microsoft Corporation. All Rights Reserved.
#if _MSC_VER > 1000
#pragma once
#endif
#ifndef _FS_H_
#define _FS_H_
#include <unknwn.h>
#include "msitstg.h"
#ifdef ReleaseObjPtr
#undef ReleaseObjPtr
#endif
#define ReleaseObjPtr(pObj) \
{ \
if( pObj ) \
{ \
pObj->Release(); \
pObj= NULL; \
} \
}
//
// Sub-File System
//
class CSubFileSystem
{
public:
CSubFileSystem(class CFileSystem* pfs);
~CSubFileSystem();
HRESULT CreateSub(PCSTR pszPathName);
HRESULT CreateUncompressedSub(PCSTR pszPathName);
HRESULT OpenSub(PCSTR pszPathName, DWORD dwAccess = (STGM_READ | STGM_SHARE_DENY_WRITE));
ULONG WriteSub(const void* pData, int cb);
ULONG SeekSub(int cb, int iOrigin);
HRESULT CreateSystemFile(PCSTR pszPathName);
HRESULT CreateUncompressedSystemFile(PCSTR pszPathName);
HRESULT SetSize(unsigned uSize);
HRESULT DeleteSub() ;
inline HRESULT ReadSub(void* pData, ULONG cb, ULONG* pcbRead) {
return m_pStream->Read(pData, cb, pcbRead);
}
inline ULONG GetUncompressedSize(void) { return SeekSub(0,2); }
inline HRESULT Stat(STATSTG *pstatstg, DWORD grfStatFalg)
{
return m_pStream->Stat(pstatstg,grfStatFalg);
}
inline HRESULT CopyTo(IStream* pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER* pcbWritten)
{
return m_pStream->CopyTo(pstm, cb, pcbRead, pcbWritten);
}
inline IStream * GetStream(void)
{
return m_pStream;
}
inline IStorage* GetITStorageDocObj(void) const
{
return m_pStorage;
}
private:
class CFileSystem* m_pFS;
IStorage* m_pStorage;
IStream* m_pStream;
char m_szPathName[MAX_PATH]; // Needed for delete.
};
//
// File System
//
class CFileSystem
{
friend class CSubFileSystem;
public:
CFileSystem();
~CFileSystem();
HRESULT Init(void);
HRESULT Create( PCSTR pszPathName );
HRESULT CreateUncompressed( PCSTR pszPathName );
HRESULT Open( PCSTR pszPathName, DWORD dwAccess = (STGM_READ | STGM_SHARE_DENY_WRITE));
HRESULT Compact(LPCSTR lpszFileName);
HRESULT Close(void);
inline HRESULT GetPathName( LPSTR pszPathName ) { strcpy(pszPathName, m_szPathName); return S_OK; }
inline IITStorage* GetITStorageObj(void) const
{
return m_pITStorage;
}
inline IStorage* GetITStorageDocObj(void) const
{
return m_pStorage;
}
private:
IITStorage* m_pITStorage;
IStorage* m_pStorage;
char m_szPathName[MAX_PATH];
};
#endif // _FS_H_