// 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__