319 lines
6.9 KiB
C++
319 lines
6.9 KiB
C++
//---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1995
|
|
//
|
|
// File: cpobj.cxx
|
|
//
|
|
// Contents: Property Attribute object
|
|
//
|
|
// History: 21-1-98 SophiaC Created.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include "iis.hxx"
|
|
#pragma hdrstop
|
|
|
|
|
|
// Class CPropertyAttribute
|
|
|
|
DEFINE_Simple_IDispatch_Implementation(CPropertyAttribute)
|
|
|
|
CPropertyAttribute::CPropertyAttribute():
|
|
_pDispMgr(NULL)
|
|
{
|
|
VariantInit(&_vDefault);
|
|
ENLIST_TRACKING(CPropertyAttribute);
|
|
}
|
|
|
|
HRESULT
|
|
CPropertyAttribute::CreatePropertyAttribute(
|
|
REFIID riid,
|
|
void **ppvObj
|
|
)
|
|
{
|
|
CPropertyAttribute FAR * pPropertyAttribute = NULL;
|
|
HRESULT hr = S_OK;
|
|
|
|
hr = AllocatePropertyAttributeObject(&pPropertyAttribute);
|
|
BAIL_ON_FAILURE(hr);
|
|
|
|
hr = pPropertyAttribute->QueryInterface(riid, ppvObj);
|
|
BAIL_ON_FAILURE(hr);
|
|
|
|
pPropertyAttribute->Release();
|
|
|
|
RRETURN(hr);
|
|
|
|
error:
|
|
delete pPropertyAttribute;
|
|
|
|
RRETURN(hr);
|
|
|
|
}
|
|
|
|
|
|
CPropertyAttribute::~CPropertyAttribute( )
|
|
{
|
|
VariantClear(&_vDefault);
|
|
delete _pDispMgr;
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::QueryInterface(
|
|
REFIID iid,
|
|
LPVOID FAR* ppv
|
|
)
|
|
{
|
|
if (IsEqualIID(iid, IID_IUnknown))
|
|
{
|
|
*ppv = (IISPropertyAttribute FAR *) this;
|
|
}
|
|
else if (IsEqualIID(iid, IID_IISPropertyAttribute))
|
|
{
|
|
*ppv = (IISPropertyAttribute FAR *) this;
|
|
}
|
|
else if (IsEqualIID(iid, IID_IDispatch))
|
|
{
|
|
*ppv = (IISPropertyAttribute FAR *) this;
|
|
}
|
|
else
|
|
{
|
|
*ppv = NULL;
|
|
return E_NOINTERFACE;
|
|
}
|
|
AddRef();
|
|
return NOERROR;
|
|
}
|
|
|
|
|
|
HRESULT
|
|
CPropertyAttribute::InitFromRawData(
|
|
LPWSTR pszName,
|
|
DWORD dwMetaId,
|
|
DWORD dwUserType,
|
|
DWORD dwAttribute,
|
|
VARIANT *pvVal
|
|
)
|
|
{
|
|
wcscpy((LPWSTR)_wcName, pszName);
|
|
_lMetaId = (long) dwMetaId;
|
|
_lUserType = (long) dwUserType;
|
|
_lAllAttributes = (long) dwAttribute;
|
|
_bInherit = dwAttribute & METADATA_INHERIT;
|
|
_bPartialPath = dwAttribute & METADATA_PARTIAL_PATH;
|
|
_bSecure = dwAttribute & METADATA_SECURE;
|
|
_bReference = dwAttribute & METADATA_REFERENCE;
|
|
_bVolatile = dwAttribute & METADATA_VOLATILE;
|
|
_bIsinherit = dwAttribute & METADATA_ISINHERITED;
|
|
_bInsertPath = dwAttribute & METADATA_INSERT_PATH;
|
|
VariantCopy(&_vDefault, pvVal);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT
|
|
CPropertyAttribute::AllocatePropertyAttributeObject(
|
|
CPropertyAttribute ** ppPropertyAttribute
|
|
)
|
|
{
|
|
CPropertyAttribute FAR * pPropertyAttribute = NULL;
|
|
CAggregatorDispMgr FAR * pDispMgr = NULL;
|
|
HRESULT hr = S_OK;
|
|
|
|
pPropertyAttribute = new CPropertyAttribute();
|
|
if (pPropertyAttribute == NULL) {
|
|
hr = E_OUTOFMEMORY;
|
|
}
|
|
BAIL_ON_FAILURE(hr);
|
|
|
|
pDispMgr = new CAggregatorDispMgr;
|
|
if (pDispMgr == NULL) {
|
|
hr = E_OUTOFMEMORY;
|
|
}
|
|
BAIL_ON_FAILURE(hr);
|
|
|
|
hr = pDispMgr->LoadTypeInfoEntry(
|
|
LIBID_IISOle,
|
|
IID_IISPropertyAttribute,
|
|
(IISPropertyAttribute *)pPropertyAttribute,
|
|
DISPID_REGULAR
|
|
);
|
|
BAIL_ON_FAILURE(hr);
|
|
|
|
pPropertyAttribute->_pDispMgr = pDispMgr;
|
|
*ppPropertyAttribute = pPropertyAttribute;
|
|
|
|
RRETURN(hr);
|
|
|
|
error:
|
|
|
|
delete pDispMgr;
|
|
|
|
RRETURN(hr);
|
|
|
|
}
|
|
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::get_PropName(THIS_ BSTR FAR * retval)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
|
|
hr = ADsAllocString((LPWSTR)_wcName, retval);
|
|
RRETURN(hr);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::get_MetaId(THIS_ LONG FAR * retval)
|
|
{
|
|
*retval = _lMetaId;
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::put_MetaId(THIS_ LONG lMetaId)
|
|
{
|
|
RRETURN(E_ADS_PROPERTY_NOT_SET);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::get_UserType(THIS_ LONG FAR * retval)
|
|
{
|
|
*retval = _lUserType;
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::put_UserType(THIS_ LONG lUserType)
|
|
{
|
|
_lUserType = lUserType;
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::get_AllAttributes(THIS_ LONG FAR * retval)
|
|
{
|
|
*retval = _lAllAttributes;
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::get_Inherit(THIS_ VARIANT_BOOL FAR * retval)
|
|
{
|
|
*retval = _bInherit ? VARIANT_TRUE : VARIANT_FALSE;
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::put_Inherit(THIS_ VARIANT_BOOL bInherit)
|
|
{
|
|
_bInherit = bInherit ? TRUE : FALSE;
|
|
_lAllAttributes |= (_bInherit ? METADATA_INHERIT : 0);
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::get_PartialPath(THIS_ VARIANT_BOOL FAR * retval)
|
|
{
|
|
*retval = _bPartialPath ? VARIANT_TRUE : VARIANT_FALSE;
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::put_PartialPath(THIS_ VARIANT_BOOL bPartialPath)
|
|
{
|
|
_bPartialPath = bPartialPath ? TRUE : FALSE;
|
|
_lAllAttributes |= (_bPartialPath ? METADATA_PARTIAL_PATH : 0);
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::get_Reference(THIS_ VARIANT_BOOL FAR * retval)
|
|
{
|
|
*retval = _bReference ? VARIANT_TRUE : VARIANT_FALSE;
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::put_Reference(THIS_ VARIANT_BOOL bReference)
|
|
{
|
|
_bReference = bReference ? TRUE : FALSE;
|
|
_lAllAttributes |= (_bReference ? METADATA_REFERENCE : 0);
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::get_Secure(THIS_ VARIANT_BOOL FAR * retval)
|
|
{
|
|
*retval = _bSecure ? VARIANT_TRUE : VARIANT_FALSE;
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::put_Secure(THIS_ VARIANT_BOOL bSecure)
|
|
{
|
|
_bSecure = bSecure ? TRUE : FALSE;
|
|
_lAllAttributes |= (_bSecure ? METADATA_SECURE : 0);
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::get_Volatile(THIS_ VARIANT_BOOL FAR * retval)
|
|
{
|
|
*retval = _bVolatile ? VARIANT_TRUE : VARIANT_FALSE;
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::put_Volatile(THIS_ VARIANT_BOOL bVolatile)
|
|
{
|
|
_bVolatile = bVolatile ? TRUE : FALSE;
|
|
_lAllAttributes |= (_bVolatile ? METADATA_VOLATILE : 0);
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::get_Isinherit(THIS_ VARIANT_BOOL FAR * retval)
|
|
{
|
|
*retval = _bIsinherit ? VARIANT_TRUE : VARIANT_FALSE;
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::put_Isinherit(THIS_ VARIANT_BOOL bIsinherit)
|
|
{
|
|
_bIsinherit = bIsinherit ? TRUE : FALSE;
|
|
_lAllAttributes |= (_bIsinherit ? METADATA_ISINHERITED : 0);
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::get_InsertPath(THIS_ VARIANT_BOOL FAR * retval)
|
|
{
|
|
*retval = _bInsertPath ? VARIANT_TRUE : VARIANT_FALSE;
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::put_InsertPath(THIS_ VARIANT_BOOL bInsertPath)
|
|
{
|
|
_bInsertPath = bInsertPath ? TRUE : FALSE;
|
|
_lAllAttributes |= (_bInsertPath ? METADATA_INSERT_PATH : 0);
|
|
RRETURN(S_OK);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::get_Default(THIS_ VARIANT FAR * retval)
|
|
{
|
|
VariantInit(retval);
|
|
RRETURN(VariantCopy(retval, &_vDefault));
|
|
}
|
|
|
|
STDMETHODIMP
|
|
CPropertyAttribute::put_Default(THIS_ VARIANT vVarDefault)
|
|
{
|
|
VariantClear(&_vDefault);
|
|
RRETURN(VariantCopy(&_vDefault, &vVarDefault));
|
|
}
|