|
|
/*
* urlprop.h - URL properties class implementation description. */
#ifndef _URLPROP_H_
#define _URLPROP_H_
#include "propstg.h"
#ifdef __cplusplus
// URL Property object
class URLProp : public IPropertyStorage { private: ULONG m_cRef; CLSID m_clsid; FMTID m_fmtid; DWORD m_grfFlags;
// private methods
protected: HPROPSTG m_hstg; FILETIME m_ftModified; FILETIME m_ftCreated; FILETIME m_ftAccessed;
public: URLProp(void); virtual ~URLProp(void);
// IUnknown methods
virtual STDMETHODIMP QueryInterface(REFIID riid, PVOID *ppvObj); virtual STDMETHODIMP_(ULONG) AddRef(void); virtual STDMETHODIMP_(ULONG) Release(void); // IPropertyStorage methods
virtual STDMETHODIMP ReadMultiple(ULONG cpspec, const PROPSPEC rgpspec[], PROPVARIANT rgvar[]); virtual STDMETHODIMP WriteMultiple(ULONG cpspec, const PROPSPEC rgpspec[], const PROPVARIANT rgvar[], PROPID propidNameFirst); virtual STDMETHODIMP DeleteMultiple(ULONG cpspec, const PROPSPEC rgpspec[]); virtual STDMETHODIMP ReadPropertyNames(ULONG cpropid, const PROPID rgpropid[], LPOLESTR rglpwstrName[]); virtual STDMETHODIMP WritePropertyNames(ULONG cpropid, const PROPID rgpropid[], const LPOLESTR rglpwstrName[]); virtual STDMETHODIMP DeletePropertyNames(ULONG cpropid, const PROPID rgpropid[]); virtual STDMETHODIMP SetClass(REFCLSID clsid); virtual STDMETHODIMP Commit(DWORD grfCommitFlags); virtual STDMETHODIMP Revert(void); virtual STDMETHODIMP Enum(IEnumSTATPROPSTG** ppenm); virtual STDMETHODIMP Stat(STATPROPSETSTG* pstatpsstg); virtual STDMETHODIMP SetTimes(const FILETIME* pmtime, const FILETIME* pctime, const FILETIME* patime);
// other methods
virtual STDMETHODIMP Init(void);
STDMETHODIMP GetProp(PROPID pid, LPTSTR pszBuf, int cchBuf); STDMETHODIMP GetProp(PROPID pid, int * piVal); STDMETHODIMP GetProp(PROPID pid, LPDWORD pdwVal); STDMETHODIMP GetProp(PROPID pid, WORD * pwVal); STDMETHODIMP GetProp(PROPID pid, IStream **ppStream); STDMETHODIMP SetProp(PROPID pid, LPCTSTR psz); STDMETHODIMP SetProp(PROPID pid, int iVal); STDMETHODIMP SetProp(PROPID pid, DWORD dwVal); STDMETHODIMP SetProp(PROPID pid, WORD wVal); STDMETHODIMP SetProp(PROPID pid, IStream *pStream);
STDMETHODIMP IsDirty(void);
#ifdef DEBUG
virtual STDMETHODIMP_(void) Dump(void); friend BOOL IsValidPCURLProp(const URLProp *pcurlprop); #endif
};
typedef URLProp * PURLProp; typedef const URLProp CURLProp; typedef const URLProp * PCURLProp;
// Internet Shortcut Property object
class IntshcutProp : public URLProp {
typedef URLProp super;
private: TCHAR m_szFile[MAX_PATH];
// private methods
STDMETHODIMP LoadFromFile(LPCTSTR pszFile);
public: IntshcutProp(void); ~IntshcutProp(void);
// IPropertyStorage methods
virtual STDMETHODIMP Commit(DWORD grfCommitFlags);
// other methods
STDMETHODIMP Init(void); STDMETHODIMP InitFromFile(LPCTSTR pszFile);
STDMETHODIMP SetFileName(LPCTSTR pszFile); STDMETHODIMP SetURLProp(LPCTSTR pszURL, DWORD dwFlags); STDMETHODIMP SetIDListProp(LPCITEMIDLIST pcidl);
STDMETHODIMP SetProp(PROPID pid, LPCTSTR psz); STDMETHODIMP SetProp(PROPID pid, int iVal) { return super::SetProp(pid, iVal); } STDMETHODIMP SetProp(PROPID pid, DWORD dwVal) { return super::SetProp(pid, dwVal); } STDMETHODIMP SetProp(PROPID pid, WORD wVal) { return super::SetProp(pid, wVal); } STDMETHODIMP SetProp(PROPID pid, IStream *pStream) { return super::SetProp(pid, pStream); }
#ifdef DEBUG
virtual STDMETHODIMP_(void) Dump(void); friend BOOL IsValidPCIntshcutProp(const IntshcutProp *pcisprop); #endif
};
typedef IntshcutProp * PIntshcutProp; typedef const IntshcutProp CIntshcutProp; typedef const IntshcutProp * PCIntshcutProp;
class Intshcut;
// Internet Site Property object
class IntsiteProp : public URLProp { private: TCHAR m_szURL[INTERNET_MAX_URL_LENGTH]; Intshcut * m_pintshcut; BOOL m_fPrivate;
// private methods
STDMETHODIMP LoadFromDB(LPCTSTR pszURL);
public: IntsiteProp(void); ~IntsiteProp(void);
// IPropertyStorage methods
virtual STDMETHODIMP Commit(DWORD grfCommitFlags);
// other methods
STDMETHODIMP Init(void); STDMETHODIMP InitFromDB(LPCTSTR pszURL, Intshcut * pintshcut, BOOL fPrivObj);
#ifdef DEBUG
virtual STDMETHODIMP_(void) Dump(void); friend BOOL IsValidPCIntsiteProp(const IntsiteProp *pcisprop); #endif
};
typedef IntsiteProp * PIntsiteProp; typedef const IntsiteProp CIntsiteProp; typedef const IntsiteProp * PCIntsiteProp;
DWORD SchemeTypeFromURL( LPCTSTR pszURL);
#endif // __cplusplus
//
// Prototypes for all modules
//
#ifdef __cplusplus
extern "C" { #endif
typedef const PARSEDURL CPARSEDURL; typedef const PARSEDURL * PCPARSEDURL;
STDAPI CIntshcutProp_CreateInstance( IN LPUNKNOWN punkOuter, IN REFIID riid, OUT LPVOID * ppvOut);
STDAPI CIntsiteProp_CreateInstance( IN LPUNKNOWN punkOuter, IN REFIID riid, OUT LPVOID * ppvOut);
// Worker routines for updating the ini file corresponding to a shortcut
HRESULT ReadStringFromFile(IN LPCTSTR pszFile, IN LPCTSTR pszSectionName, IN LPCTSTR pszName, OUT LPWSTR * ppwsz, IN CHAR * pszBuf);
HRESULT ReadBStrFromFile(IN LPCTSTR pszFile, IN LPCTSTR pszSectionName, IN LPCTSTR pszName, OUT BSTR * pBstr);
HRESULT ReadUnsignedFromFile( IN LPCTSTR pszFile, IN LPCTSTR pszSectionName, IN LPCTSTR pszName, OUT LPDWORD pdwVal);
HRESULT WriteGenericString( IN LPCTSTR pszFile, IN LPCTSTR pszSectionName, IN LPCTSTR pszName, IN LPCWSTR pwsz);
HRESULT WriteSignedToFile( IN LPCTSTR pszFile, IN LPCTSTR pszSectionName, IN LPCTSTR pszName, IN int nVal);
HRESULT WriteUnsignedToFile( IN LPCTSTR pszFile, IN LPCTSTR pszSectionName, IN LPCTSTR pszName, IN DWORD nVal);
HRESULT ReadURLFromFile( IN LPCTSTR pszFile, IN LPCTSTR pszSectionName, OUT LPTSTR * ppsz);
HRESULT ReadBinaryFromFile( IN LPCTSTR pszFile, IN LPCTSTR pszSectionName, IN LPCTSTR pszName, IN LPVOID pvData, IN DWORD cbData);
HRESULT WriteBinaryToFile( IN LPCTSTR pszFile, IN LPCTSTR pszSectionName, IN LPCTSTR pszName, IN LPVOID pvData, IN DWORD cbSize);
#define DeletePrivateProfileString(pszSection, pszKey, pszFile) \
WritePrivateProfileString(pszSection, pszKey, NULL, pszFile) #define SHDeleteIniString(pszSection, pszKey, pszFile) \
SHSetIniString(pszSection, pszKey, NULL, pszFile) #ifdef __cplusplus
}; // extern "C"
#endif
#endif // _URLPROP_H_
|