Leaked source code of windows server 2003
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.
 
 
 
 
 
 

252 lines
5.2 KiB

//
// 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 ( FAILED(hr) ) {
delete lpcc;
RETURN(NULL);
}
RETURN(lpcc);
}
//
// Constructor
//
THISCLASS::THISCLASS( )
{
TraceClsFunc( "QueryPropertyBag( )\n" );
InterlockIncrement( g_cObjects );
_pszServerName = NULL;
_pszClientGuid = NULL;
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 ( _wcsicmp( pszPropName, L"ServerName" ) == 0 ) {
if ( !_pszServerName ) {
hr = HRESULT_FROM_WIN32( ERROR_NOT_FOUND );
} else {
BSTR tmp = SysAllocString( _pszServerName );
if (!tmp) {
hr = E_OUTOFMEMORY;
} else {
V_VT( pVar ) = VT_BSTR;
V_BSTR( pVar ) = tmp;
hr = S_OK;
}
}
} else if ( _wcsicmp( pszPropName, L"ClientGuid" ) == 0 ) {
if ( !_pszClientGuid ) {
hr = HRESULT_FROM_WIN32( ERROR_NOT_FOUND );
} else {
BSTR tmp = SysAllocString( _pszClientGuid );
if (!tmp) {
hr = E_OUTOFMEMORY;
} else {
V_VT( pVar ) = VT_BSTR;
V_BSTR( pVar ) = tmp;
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 ( _wcsicmp( pszPropName, L"ServerName" ) == 0 ) {
PWSTR tmp = TraceStrDup( V_BSTR( pVar ) );
if (tmp) {
if ( _pszServerName ) {
TraceFree( _pszServerName );
_pszServerName = NULL;
}
_pszServerName = tmp;
hr = S_OK;
} else {
hr = E_OUTOFMEMORY;
}
} else if ( _wcsicmp( pszPropName, L"ClientGuid" ) == 0 ) {
PWSTR tmp = TraceStrDup( V_BSTR( pVar ) );
if (tmp) {
if ( _pszClientGuid ) {
TraceFree( _pszClientGuid );
_pszClientGuid = NULL;
}
_pszClientGuid = tmp;
hr = S_OK;
} else {
hr = E_OUTOFMEMORY;
}
} else { // something unexpected came in
hr = THR(E_INVALIDARG);
}
HRETURN(hr);
}