filter.h
Upload User: xhy777
Upload Date: 2007-02-14
Package Size: 24088k
Code Size: 6k
Category:

Windows Kernel

Development Platform:

Visual C++

  1. #ifndef _FILTER_H_
  2. #define _FILTER_H_
  3. HRESULT CopyTo(IStream* pstmIn,
  4.     /* [unique][in] */ IStream *pstm,
  5.     /* [in] */ ULARGE_INTEGER cb,
  6.     /* [out] */ ULARGE_INTEGER *pcbRead,
  7.     /* [out] */ ULARGE_INTEGER *pcbWritten);
  8. #if 0
  9. class CFile
  10. {
  11. public:
  12.     CFile() : m_fh(HFILE_ERROR) {m_szFile[0] = 0;}
  13.     ~CFile() {Close();}
  14.     BOOL Read( 
  15.         /* [out] */ void *pv,
  16.         /* [in] */ ULONG cb,
  17.         /* [out] */ ULONG *pcbRead);
  18.     BOOL Write( 
  19.         /* [size_is][in] */ const void *pv,
  20.         /* [in] */ ULONG cb,
  21.         /* [out] */ ULONG *pcbWritten);
  22.     BOOL Seek( 
  23.         /* [in] */ LONG lMove,
  24.         /* [in] */ DWORD dwOrigin,
  25.         /* [out] */ ULONG *plPosition);
  26.     BOOL Load( 
  27.         /* [in] */ LPCOLESTR pszFileName,
  28.         /* [in] */ DWORD dwMode,
  29.         BOOL bExist=FALSE);
  30.     BOOL GetFileName(LPTSTR szFile)
  31.     { lstrcpy(szFile, m_szFile); return(m_szFile[0]!=''); }
  32. private:
  33.     BOOL Open()
  34.     {
  35.         if (m_fh != HFILE_ERROR) 
  36.             return TRUE;
  37.         if (m_szFile[0] == '') 
  38.             return FALSE;
  39. #ifdef UNICODE
  40.         m_fh = CreateFile(m_szFile, m_dwMode, NULL, );
  41.         return m_fh != INVALID_HANDLE_VALUE;
  42. #else
  43.         m_fh = _lopen(m_szFile, m_dwMode);
  44.         return m_fh != HFILE_ERROR;
  45. #endif
  46.     }
  47.     void Close()
  48.     {
  49.         if (m_fh != HFILE_ERROR) 
  50.             _lclose(m_fh);
  51.         m_fh = HFILE_ERROR;
  52.     }
  53.     TCHAR m_szFile[MAX_PATH];
  54.     HFILE m_fh;
  55.     DWORD m_dwMode;
  56. } ;
  57. #endif
  58. class CIDList
  59. {
  60. public:
  61.     CIDList() : m_pidl(NULL), m_psfParent(NULL), m_psfHere(NULL) {}
  62.     ~CIDList() {Free();}
  63.     operator !() {return(m_pidl==NULL);}
  64.     operator LPCITEMIDLIST() {return(m_pidl);}
  65.     BOOL Save(LPCITEMIDLIST pidl, BOOL bCopy=TRUE);
  66.     BOOL GetDisplayName(STRRET* psr, LPCITEMIDLIST pidl=NULL);
  67.     BOOL GetFullPath(LPTSTR szPath, LPCITEMIDLIST pidlRel=NULL);
  68.     IEnumIDList* EnumObjects()
  69.     {
  70.         if (!InitFolder()) return(NULL);
  71.         IEnumIDList* pEnum;
  72.         return(SUCCEEDED(m_psfHere->EnumObjects(NULL,
  73.             SHCONTF_FOLDERS|SHCONTF_NONFOLDERS, &pEnum)) ? pEnum : NULL);
  74.     }
  75.     BOOL GetAttributes(DWORD* pdwAttr, LPCITEMIDLIST pidl)
  76.     {
  77.         if (!InitFolder()) return(FALSE);
  78.         return(SUCCEEDED(m_psfHere->GetAttributesOf(1, &pidl, pdwAttr)));
  79.     }
  80.     void CleanUp();
  81.     LPITEMIDLIST ParseDisplayName(LPCOLESTR szName)
  82.     {
  83.         if (!InitFolder()) return(NULL);
  84.         LPITEMIDLIST pidl;
  85.         if(FAILED(m_psfHere->ParseDisplayName(NULL, NULL, (LPOLESTR)szName, NULL,
  86.             &pidl, NULL)))
  87.         { return(NULL); }
  88.         return(pidl);
  89.     }
  90. private:
  91.     BOOL InitParentFolder();
  92.     BOOL InitFolder();
  93.     void Free() {CleanUp(); if (m_pidl) ILFree(m_pidl); m_pidl=NULL;}
  94.     LPITEMIDLIST m_pidl;
  95.     IShellFolder* m_psfParent;
  96.     IShellFolder* m_psfHere;
  97. } ;
  98. class CStreamHLocal : public IStream
  99. {
  100. public:
  101.     CStreamHLocal() : _cRef(1), m_pData(NULL), m_cbPos(0) { DllAddRef(); }
  102.     virtual ~CStreamHLocal() { Clear(); DllRelease(); }
  103.     // IUnknown
  104.     virtual STDMETHODIMP QueryInterface(REFIID riid,void **ppvObj);
  105.     virtual STDMETHODIMP_(ULONG) AddRef(void);
  106.     virtual STDMETHODIMP_(ULONG) Release(void);
  107.     // IStream
  108.     virtual STDMETHODIMP Read( 
  109.         /* [out] */ void *pv,
  110.         /* [in] */ ULONG cb,
  111.         /* [out] */ ULONG *pcbRead);
  112.     
  113.     virtual STDMETHODIMP Write( 
  114.         /* [size_is][in] */ const void *pv,
  115.         /* [in] */ ULONG cb,
  116.         /* [out] */ ULONG *pcbWritten);
  117.     
  118.     virtual STDMETHODIMP Seek( 
  119.         /* [in] */ LARGE_INTEGER dlibMove,
  120.         /* [in] */ DWORD dwOrigin,
  121.         /* [out] */ ULARGE_INTEGER *plibNewPosition);
  122.     
  123.     virtual STDMETHODIMP SetSize( 
  124.         /* [in] */ ULARGE_INTEGER libNewSize);
  125.     
  126.     virtual STDMETHODIMP CopyTo( 
  127.         /* [unique][in] */ IStream *pstm,
  128.         /* [in] */ ULARGE_INTEGER cb,
  129.         /* [out] */ ULARGE_INTEGER *pcbRead,
  130.         /* [out] */ ULARGE_INTEGER *pcbWritten)
  131.     { return (::CopyTo(this, pstm, cb, pcbRead, pcbWritten)); }
  132.     
  133.     virtual STDMETHODIMP Commit( 
  134.         /* [in] */ DWORD grfCommitFlags)
  135.     { return(E_NOTIMPL); }
  136.     
  137.     virtual STDMETHODIMP Revert(void)
  138.     { return(E_NOTIMPL); }
  139.     
  140.     virtual STDMETHODIMP LockRegion( 
  141.         /* [in] */ ULARGE_INTEGER libOffset,
  142.         /* [in] */ ULARGE_INTEGER cb,
  143.         /* [in] */ DWORD dwLockType)
  144.     { return(E_NOTIMPL); }
  145.     
  146.     virtual STDMETHODIMP UnlockRegion( 
  147.         /* [in] */ ULARGE_INTEGER libOffset,
  148.         /* [in] */ ULARGE_INTEGER cb,
  149.         /* [in] */ DWORD dwLockType)
  150.     { return(E_NOTIMPL); }
  151.     
  152.     virtual STDMETHODIMP Stat( 
  153.         /* [out] */ STATSTG *pstatstg,
  154.         /* [in] */ DWORD grfStatFlag);
  155.     
  156.     virtual STDMETHODIMP Clone( 
  157.         /* [out] */ IStream **ppstm)
  158.     { return(E_NOTIMPL); }
  159. public:
  160.     LPBYTE GetPtr() { return(m_pData); }
  161.     UINT GetSize() { return(m_cbAll); }
  162.     void Reset() { m_cbAll=m_cbPos=0; }
  163.     void Clear() { if (m_pData) LocalFree((HLOCAL)m_pData); m_pData=NULL; Reset(); }
  164. private:
  165.     ULONG _cRef;
  166.     UINT m_cbPos;
  167.     UINT m_cbAlloced;
  168.     UINT m_cbAll;
  169.     LPBYTE m_pData;
  170. };
  171. inline LPSTR SkipSpace(LPCSTR pIn)
  172. {
  173.     while (*pIn == ' ')
  174.     {
  175.         ++pIn;
  176.     }
  177.     return((LPSTR)pIn);
  178. }
  179. inline BOOL IsSmallLarge(LARGE_INTEGER cb)
  180. {
  181.     LONG lOffset = (LONG)cb.LowPart;
  182.     // Make sure we are only using 32 bits
  183.     if (cb.HighPart==0 && lOffset>=0)
  184.     {
  185.         return(TRUE);
  186.     }
  187.     else if (cb.HighPart==-1 && lOffset<0)
  188.     {
  189.         return(TRUE);
  190.     }
  191.     return(FALSE);
  192. }
  193. inline BOOL IsSmallULarge(ULARGE_INTEGER cb)
  194. {
  195.     // Make sure we are only using 32 bits
  196.     if (cb.HighPart == 0)
  197.     {
  198.         return(TRUE);
  199.     }
  200.     return(FALSE);
  201. }
  202. LPSTR StrStrN(LPCSTR pSrc, ULONG uSrcSize, LPCSTR pSearch);
  203. #endif // _FILTER_H_