/*++ Copyright (c) 1996 Microsoft Corporation Abstract: Adds properties to ds Author: Steve Wilson (NT) December 1996 Revision History: --*/ #include #pragma hdrstop #define VALIDATE_PTR(pPtr) \ if (!pPtr) { \ hr = E_ADS_BAD_PARAMETER;\ }\ BAIL_ON_FAILURE(hr); HRESULT put_BSTR_Property( IADs * pADsObject, BSTR bstrPropertyName, BSTR pSrcStringProperty ) { HRESULT hr; VARIANT varInputData; hr = PackString2Variant( pSrcStringProperty, &varInputData ); BAIL_ON_FAILURE(hr); if (!pSrcStringProperty || !*pSrcStringProperty) { hr = pADsObject->PutEx( ADS_PROPERTY_CLEAR, bstrPropertyName, varInputData ); BAIL_ON_FAILURE(hr); } else { hr = pADsObject->Put( bstrPropertyName, varInputData ); BAIL_ON_FAILURE(hr); } error: VariantClear(&varInputData); return hr; } HRESULT get_BSTR_Property( IADs *pADsObject, BSTR bstrPropertyName, BSTR *ppDestStringProperty ) { HRESULT hr = S_OK; VARIANT varOutputData; VALIDATE_PTR( ppDestStringProperty ); VariantInit( &varOutputData ); hr = pADsObject->Get( bstrPropertyName, &varOutputData ); BAIL_ON_FAILURE(hr); hr = UnpackStringfromVariant( varOutputData, ppDestStringProperty ); BAIL_ON_FAILURE(hr); error: return hr; } HRESULT put_DWORD_Property( IADs *pADsObject, BSTR bstrPropertyName, DWORD *pdwSrcProperty ) { HRESULT hr = S_OK; VARIANT varInputData; if (!pdwSrcProperty) return S_OK; hr = PackDWORD2Variant( *pdwSrcProperty, &varInputData ); BAIL_ON_FAILURE(hr); hr = pADsObject->Put( bstrPropertyName, varInputData ); BAIL_ON_FAILURE(hr); error: return hr; } HRESULT get_DWORD_Property( IADs *pADsObject, BSTR bstrPropertyName, PDWORD pdwDestProperty ) { HRESULT hr = S_OK; VARIANT varOutputData; VALIDATE_PTR( pdwDestProperty ); VariantInit( &varOutputData ); hr = pADsObject->Get( bstrPropertyName, &varOutputData ); BAIL_ON_FAILURE(hr); hr = UnpackDWORDfromVariant( varOutputData, pdwDestProperty ); BAIL_ON_FAILURE(hr); error: return hr; } HRESULT put_Dispatch_Property( IADs *pADsObject, BSTR bstrPropertyName, IDispatch *pdwSrcProperty ) { HRESULT hr = S_OK; VARIANT varInputData; if (!pdwSrcProperty) return S_OK; hr = PackDispatch2Variant( pdwSrcProperty, &varInputData ); BAIL_ON_FAILURE(hr); hr = pADsObject->Put( bstrPropertyName, varInputData ); BAIL_ON_FAILURE(hr); error: return hr; } HRESULT get_Dispatch_Property( IADs *pADsObject, BSTR bstrPropertyName, IDispatch **ppDispatch ) { HRESULT hr = S_OK; VARIANT varOutputData; VariantInit( &varOutputData ); hr = pADsObject->Get( bstrPropertyName, &varOutputData ); BAIL_ON_FAILURE(hr); hr = UnpackDispatchfromVariant( varOutputData, ppDispatch ); BAIL_ON_FAILURE(hr); error: return hr; } HRESULT put_MULTISZ_Property( IADs *pADsObject, BSTR bstrPropertyName, BSTR pSrcStringProperty ) { HRESULT hr = S_OK; VARIANT var; VARIANT varInputData; BSTR pStr; BSTR *pStrArray; DWORD i; BSTR pMultiString; if (!pSrcStringProperty || !*pSrcStringProperty) pMultiString = L""; else pMultiString = pSrcStringProperty; VariantInit(&var); // Convert MULTI_SZ to string array (last element of array must be NULL) for (i = 0, pStr = pMultiString ; *pStr ; ++i, pStr += wcslen(pStr) + 1) ; if (!(pStrArray = (BSTR *) AllocSplMem((i + 1)*sizeof(BSTR)))) { hr = MAKE_HRESULT( SEVERITY_ERROR, FACILITY_WIN32, GetLastError()); BAIL_ON_FAILURE(hr); } for (i = 0, pStr = pMultiString ; *pStr ; ++i, pStr += wcslen(pStr) + 1) pStrArray[i] = pStr; pStrArray[i] = NULL; MakeVariantFromStringArray(pStrArray, &var); FreeSplMem(pStrArray); hr = PackVARIANTinVariant( var, &varInputData ); BAIL_ON_FAILURE(hr); if (!pSrcStringProperty || !*pSrcStringProperty) { hr = pADsObject->PutEx( ADS_PROPERTY_CLEAR, bstrPropertyName, varInputData ); BAIL_ON_FAILURE(hr); } else { hr = pADsObject->Put( bstrPropertyName, varInputData ); BAIL_ON_FAILURE(hr); } error: VariantClear(&var); VariantClear(&varInputData); return hr; } HRESULT put_BOOL_Property( IADs *pADsObject, BSTR bstrPropertyName, BOOL *bSrcProperty ) { HRESULT hr = S_OK; VARIANT varInputData; BOOL bVal; bVal = bSrcProperty ? *bSrcProperty : 0; hr = PackBOOL2Variant( bVal, &varInputData ); BAIL_ON_FAILURE(hr); if (!bSrcProperty) { hr = pADsObject->PutEx( ADS_PROPERTY_CLEAR, bstrPropertyName, varInputData ); BAIL_ON_FAILURE(hr); } else { hr = pADsObject->Put( bstrPropertyName, varInputData ); BAIL_ON_FAILURE(hr); } error: return hr; } HRESULT get_UI1Array_Property( IADs *pADsObject, BSTR bstrPropertyName, IID *pIID ) { HRESULT hr = S_OK; VARIANT varOutputData; VariantInit( &varOutputData ); hr = pADsObject->Get( bstrPropertyName, &varOutputData ); BAIL_ON_FAILURE(hr); hr = UI1Array2IID( varOutputData, pIID ); BAIL_ON_FAILURE(hr); error: return hr; } /* HRESULT put_LONG_Property( IADs * pADsObject, BSTR bstrPropertyName, LONG lSrcProperty ) { HRESULT hr = S_OK; VARIANT varInputData; hr = PackLONGinVariant( lSrcProperty, &varInputData ); BAIL_ON_FAILURE(hr); hr = pADsObject->Put( bstrPropertyName, varInputData ); BAIL_ON_FAILURE(hr); error: return hr; } HRESULT get_LONG_Property( IADs * pADsObject, BSTR bstrPropertyName, PLONG plDestProperty ) { HRESULT hr = S_OK; VARIANT varOutputData; VALIDATE_PTR( plDestProperty ); VariantInit( &varOutputData ); hr = pADsObject->Get( bstrPropertyName, &varOutputData ); BAIL_ON_FAILURE(hr); hr = UnpackLONGfromVariant( varOutputData, plDestProperty ); BAIL_ON_FAILURE(hr); error: return hr; } HRESULT put_DATE_Property( IADs * pADsObject, BSTR bstrPropertyName, DATE daSrcProperty ) { HRESULT hr = S_OK; VARIANT varInputData; hr = PackDATEinVariant( daSrcProperty, &varInputData ); BAIL_ON_FAILURE(hr); hr = pADsObject->Put( bstrPropertyName, varInputData ); BAIL_ON_FAILURE(hr); error: return hr; } HRESULT get_DATE_Property( IADs * pADsObject, BSTR bstrPropertyName, DATE *pdaDestProperty ) { HRESULT hr = S_OK; VARIANT varOutputData; VALIDATE_PTR( pdaDestProperty ); VariantInit( &varOutputData ); hr = pADsObject->Get( bstrPropertyName, &varOutputData ); BAIL_ON_FAILURE(hr); hr = UnpackDATEfromVariant( varOutputData, pdaDestProperty ); BAIL_ON_FAILURE(hr); error: return hr; } HRESULT put_VARIANT_BOOL_Property( IADs * pADsObject, BSTR bstrPropertyName, VARIANT_BOOL fSrcProperty ) { HRESULT hr = S_OK; VARIANT varInputData; hr = PackVARIANT_BOOLinVariant( fSrcProperty, &varInputData ); BAIL_ON_FAILURE(hr); hr = pADsObject->Put( bstrPropertyName, varInputData ); BAIL_ON_FAILURE(hr); error: return hr; } HRESULT get_VARIANT_BOOL_Property( IADs * pADsObject, BSTR bstrPropertyName, VARIANT_BOOL *pfDestProperty ) { HRESULT hr = S_OK; VARIANT varOutputData; VALIDATE_PTR( pfDestProperty ); VariantInit( &varOutputData ); hr = pADsObject->Get( bstrPropertyName, &varOutputData ); BAIL_ON_FAILURE(hr); hr = UnpackVARIANT_BOOLfromVariant( varOutputData, pfDestProperty ); BAIL_ON_FAILURE(hr); error: return hr; } HRESULT get_VARIANT_Property( IADs * pADsObject, BSTR bstrPropertyName, VARIANT *pvDestProperty ) { HRESULT hr = S_OK; VARIANT varOutputData; VALIDATE_PTR( pvDestProperty ); VariantInit( &varOutputData ); hr = pADsObject->Get( bstrPropertyName, &varOutputData ); BAIL_ON_FAILURE(hr); hr = UnpackVARIANTfromVariant( varOutputData, pvDestProperty ); BAIL_ON_FAILURE(hr); error: return hr; } */