/****************************************************************************** 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); }