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

420 lines
11 KiB
C++

/******************************************************************************
Copyright (c) 1999 Microsoft Corporation
Module Name:
ISAPIprovider.cpp
Abstract:
This file contains the implementation of the CISAPIprovider 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"
static const WCHAR text_FINAL_DESTINATIONS[] = L"FINAL_DESTINATIONS";
static const WCHAR text_MAX_JOBS_PER_DAY [] = L"MAX_JOBS_PER_DAY" ;
static const WCHAR text_MAX_BYTES_PER_DAY [] = L"MAX_BYTES_PER_DAY" ;
static const WCHAR text_MAX_JOB_SIZE [] = L"MAX_JOB_SIZE" ;
static const WCHAR text_AUTHENTICATED [] = L"AUTHENTICATED" ;
static const WCHAR text_PROCESSING_MODE [] = L"PROCESSING_MODE" ;
static const WCHAR text_LOGON_URL [] = L"LOGON_URL" ;
static const WCHAR text_PROVIDER_CLASS [] = L"PROVIDER_CLASS" ;
CISAPIprovider::CISAPIprovider()
{
__ULT_FUNC_ENTRY( "CISAPIprovider::CISAPIprovider" );
// MPC::wstring m_szName;
//
// PathList m_lstFinalDestinations;
//
m_dwMaxJobsPerDay = 100; // DWORD m_dwMaxJobsPerDay;
m_dwMaxBytesPerDay = 10*1024*1024; // DWORD m_dwMaxBytesPerDay;
m_dwMaxJobSize = 2*1024*1024; // DWORD m_dwMaxJobSize;
//
m_fAuthenticated = FALSE; // BOOL m_fAuthenticated;
m_fProcessingMode = 0; // DWORD m_fProcessingMode;
//
// MPC::wstring m_szLogonURL;
// MPC::wstring m_szProviderGUID;
}
CISAPIprovider::CISAPIprovider( /*[in]*/ MPC::wstring szName )
{
__ULT_FUNC_ENTRY( "CISAPIprovider::CISAPIprovider" );
m_szName = szName; // MPC::wstring m_szName;
//
// PathList m_lstFinalDestinations;
//
m_dwMaxJobsPerDay = 100; // DWORD m_dwMaxJobsPerDay;
m_dwMaxBytesPerDay = 10*1024*1024; // DWORD m_dwMaxBytesPerDay;
m_dwMaxJobSize = 2*1024*1024; // DWORD m_dwMaxJobSize;
//
m_fAuthenticated = FALSE; // BOOL m_fAuthenticated;
m_fProcessingMode = 0; // DWORD m_fProcessingMode;
//
// MPC::wstring m_szLogonURL;
// MPC::wstring m_szProviderGUID;
}
bool CISAPIprovider::operator==( /*[in]*/ const MPC::wstring& rhs )
{
__ULT_FUNC_ENTRY("CISAPIprovider::operator==");
MPC::NocaseCompare cmp;
bool fRes;
fRes = cmp( m_szName, rhs );
__ULT_FUNC_EXIT(fRes);
}
/////////////////////////////////////////////////////////////////////////////
HRESULT CISAPIprovider::Load( /*[in]*/ MPC::RegKey& rkBase )
{
__ULT_FUNC_ENTRY( "CISAPIprovider::Load" );
HRESULT hr;
MPC::RegKey rkRoot;
CComVariant vValue;
bool fFound;
m_lstFinalDestinations.clear();
//
// If the registry key doesn't exist, simply exit.
//
__MPC_EXIT_IF_METHOD_FAILS(hr, rkBase.SubKey( m_szName.c_str(), rkRoot ));
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.Exists( fFound ));
if(fFound == false)
{
__MPC_SET_ERROR_AND_EXIT(hr, S_OK);
}
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.get_Value( vValue, fFound, text_MAX_JOBS_PER_DAY ));
if(fFound && vValue.vt == VT_I4) m_dwMaxJobsPerDay = vValue.lVal;
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.get_Value( vValue, fFound, text_MAX_BYTES_PER_DAY ));
if(fFound && vValue.vt == VT_I4) m_dwMaxBytesPerDay = vValue.lVal;
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.get_Value( vValue, fFound, text_MAX_JOB_SIZE ));
if(fFound && vValue.vt == VT_I4) m_dwMaxJobSize = vValue.lVal;
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.get_Value( vValue, fFound, text_AUTHENTICATED ));
if(fFound && vValue.vt == VT_I4) m_fAuthenticated = vValue.lVal;
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.get_Value( vValue, fFound, text_PROCESSING_MODE ));
if(fFound && vValue.vt == VT_I4) m_fProcessingMode = vValue.lVal;
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.get_Value( vValue, fFound, text_LOGON_URL ));
if(fFound && vValue.vt == VT_BSTR) m_szLogonURL = SAFEBSTR( vValue.bstrVal );
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.get_Value( vValue, fFound, text_PROVIDER_CLASS ));
if(fFound && vValue.vt == VT_BSTR) m_szProviderGUID = SAFEBSTR( vValue.bstrVal );
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.get_Value( vValue, fFound, text_FINAL_DESTINATIONS ));
if(fFound && vValue.vt == VT_BSTR)
{
//
// Split the registry value, a semicolon-separated list of paths, into individual paths.
//
MPC::wstring szFinalDestinations = SAFEBSTR( vValue.bstrVal );
MPC::wstring::size_type iPos = 0;
MPC::wstring::size_type iEnd;
while(1)
{
iEnd = szFinalDestinations.find( L";", iPos );
if(iEnd == MPC::string::npos) // Last component.
{
m_lstFinalDestinations.push_back( MPC::wstring( &szFinalDestinations[iPos] ) );
break;
}
else
{
m_lstFinalDestinations.push_back( MPC::wstring( &szFinalDestinations[iPos], &szFinalDestinations[iEnd] ) );
iPos = iEnd+1;
}
}
}
hr = S_OK;
__ULT_FUNC_CLEANUP;
__ULT_FUNC_EXIT(hr);
}
HRESULT CISAPIprovider::Save( /*[in]*/ MPC::RegKey& rkBase )
{
__ULT_FUNC_ENTRY( "CISAPIProvider::Save" );
HRESULT hr;
MPC::RegKey rkRoot;
CComVariant vValue;
__MPC_EXIT_IF_METHOD_FAILS(hr, rkBase.SubKey( m_szName.c_str(), rkRoot ));
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.Create( ));
vValue = (long)m_dwMaxJobsPerDay;
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.put_Value( vValue, text_MAX_JOBS_PER_DAY ));
vValue = (long)m_dwMaxBytesPerDay;
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.put_Value( vValue, text_MAX_BYTES_PER_DAY ));
vValue = (long)m_dwMaxJobSize;
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.put_Value( vValue, text_MAX_JOB_SIZE ));
vValue = (long)m_fAuthenticated;
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.put_Value( vValue, text_AUTHENTICATED ));
vValue = (long)m_fProcessingMode;
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.put_Value( vValue, text_PROCESSING_MODE ));
vValue = m_szLogonURL.c_str();
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.put_Value( vValue, text_LOGON_URL ));
vValue = m_szProviderGUID.c_str();
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.put_Value( vValue, text_PROVIDER_CLASS ));
{
MPC::wstring szFinalDestinations;
PathIter it = m_lstFinalDestinations.begin();
while(it != m_lstFinalDestinations.end())
{
szFinalDestinations.append( *it++ );
if(it != m_lstFinalDestinations.end()) szFinalDestinations.append( L";" );
}
if(szFinalDestinations.length() != 0)
{
vValue = szFinalDestinations.c_str();
__MPC_EXIT_IF_METHOD_FAILS(hr, rkRoot.put_Value( vValue, text_FINAL_DESTINATIONS ));
}
}
hr = S_OK;
__ULT_FUNC_CLEANUP;
__ULT_FUNC_EXIT(hr);
}
/////////////////////////////////////////////////////////////////////////////
HRESULT CISAPIprovider::GetLocations( /*[out]*/ PathIter& itBegin ,
/*[out]*/ PathIter& itEnd )
{
__ULT_FUNC_ENTRY( "CISAPIprovider::GetLocations" );
HRESULT hr;
itBegin = m_lstFinalDestinations.begin();
itEnd = m_lstFinalDestinations.end ();
hr = S_OK;
__ULT_FUNC_EXIT(hr);
}
HRESULT CISAPIprovider::NewLocation( /*[out]*/ PathIter& itNew ,
/*[in] */ const MPC::wstring& szPath )
{
__ULT_FUNC_ENTRY( "CISAPIprovider::NewLocation" );
HRESULT hr;
bool fFound;
__MPC_EXIT_IF_METHOD_FAILS(hr, GetLocation( itNew, fFound, szPath ));
if(fFound == false)
{
itNew = m_lstFinalDestinations.insert( m_lstFinalDestinations.end(), szPath );
}
hr = S_OK;
__ULT_FUNC_CLEANUP;
__ULT_FUNC_EXIT(hr);
}
HRESULT CISAPIprovider::GetLocation( /*[out]*/ PathIter& itOld ,
/*[out]*/ bool& fFound ,
/*[in] */ const MPC::wstring& szPath )
{
__ULT_FUNC_ENTRY( "CISAPIprovider::GetLocation" );
HRESULT hr;
itOld = std::find( m_lstFinalDestinations.begin(), m_lstFinalDestinations.end(), szPath );
if(itOld == m_lstFinalDestinations.end())
{
fFound = false;
}
else
{
fFound = true;
}
hr = S_OK;
__ULT_FUNC_EXIT(hr);
}
HRESULT CISAPIprovider::DelLocation( /*[in]*/ PathIter& itOld )
{
__ULT_FUNC_ENTRY( "CISAPIprovider::DelLocation" );
HRESULT hr;
m_lstFinalDestinations.erase( itOld );
hr = S_OK;
__ULT_FUNC_EXIT(hr);
}
/////////////////////////////////////////////////////////////////////////////
HRESULT CISAPIprovider::get_Name( /*[out]*/ MPC::wstring& szName )
{
szName = m_szName;
return S_OK;
}
HRESULT CISAPIprovider::get_MaxJobsPerDay( /*[out]*/ DWORD& dwMaxJobsPerDay )
{
dwMaxJobsPerDay = m_dwMaxJobsPerDay;
return S_OK;
}
HRESULT CISAPIprovider::get_MaxBytesPerDay( /*[out]*/ DWORD& dwMaxBytesPerDay )
{
dwMaxBytesPerDay = m_dwMaxBytesPerDay;
return S_OK;
}
HRESULT CISAPIprovider::get_MaxJobSize( /*[out]*/ DWORD& dwMaxJobSize )
{
dwMaxJobSize = m_dwMaxJobSize;
return S_OK;
}
HRESULT CISAPIprovider::get_Authenticated( /*[out]*/ BOOL& fAuthenticated )
{
fAuthenticated = m_fAuthenticated;
return S_OK;
}
HRESULT CISAPIprovider::get_ProcessingMode( /*[out]*/ DWORD& fProcessingMode )
{
fProcessingMode = m_fProcessingMode;
return S_OK;
}
HRESULT CISAPIprovider::get_LogonURL( /*[out]*/ MPC::wstring& szLogonURL )
{
szLogonURL = m_szLogonURL;
return S_OK;
}
HRESULT CISAPIprovider::get_ProviderGUID( /*[out]*/ MPC::wstring& szProviderGUID )
{
szProviderGUID = m_szProviderGUID;
return S_OK;
}
////////////////////////////////////////
HRESULT CISAPIprovider::put_MaxJobsPerDay( /*[in]*/ DWORD dwMaxJobsPerDay )
{
m_dwMaxJobsPerDay = dwMaxJobsPerDay;
return S_OK;
}
HRESULT CISAPIprovider::put_MaxBytesPerDay( /*[in]*/ DWORD dwMaxBytesPerDay )
{
m_dwMaxBytesPerDay = dwMaxBytesPerDay;
return S_OK;
}
HRESULT CISAPIprovider::put_MaxJobSize( /*[in]*/ DWORD dwMaxJobSize )
{
m_dwMaxJobSize = dwMaxJobSize;
return S_OK;
}
HRESULT CISAPIprovider::put_Authenticated( /*[in]*/ BOOL fAuthenticated )
{
m_fAuthenticated = fAuthenticated;
return S_OK;
}
HRESULT CISAPIprovider::put_ProcessingMode( /*[in]*/ DWORD fProcessingMode )
{
m_fProcessingMode = fProcessingMode;
return S_OK;
}
HRESULT CISAPIprovider::put_LogonURL( /*[in]*/ const MPC::wstring& szLogonURL )
{
m_szLogonURL = szLogonURL;
return S_OK;
}
HRESULT CISAPIprovider::put_ProviderGUID( /*[in]*/ const MPC::wstring& szProviderGUID )
{
m_szProviderGUID = szProviderGUID;
return S_OK;
}