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

169 lines
5.9 KiB
C++

// Moniker.h -- IMoniker interface for ITSS objects
#ifndef __MONIKER_H__
#define __MONIKER_H__
class CStorageMoniker : public CITUnknown
{
public:
// Creator:
static HRESULT CreateStorageMoniker(IUnknown *punkOuter,
IBindCtx __RPC_FAR *pbc,
LPOLESTR pszDisplayName,
ULONG __RPC_FAR *pchEaten,
IMoniker __RPC_FAR *__RPC_FAR *ppmkOut
);
// Destructor:
~CStorageMoniker(void);
private:
// Constructor:
CStorageMoniker(IUnknown *punkOuter);
class CImpIStorageMoniker : public IITMoniker
{
public:
CImpIStorageMoniker(CStorageMoniker *pBackObj, IUnknown *punkOuter);
~CImpIStorageMoniker(void);
HRESULT InitCreateStorageMoniker(IBindCtx __RPC_FAR *pbc,
LPOLESTR pszDisplayName,
ULONG __RPC_FAR *pchEaten
);
// IPersist methods
HRESULT STDMETHODCALLTYPE GetClassID(
/* [out] */ CLSID __RPC_FAR *pClassID);
// IPersistStream methods
HRESULT STDMETHODCALLTYPE IsDirty( void);
HRESULT STDMETHODCALLTYPE Load(
/* [unique][in] */ IStream __RPC_FAR *pStm);
HRESULT STDMETHODCALLTYPE Save(
/* [unique][in] */ IStream __RPC_FAR *pStm,
/* [in] */ BOOL fClearDirty);
HRESULT STDMETHODCALLTYPE GetSizeMax(
/* [out] */ ULARGE_INTEGER __RPC_FAR *pcbSize);
// IMoniker methods
/* [local] */ HRESULT STDMETHODCALLTYPE BindToObject(
/* [unique][in] */ IBindCtx __RPC_FAR *pbc,
/* [unique][in] */ IMoniker __RPC_FAR *pmkToLeft,
/* [in] */ REFIID riidResult,
/* [out] */ void __RPC_FAR *__RPC_FAR *ppvResult);
/* [local] */ HRESULT STDMETHODCALLTYPE BindToStorage(
/* [unique][in] */ IBindCtx __RPC_FAR *pbc,
/* [unique][in] */ IMoniker __RPC_FAR *pmkToLeft,
/* [in] */ REFIID riid,
/* [out] */ void __RPC_FAR *__RPC_FAR *ppvObj);
HRESULT STDMETHODCALLTYPE Reduce(
/* [unique][in] */ IBindCtx __RPC_FAR *pbc,
/* [in] */ DWORD dwReduceHowFar,
/* [unique][out][in] */ IMoniker __RPC_FAR *__RPC_FAR *ppmkToLeft,
/* [out] */ IMoniker __RPC_FAR *__RPC_FAR *ppmkReduced);
HRESULT STDMETHODCALLTYPE ComposeWith(
/* [unique][in] */ IMoniker __RPC_FAR *pmkRight,
/* [in] */ BOOL fOnlyIfNotGeneric,
/* [out] */ IMoniker __RPC_FAR *__RPC_FAR *ppmkComposite);
HRESULT STDMETHODCALLTYPE Enum(
/* [in] */ BOOL fForward,
/* [out] */ IEnumMoniker __RPC_FAR *__RPC_FAR *ppenumMoniker);
HRESULT STDMETHODCALLTYPE IsEqual(
/* [unique][in] */ IMoniker __RPC_FAR *pmkOtherMoniker);
HRESULT STDMETHODCALLTYPE Hash(
/* [out] */ DWORD __RPC_FAR *pdwHash);
HRESULT STDMETHODCALLTYPE IsRunning(
/* [unique][in] */ IBindCtx __RPC_FAR *pbc,
/* [unique][in] */ IMoniker __RPC_FAR *pmkToLeft,
/* [unique][in] */ IMoniker __RPC_FAR *pmkNewlyRunning);
HRESULT STDMETHODCALLTYPE GetTimeOfLastChange(
/* [unique][in] */ IBindCtx __RPC_FAR *pbc,
/* [unique][in] */ IMoniker __RPC_FAR *pmkToLeft,
/* [out] */ FILETIME __RPC_FAR *pFileTime);
HRESULT STDMETHODCALLTYPE Inverse(
/* [out] */ IMoniker __RPC_FAR *__RPC_FAR *ppmk);
HRESULT STDMETHODCALLTYPE CommonPrefixWith(
/* [unique][in] */ IMoniker __RPC_FAR *pmkOther,
/* [out] */ IMoniker __RPC_FAR *__RPC_FAR *ppmkPrefix);
HRESULT STDMETHODCALLTYPE RelativePathTo(
/* [unique][in] */ IMoniker __RPC_FAR *pmkOther,
/* [out] */ IMoniker __RPC_FAR *__RPC_FAR *ppmkRelPath);
HRESULT STDMETHODCALLTYPE GetDisplayName(
/* [unique][in] */ IBindCtx __RPC_FAR *pbc,
/* [unique][in] */ IMoniker __RPC_FAR *pmkToLeft,
/* [out] */ LPOLESTR __RPC_FAR *ppszDisplayName);
HRESULT STDMETHODCALLTYPE ParseDisplayName(
/* [unique][in] */ IBindCtx __RPC_FAR *pbc,
/* [unique][in] */ IMoniker __RPC_FAR *pmkToLeft,
/* [in] */ LPOLESTR pszDisplayName,
/* [out] */ ULONG __RPC_FAR *pchEaten,
/* [out] */ IMoniker __RPC_FAR *__RPC_FAR *ppmkOut);
HRESULT STDMETHODCALLTYPE IsSystemMoniker(
/* [out] */ DWORD __RPC_FAR *pdwMksys);
private:
HRESULT STDMETHODCALLTYPE OpenRootStorage(DWORD grfMode);
IStorage *m_pStorageRoot; // Initially Null; Set when we instantiate
// the storage corresponding to the moniker
WCHAR m_awszStorageFile[MAX_PATH]; // Path to root storage object
WCHAR m_awszStoragePath[MAX_PATH]; // Path within storage object
#ifdef IE30Hack
CHAR m_acsTempFile[MAX_PATH];
CHAR *m_pcsDisplayName;
#endif // IE30Hack
};
CImpIStorageMoniker m_ImpIStorageMoniker;
};
typedef CStorageMoniker *PCStorageMoniker;
extern GUID aIID_CStorageMoniker[];
extern UINT cInterfaces_CStorageMoniker;
inline CStorageMoniker::CStorageMoniker(IUnknown *pUnkOuter)
: m_ImpIStorageMoniker(this, pUnkOuter),
CITUnknown(aIID_CStorageMoniker, cInterfaces_CStorageMoniker, &m_ImpIStorageMoniker)
{
}
inline CStorageMoniker::~CStorageMoniker(void)
{
}
HRESULT STDMETHODCALLTYPE FindRootStorageFile(WCHAR * pwszStorageFile);
#endif // __MONIKER_H__