mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
178 lines
3.9 KiB
178 lines
3.9 KiB
|
|
|
|
//+================================================================
|
|
//
|
|
// File: CMoniker.hxx
|
|
//
|
|
// Purpose: This file declares the CMoniker class.
|
|
// This class manages a file moniker.
|
|
//
|
|
//+================================================================
|
|
|
|
|
|
#ifndef _C_MONIKER_HXX_
|
|
#define _C_MONIKER_HXX_
|
|
|
|
|
|
// --------
|
|
// Includes
|
|
// --------
|
|
|
|
#include "CDir.hxx"
|
|
|
|
// --------
|
|
// CMoniker
|
|
// --------
|
|
|
|
class CMoniker
|
|
{
|
|
|
|
// (De)Construction
|
|
|
|
public:
|
|
|
|
CMoniker();
|
|
~CMoniker();
|
|
|
|
// Public member routines.
|
|
|
|
public:
|
|
|
|
BOOL GetTemporaryStorageTime( FILETIME *);
|
|
BOOL Initialize( const CDirectory& cDirectoryOriginal,
|
|
const CDirectory& cDirectoryFinal );
|
|
BOOL CreateFileMonikerEx( DWORD dwTrackFlags = 0L );
|
|
BOOL SaveDeleteLoad();
|
|
BOOL ComposeWith();
|
|
BOOL Reduce( DWORD dwDelay, IMoniker** ppmkReduced = NULL );
|
|
BOOL GetDisplayName( WCHAR * wszDisplayName, IMoniker* pmnkCaller = NULL );
|
|
BOOL GetTimeOfLastChange( FILETIME *ft );
|
|
BOOL BindToStorage();
|
|
BOOL BindToObject();
|
|
|
|
BOOL CreateTemporaryStorage();
|
|
BOOL RenameTemporaryStorage();
|
|
BOOL DeleteTemporaryStorage();
|
|
|
|
const WCHAR * GetTemporaryStorageName() const;
|
|
IBindCtx* GetBindCtx() const;
|
|
BOOL TouchTemporaryStorage();
|
|
HRESULT GetHResult() const;
|
|
void SuppressErrorMessages( BOOL bSuppress );
|
|
BOOL InitializeBindContext( );
|
|
|
|
|
|
// Private member routines.
|
|
|
|
private:
|
|
|
|
BOOL CreateLinkTrackingRegistryKey();
|
|
BOOL OpenLinkTrackingRegistryKey();
|
|
BOOL CloseLinkTrackingRegistryKey();
|
|
void DisplayErrors( BOOL bSuccess, WCHAR * wszFunctionName ) const;
|
|
|
|
|
|
// Private data members
|
|
|
|
private:
|
|
|
|
WCHAR m_wszSystemTempPath[ MAX_PATH + sizeof( L'\0' ) ];
|
|
WCHAR m_wszTemporaryStorage[ MAX_PATH + sizeof( L'\0' ) ];
|
|
|
|
IMoniker* m_pIMoniker;
|
|
IBindCtx* m_pIBindCtx;
|
|
IStorage* m_pIStorage;
|
|
|
|
WCHAR m_wszErrorMessage[ 100 ];
|
|
DWORD m_dwTrackFlags;
|
|
BOOL m_bSuppressErrorMessages;
|
|
|
|
const CDirectory* m_pcDirectoryOriginal;
|
|
const CDirectory* m_pcDirectoryFinal;
|
|
|
|
// The following key, along with being a usable handle, is a flag
|
|
// which indicates if we need to restore the data in the registry.
|
|
|
|
HKEY m_hkeyLinkTracking;
|
|
|
|
|
|
// Note that m_hr is used for more than just HRESULTs, sometimes
|
|
// it is used for other errors as well.
|
|
|
|
HRESULT m_hr;
|
|
|
|
};
|
|
|
|
|
|
// --------------
|
|
// Inline Members
|
|
// --------------
|
|
|
|
#define OUTFILE stdout
|
|
|
|
// CMoniker::DisplayErrors
|
|
|
|
inline void CMoniker::DisplayErrors( BOOL bSuccess, WCHAR * wszFunctionName ) const
|
|
{
|
|
if( !bSuccess
|
|
&&
|
|
!m_bSuppressErrorMessages
|
|
)
|
|
{
|
|
fwprintf( OUTFILE, L"Error in %s (%08x)\n %s\n",
|
|
wszFunctionName, m_hr, m_wszErrorMessage );
|
|
}
|
|
}
|
|
|
|
// CMoniker::GetTemporaryStorage
|
|
|
|
inline const WCHAR * CMoniker::GetTemporaryStorageName() const
|
|
{
|
|
return m_wszTemporaryStorage;
|
|
}
|
|
|
|
// CMoniker::GetBindCtx
|
|
|
|
inline IBindCtx* CMoniker::GetBindCtx() const
|
|
{
|
|
return( m_pIBindCtx );
|
|
}
|
|
|
|
// CMoniker::GetHResult
|
|
|
|
inline HRESULT CMoniker::GetHResult() const
|
|
{
|
|
return( m_hr );
|
|
}
|
|
|
|
// CMoniker::SuppressErrorMessages
|
|
|
|
inline void CMoniker::SuppressErrorMessages( BOOL bSuppress )
|
|
{
|
|
// Normalize to TRUE or FALSE
|
|
|
|
m_bSuppressErrorMessages = bSuppress ? TRUE : FALSE;
|
|
}
|
|
|
|
|
|
// ------
|
|
// Macros
|
|
// ------
|
|
|
|
#define DEFAULT_TRACK_FLAGS ( TRACK_LOCALONLY )
|
|
|
|
#define EXIT_ON_FAILED( error ) if( FAILED( m_hr )) \
|
|
{\
|
|
wcscpy( m_wszErrorMessage, ##error );\
|
|
goto Exit;\
|
|
}
|
|
|
|
#undef EXIT
|
|
#define EXIT( error ) \
|
|
{\
|
|
wcscpy( m_wszErrorMessage, ##error );\
|
|
goto Exit;\
|
|
}
|
|
|
|
|
|
#endif // _C_MONIKER_HXX_
|