264 lines
5.2 KiB
C++
264 lines
5.2 KiB
C++
/******************************************************************************
|
|
|
|
Copyright (c) 1999 Microsoft Corporation
|
|
|
|
Module Name:
|
|
ISAPIconfig.cpp
|
|
|
|
Abstract:
|
|
This file contains the implementation of the CISAPIconfig class,
|
|
the support class for accessing and modifying the configuration of the
|
|
ISAPI extension used by the Upload Library.
|
|
|
|
Revision History:
|
|
Davide Massarenti (Dmassare) 04/28/99
|
|
created
|
|
|
|
******************************************************************************/
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
CISAPIconfig::CISAPIconfig()
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIconfig::CISAPIconfig" );
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
HRESULT CISAPIconfig::ConnectToRegistry( /*[out]*/ MPC::RegKey& rkRoot ,
|
|
/*[in] */ bool fWriteAccess )
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIconfig::ConnectToRegistry" );
|
|
|
|
_ASSERT(m_szRoot.length() != 0);
|
|
|
|
HRESULT hr;
|
|
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.SetRoot( HKEY_LOCAL_MACHINE, fWriteAccess ? KEY_ALL_ACCESS : KEY_READ, m_szMachine.c_str() ));
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.Attach( m_szRoot.c_str() ));
|
|
|
|
|
|
hr = S_OK;
|
|
|
|
|
|
__ULT_FUNC_CLEANUP;
|
|
|
|
__ULT_FUNC_EXIT(hr);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
HRESULT CISAPIconfig::SetRoot( /*[in]*/ LPCWSTR szRoot ,
|
|
/*[in]*/ LPCWSTR szMachine )
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIconfig::SetRoot" );
|
|
|
|
|
|
m_szRoot = szRoot;
|
|
|
|
if(szMachine)
|
|
{
|
|
m_szMachine = szMachine;
|
|
}
|
|
|
|
|
|
__ULT_FUNC_EXIT(S_OK);
|
|
}
|
|
|
|
|
|
HRESULT CISAPIconfig::Install()
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIconfig::Install" );
|
|
|
|
HRESULT hr;
|
|
MPC::RegKey rkRoot;
|
|
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, ConnectToRegistry( rkRoot, true ));
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.Create());
|
|
|
|
hr = S_OK;
|
|
|
|
|
|
__ULT_FUNC_CLEANUP;
|
|
|
|
__ULT_FUNC_EXIT(hr);
|
|
}
|
|
|
|
HRESULT CISAPIconfig::Uninstall()
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIconfig::Uninstall" );
|
|
|
|
HRESULT hr;
|
|
MPC::RegKey rkRoot;
|
|
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, ConnectToRegistry( rkRoot, true ));
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.Delete( true ));
|
|
|
|
hr = S_OK;
|
|
|
|
|
|
__ULT_FUNC_CLEANUP;
|
|
|
|
__ULT_FUNC_EXIT(hr);
|
|
}
|
|
|
|
|
|
HRESULT CISAPIconfig::Load()
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIconfig::Load" );
|
|
|
|
HRESULT hr;
|
|
MPC::RegKey rkRoot;
|
|
MPC::WStringList lstKeys;
|
|
MPC::WStringIter itKey;
|
|
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, ConnectToRegistry( rkRoot, false ));
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.EnumerateSubKeys( lstKeys ));
|
|
|
|
|
|
m_lstInstances.clear();
|
|
|
|
for(itKey=lstKeys.begin(); itKey != lstKeys.end(); itKey++)
|
|
{
|
|
CISAPIinstance isapiInstance( *itKey );
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, isapiInstance.Load( rkRoot ));
|
|
|
|
m_lstInstances.push_back( isapiInstance );
|
|
}
|
|
|
|
hr = S_OK;
|
|
|
|
|
|
__ULT_FUNC_CLEANUP;
|
|
|
|
__ULT_FUNC_EXIT(hr);
|
|
}
|
|
|
|
|
|
HRESULT CISAPIconfig::Save()
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIconfig::Save" );
|
|
|
|
HRESULT hr;
|
|
MPC::RegKey rkRoot;
|
|
Iter itInstance;
|
|
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, ConnectToRegistry( rkRoot, true ));
|
|
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.DeleteSubKeys());
|
|
|
|
for(itInstance=m_lstInstances.begin(); itInstance != m_lstInstances.end(); itInstance++)
|
|
{
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, (*itInstance).Save( rkRoot ));
|
|
}
|
|
|
|
hr = S_OK;
|
|
|
|
|
|
__ULT_FUNC_CLEANUP;
|
|
|
|
__ULT_FUNC_EXIT(hr);
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
HRESULT CISAPIconfig::GetInstances( /*[out]*/ Iter& itBegin ,
|
|
/*[out]*/ Iter& itEnd )
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIconfig::GetInstances" );
|
|
|
|
HRESULT hr;
|
|
|
|
|
|
itBegin = m_lstInstances.begin();
|
|
itEnd = m_lstInstances.end ();
|
|
hr = S_OK;
|
|
|
|
|
|
__ULT_FUNC_EXIT(hr);
|
|
}
|
|
|
|
HRESULT CISAPIconfig::NewInstance( /*[out]*/ Iter& itNew ,
|
|
/*[in]*/ const MPC::wstring& szURL )
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIconfig::NewInstance" );
|
|
|
|
HRESULT hr;
|
|
bool fFound;
|
|
|
|
//
|
|
// First of all, check if the given URL already exists.
|
|
//
|
|
__MPC_EXIT_IF_METHOD_FAILS(hr, GetInstance( itNew, fFound, szURL ));
|
|
if(fFound == false)
|
|
{
|
|
//
|
|
// If not, create it.
|
|
//
|
|
itNew = m_lstInstances.insert( m_lstInstances.end(), CISAPIinstance( szURL ) );
|
|
}
|
|
|
|
hr = S_OK;
|
|
|
|
|
|
__ULT_FUNC_CLEANUP;
|
|
|
|
__ULT_FUNC_EXIT(hr);
|
|
}
|
|
|
|
HRESULT CISAPIconfig::GetInstance( /*[out]*/ Iter& itOld ,
|
|
/*[out]*/ bool& fFound ,
|
|
/*[in] */ const MPC::wstring& szURL )
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIconfig::GetInstance" );
|
|
|
|
HRESULT hr;
|
|
|
|
|
|
fFound = false;
|
|
|
|
|
|
itOld = m_lstInstances.begin();
|
|
while(itOld != m_lstInstances.end())
|
|
{
|
|
if(*itOld == szURL)
|
|
{
|
|
fFound = true;
|
|
break;
|
|
}
|
|
|
|
++itOld;
|
|
}
|
|
|
|
hr = S_OK;
|
|
|
|
|
|
__ULT_FUNC_EXIT(hr);
|
|
}
|
|
|
|
HRESULT CISAPIconfig::DelInstance( /*[in]*/ Iter& itOld )
|
|
{
|
|
__ULT_FUNC_ENTRY( "CISAPIconfig::DelInstances" );
|
|
|
|
HRESULT hr;
|
|
|
|
|
|
m_lstInstances.erase( itOld );
|
|
|
|
hr = S_OK;
|
|
|
|
|
|
__ULT_FUNC_EXIT(hr);
|
|
}
|