HRESULT MODSECURITY_STORED_CONTEXT::GetStringPropertyValue( IAppHostElement* pElement, WCHAR* pszPropertyName, IAppHostPropertyException** pException, WCHAR** ppszValue ) { HRESULT hr = S_OK; IAppHostProperty *pProperty = NULL; DWORD dwLength; VARIANT vPropertyValue; if ( ( pElement == NULL ) || ( pszPropertyName == NULL ) || ( pException == NULL ) || ( ppszValue == NULL ) ) { hr = E_INVALIDARG; goto Failure; } *ppszValue = NULL; // Get the property object for the string attribute: hr = pElement->GetPropertyByName( pszPropertyName, &pProperty ); if ( FAILED( hr ) ) { goto Failure; } if ( pProperty == NULL ) { hr = E_UNEXPECTED; goto Failure; } // Get the attribute value: VariantInit( &vPropertyValue ); hr = pProperty->get_Value( &vPropertyValue ); if ( FAILED( hr ) ) { goto Failure; } // See it there is an exception that might be due to the actual value in the // config not meeting validation criteria *pException = NULL; hr = pProperty->get_Exception( pException ); if ( FAILED( hr ) ) { goto Failure; } // No need to continue if we got an exception... if ( ( *pException ) != NULL ) { goto Failure; } // Finally, get the value: dwLength = SysStringLen( vPropertyValue.bstrVal ); *ppszValue = new WCHAR[ dwLength + 1 ]; if ( (*ppszValue) == NULL ) { hr = E_OUTOFMEMORY; goto Failure; } wcsncpy( *ppszValue, vPropertyValue.bstrVal, dwLength ); (*ppszValue)[ dwLength ] = L'\0'; Failure: VariantClear( &vPropertyValue ); if ( pProperty != NULL ) { pProperty->Release(); pProperty = NULL; } return hr; }
HRESULT MODSECURITY_STORED_CONTEXT::GetTimeSpanPropertyValue( IAppHostElement* pElement, WCHAR* pszPropertyName, IAppHostPropertyException** pException, ULONGLONG* pnValue ) { HRESULT hr = S_OK; IAppHostProperty *pProperty = NULL; VARIANT vPropertyValue; if ( ( pElement == NULL ) || ( pszPropertyName == NULL ) || ( pException == NULL ) || ( pnValue == NULL ) ) { hr = E_INVALIDARG; goto Failure; } // Get the property object for the INT attribute: hr = pElement->GetPropertyByName( pszPropertyName, &pProperty ); if ( FAILED( hr ) ) { goto Failure; } if ( pProperty == NULL ) { hr = E_UNEXPECTED; goto Failure; } // Get the attribute value: VariantInit( &vPropertyValue ); hr = pProperty->get_Value( &vPropertyValue ); if ( FAILED( hr ) ) { goto Failure; } // See it there is an exception that might be due to the actual value in the // config not meeting validation criteria *pException = NULL; hr = pProperty->get_Exception( pException ); if ( FAILED( hr ) ) { goto Failure; } // No need to continue if we got an exception... if ( ( *pException ) != NULL ) { goto Failure; } // Finally, get the value: *pnValue = vPropertyValue.ullVal; Failure: VariantClear( &vPropertyValue ); if ( pProperty != NULL ) { pProperty->Release(); pProperty = NULL; } return hr; }