windows-nt/Source/XPSP1/NT/admin/pchealth/upload/common/isapiconfig.cpp
2020-09-26 16:20:57 +08:00

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