258 lines
4.5 KiB
C++
258 lines
4.5 KiB
C++
//
|
|
// Copyright 1997-199 - Microsoft Corporation
|
|
//
|
|
|
|
//
|
|
// QUERYPB.CPP - Property Bag for sending arguments to the DSFind Query Form
|
|
//
|
|
|
|
#include "pch.h"
|
|
|
|
#include "querypb.h"
|
|
|
|
DEFINE_MODULE("IMADMUI")
|
|
DEFINE_THISCLASS("QueryPropertyBag")
|
|
#define THISCLASS QueryPropertyBag
|
|
#define LPTHISCLASS LPQUERYPROPERTYBAG
|
|
|
|
//
|
|
// QueryPropertyBag_CreateInstance( )
|
|
//
|
|
LPVOID
|
|
QueryPropertyBag_CreateInstance( void )
|
|
{
|
|
TraceFunc( "QueryPropertyBag_CreateInstance()\n" );
|
|
|
|
LPTHISCLASS lpcc = new THISCLASS( );
|
|
if ( !lpcc ) {
|
|
RETURN(lpcc);
|
|
}
|
|
|
|
HRESULT hr = THR( lpcc->Init( ) );
|
|
if ( hr )
|
|
{
|
|
delete lpcc;
|
|
RETURN(NULL);
|
|
}
|
|
|
|
RETURN(lpcc);
|
|
}
|
|
|
|
//
|
|
// Constructor
|
|
//
|
|
THISCLASS::THISCLASS( )
|
|
{
|
|
TraceClsFunc( "QueryPropertyBag( )\n" );
|
|
|
|
InterlockIncrement( g_cObjects );
|
|
|
|
TraceFuncExit();
|
|
}
|
|
|
|
//
|
|
// Init( )
|
|
//
|
|
HRESULT
|
|
THISCLASS::Init( )
|
|
{
|
|
TraceClsFunc( "Init( )\n" );
|
|
|
|
HRESULT hr = S_OK;
|
|
|
|
// IUnknown stuff
|
|
BEGIN_QITABLE_IMP( QueryPropertyBag, IPropertyBag );
|
|
QITABLE_IMP( IPropertyBag );
|
|
END_QITABLE_IMP( QueryPropertyBag );
|
|
Assert( _cRef == 0);
|
|
AddRef( );
|
|
|
|
Assert( !_pszServerName );
|
|
Assert( !_pszClientGuid );
|
|
|
|
HRETURN(hr);
|
|
}
|
|
|
|
//
|
|
// Destructor
|
|
//
|
|
THISCLASS::~THISCLASS( )
|
|
{
|
|
TraceClsFunc( "~QueryPropertyBag( )\n" );
|
|
|
|
if ( _pszServerName )
|
|
TraceFree( _pszServerName );
|
|
|
|
if ( _pszClientGuid )
|
|
TraceFree( _pszClientGuid );
|
|
|
|
InterlockDecrement( g_cObjects );
|
|
|
|
TraceFuncExit();
|
|
}
|
|
|
|
// ************************************************************************
|
|
//
|
|
// IUnknown
|
|
//
|
|
// ************************************************************************
|
|
|
|
//
|
|
// QueryInterface()
|
|
//
|
|
STDMETHODIMP
|
|
THISCLASS::QueryInterface(
|
|
REFIID riid,
|
|
LPVOID *ppv )
|
|
{
|
|
TraceClsFunc( "" );
|
|
|
|
HRESULT hr = ::QueryInterface( this, _QITable, riid, ppv );
|
|
|
|
QIRETURN( hr, riid );
|
|
}
|
|
|
|
//
|
|
// AddRef()
|
|
//
|
|
STDMETHODIMP_(ULONG)
|
|
THISCLASS::AddRef( void )
|
|
{
|
|
TraceClsFunc( "[IUnknown] AddRef( )\n" );
|
|
|
|
InterlockIncrement( _cRef );
|
|
|
|
RETURN(_cRef);
|
|
}
|
|
|
|
//
|
|
// Release()
|
|
//
|
|
STDMETHODIMP_(ULONG)
|
|
THISCLASS::Release( void )
|
|
{
|
|
TraceClsFunc( "[IUnknown] Release( )\n" );
|
|
|
|
InterlockDecrement( _cRef );
|
|
|
|
if ( _cRef )
|
|
RETURN(_cRef);
|
|
|
|
TraceDo( delete this );
|
|
|
|
RETURN(0);
|
|
}
|
|
|
|
// ************************************************************************
|
|
//
|
|
// IQueryForm
|
|
//
|
|
// ************************************************************************
|
|
|
|
STDMETHODIMP
|
|
THISCLASS::Read(
|
|
LPCOLESTR pszPropName,
|
|
VARIANT *pVar,
|
|
IErrorLog *pErrorLog )
|
|
{
|
|
TraceClsFunc("Read( )\n" );
|
|
|
|
HRESULT hr;
|
|
|
|
if ( !pszPropName || !pVar )
|
|
HRETURN(E_POINTER);
|
|
|
|
if ( V_VT( pVar ) != VT_EMPTY )
|
|
HRETURN(OLE_E_CANTCONVERT);
|
|
|
|
if ( StrCmpI( pszPropName, L"ServerName" ) == 0 )
|
|
{
|
|
if ( !_pszServerName )
|
|
{
|
|
hr = HRESULT_FROM_WIN32( ERROR_NOT_FOUND );
|
|
}
|
|
else
|
|
{
|
|
V_VT( pVar ) = VT_BSTR;
|
|
V_BSTR( pVar ) = SysAllocString( _pszServerName );
|
|
hr = S_OK;
|
|
}
|
|
}
|
|
else if ( StrCmpI( pszPropName, L"ClientGuid" ) == 0 )
|
|
{
|
|
if ( !_pszClientGuid )
|
|
{
|
|
hr = HRESULT_FROM_WIN32( ERROR_NOT_FOUND );
|
|
}
|
|
else
|
|
{
|
|
V_VT( pVar ) = VT_BSTR;
|
|
V_BSTR( pVar ) = SysAllocString( _pszClientGuid );
|
|
hr = S_OK;
|
|
}
|
|
}
|
|
else
|
|
{ // something unexpected came in
|
|
hr = THR(E_INVALIDARG);
|
|
}
|
|
|
|
HRETURN(hr);
|
|
}
|
|
|
|
STDMETHODIMP
|
|
THISCLASS::Write(
|
|
LPCOLESTR pszPropName,
|
|
VARIANT *pVar )
|
|
{
|
|
TraceClsFunc("Write( )\n" );
|
|
|
|
HRESULT hr;
|
|
|
|
if ( !pszPropName || !pVar )
|
|
HRETURN(E_POINTER);
|
|
|
|
if ( V_VT( pVar ) != VT_BSTR )
|
|
HRETURN(OLE_E_CANTCONVERT);
|
|
|
|
if ( StrCmpI( pszPropName, L"ServerName" ) == 0 )
|
|
{
|
|
if ( _pszServerName )
|
|
{
|
|
TraceFree( _pszServerName );
|
|
}
|
|
|
|
_pszServerName = TraceStrDup( V_BSTR( pVar ) );
|
|
if ( _pszServerName )
|
|
{
|
|
hr = S_OK;
|
|
}
|
|
else
|
|
{
|
|
hr = E_OUTOFMEMORY;
|
|
}
|
|
}
|
|
else if ( StrCmpI( pszPropName, L"ClientGuid" ) == 0 )
|
|
{
|
|
if ( _pszClientGuid )
|
|
{
|
|
TraceFree( _pszClientGuid );
|
|
}
|
|
|
|
_pszClientGuid = TraceStrDup( V_BSTR( pVar) );
|
|
if ( _pszClientGuid )
|
|
{
|
|
hr = S_OK;
|
|
}
|
|
else
|
|
{
|
|
hr = E_OUTOFMEMORY;
|
|
}
|
|
}
|
|
else
|
|
{ // something unexpected came in
|
|
hr = THR(E_INVALIDARG);
|
|
}
|
|
|
|
HRETURN(hr);
|
|
}
|