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.
117 lines
2.9 KiB
117 lines
2.9 KiB
//+------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1995 - 1998.
|
|
//
|
|
// File: oleprop.hxx
|
|
//
|
|
// Contents: OLE Property Manager. Handles access to property sets.
|
|
//
|
|
// Classes: COLEPropManager
|
|
//
|
|
// History: 13-Dec-95 dlee Created
|
|
//
|
|
//-------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
extern BOOL IsNullPointerVariant( PROPVARIANT *ppv );
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: COLEPropManager
|
|
//
|
|
// Purpose: Handles access to OLE Property sets
|
|
//
|
|
// History: 13-Dec-95 dlee Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
class COLEPropManager
|
|
{
|
|
public:
|
|
|
|
COLEPropManager( ) : _ppsstg( 0 ),
|
|
_fStgOpenAttempted( FALSE ),
|
|
_fOfficeCustomPropsetOpen( FALSE ),
|
|
_fSharingViolation( FALSE ),
|
|
_aPropSets( 0 )
|
|
{ }
|
|
|
|
~COLEPropManager() { ReleasePSS(); }
|
|
|
|
BOOL isOpen() { return ( 0 != _ppsstg ); }
|
|
|
|
BOOL Open( const CFunnyPath & funnyPath );
|
|
|
|
void Close() { ReleasePSS(); }
|
|
|
|
void FetchProperty( GUID const & guidPS,
|
|
PROPSPEC const & psProperty,
|
|
PROPVARIANT * pbData,
|
|
unsigned * pcb );
|
|
|
|
BOOL ReadProperty( CFullPropSpec const & ps,
|
|
PROPVARIANT & Var );
|
|
|
|
private:
|
|
|
|
void ReleasePSS()
|
|
{
|
|
_fStgOpenAttempted = FALSE;
|
|
_fSharingViolation = FALSE;
|
|
_fOfficeCustomPropsetOpen = FALSE;
|
|
|
|
if ( 0 != _ppsstg )
|
|
{
|
|
_aPropSets.Clear();
|
|
_ppsstg->Release();
|
|
_ppsstg = 0;
|
|
}
|
|
}
|
|
|
|
unsigned PropSetToOrdinal( GUID const & guidPS );
|
|
|
|
//
|
|
// Property set mapping.
|
|
//
|
|
|
|
class CPropSetMap
|
|
{
|
|
public:
|
|
|
|
CPropSetMap()
|
|
: _pstg( 0 ), _fOpenAttempted( FALSE ) {}
|
|
|
|
CPropSetMap( GUID const & guidPS )
|
|
: _pstg( 0 ), _fOpenAttempted( FALSE ), _guid( guidPS ) {}
|
|
|
|
~CPropSetMap() { Close(); }
|
|
|
|
GUID const & GetGuid() { return _guid; }
|
|
void SetGuid( GUID const & guid ) { _guid = guid; }
|
|
|
|
IPropertyStorage & GetPS() { return *_pstg; }
|
|
|
|
BOOL isOpen( IPropertySetStorage * ppsstg );
|
|
|
|
void Close();
|
|
|
|
private:
|
|
|
|
GUID _guid;
|
|
IPropertyStorage * _pstg;
|
|
BOOL _fOpenAttempted;
|
|
};
|
|
|
|
IPropertySetStorage * _ppsstg;
|
|
BOOL _fStgOpenAttempted;
|
|
BOOL _fOfficeCustomPropsetOpen;
|
|
BOOL _fSharingViolation;
|
|
|
|
CDynArrayInPlaceNST<CPropSetMap> _aPropSets;
|
|
|
|
LONGLONG _llAlign;
|
|
WCHAR _awcPath[ MAX_PATH + 1 ];
|
|
};
|
|
|