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.
238 lines
5.1 KiB
238 lines
5.1 KiB
/*++
|
|
|
|
Copyright (c) 2001 Microsoft Corporation
|
|
|
|
Module Name :
|
|
|
|
funcdict.cxx
|
|
|
|
Abstract:
|
|
|
|
Class that contains all the methods used by the .inf file
|
|
|
|
Author:
|
|
|
|
Christopher Achille (cachille)
|
|
|
|
Project:
|
|
|
|
Internet Services Setup
|
|
|
|
Revision History:
|
|
|
|
June 2001: Created
|
|
|
|
--*/
|
|
|
|
#include "stdafx.h"
|
|
#include "iadm.h"
|
|
#include "iiscnfgp.h"
|
|
#include "mdkey.h"
|
|
#include "mdentry.h"
|
|
#include "metabase.hxx"
|
|
#include "reg.hxx"
|
|
#include "xmlupgrade.hxx"
|
|
#include "common.hxx"
|
|
|
|
// Constructor
|
|
//
|
|
// Initialize Everything
|
|
//
|
|
CFunctionDictionary::CFunctionDictionary()
|
|
{
|
|
m_bFunctionsLoaded = FALSE;
|
|
|
|
InitializeFunctions();
|
|
}
|
|
|
|
// Destructor
|
|
//
|
|
// Clean up memory
|
|
CFunctionDictionary::~CFunctionDictionary()
|
|
{
|
|
DeleteFunctions();
|
|
}
|
|
|
|
// function: DeleteFunctions
|
|
//
|
|
// Delete all of the functions that are defined
|
|
//
|
|
void
|
|
CFunctionDictionary::DeleteFunctions()
|
|
{
|
|
DWORD i;
|
|
|
|
// Delete all functions
|
|
for (i = 0; i < DICTIONARY_MAXFUNCTIONS; i++)
|
|
{
|
|
if ( m_pDict[i] )
|
|
{
|
|
delete (m_pDict[i]);
|
|
}
|
|
|
|
m_pDict[i] = NULL;
|
|
}
|
|
|
|
m_dwFunctions = 0;
|
|
m_bFunctionsLoaded = FALSE;
|
|
}
|
|
|
|
// function: InitializeFunction
|
|
//
|
|
// Initiliaze all of the functions to NULL
|
|
//
|
|
void
|
|
CFunctionDictionary::InitializeFunctions()
|
|
{
|
|
DWORD i;
|
|
|
|
m_dwFunctions = 0;
|
|
|
|
// Initialize all to NULL
|
|
for (i = 0; i < DICTIONARY_MAXFUNCTIONS; i++)
|
|
{
|
|
m_pDict[i] = NULL;
|
|
}
|
|
}
|
|
|
|
// function: LoadFunction
|
|
//
|
|
// Loads all of the functions that we know about into our list
|
|
//
|
|
// Return Values:
|
|
// TRUE - They loaded successfully
|
|
// FALSE - They did not load successully
|
|
BOOL
|
|
CFunctionDictionary::LoadFunctions()
|
|
{
|
|
DWORD dwNum = 0;
|
|
DWORD i;
|
|
BOOL bRet = TRUE;
|
|
|
|
// Initlize the functions to NULL
|
|
InitializeFunctions();
|
|
|
|
// Create all of the pointers for the classes here
|
|
m_pDict[dwNum++] = new (CRegistry_MoveValue);
|
|
// m_pDict[dwNum++] = new (CRegistry_SetValue);
|
|
m_pDict[dwNum++] = new (CRegistry_DeleteKey);
|
|
m_pDict[dwNum++] = new (CMetaBase_SetValue);
|
|
m_pDict[dwNum++] = new (CMetaBase_IsAnotherSiteonPort80);
|
|
m_pDict[dwNum++] = new (CMetaBase_VerifyValue);
|
|
m_pDict[dwNum++] = new (CMetaBase_DelIDOnEverySite);
|
|
m_pDict[dwNum++] = new (CIsUpgrade);
|
|
m_pDict[dwNum++] = new (CMetaBase_ImportRestrictionList);
|
|
m_pDict[dwNum++] = new (CMetaBase_UpdateCustomDescList);
|
|
m_pDict[dwNum++] = new (CXML_Metabase_Upgrade);
|
|
m_pDict[dwNum++] = new (CXML_Metabase_VerifyVersion);
|
|
m_pDict[dwNum++] = new (CXML_MBSchema_Upgrade);
|
|
m_pDict[dwNum++] = new (CXML_MBSchema_VerifyVersion);
|
|
m_pDict[dwNum++] = new (CFileSys_AddAcl);
|
|
m_pDict[dwNum++] = new (CFileSys_RemoveAcl);
|
|
m_pDict[dwNum++] = new (CFileSys_SetAcl);
|
|
// ...
|
|
|
|
// Make sure that we did not go over our function size limit
|
|
ASSERT(dwNum <= DICTIONARY_MAXFUNCTIONS);
|
|
|
|
// Make sure that they all loaded correctly
|
|
for (i = 0; i < dwNum; i++)
|
|
{
|
|
if ( !m_pDict[i] )
|
|
{
|
|
bRet = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( bRet )
|
|
{
|
|
// We successfully created all the functions
|
|
m_dwFunctions = dwNum;
|
|
m_bFunctionsLoaded = TRUE;
|
|
return TRUE;
|
|
}
|
|
|
|
// Since we failed, release all the pointers
|
|
DeleteFunctions();
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
// function: FindFunction
|
|
//
|
|
// Find a function in the table, given its name
|
|
//
|
|
// Parameters:
|
|
// szFunctionName - The name of the function
|
|
//
|
|
// Return:
|
|
// NULL - Could not find function
|
|
// pointer - pointer to the class for that function
|
|
//
|
|
CBaseFunction *
|
|
CFunctionDictionary::FindFunction(LPTSTR szFunctionName)
|
|
{
|
|
DWORD i;
|
|
|
|
if ( m_bFunctionsLoaded == FALSE )
|
|
{
|
|
if ( LoadFunctions() )
|
|
{
|
|
m_bFunctionsLoaded = TRUE;
|
|
}
|
|
else
|
|
{
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
for (i = 0; i < m_dwFunctions; i++)
|
|
{
|
|
if ( _tcscmp( szFunctionName, m_pDict[i]->GetMethodName() ) == 0 )
|
|
{
|
|
return (m_pDict[i]);
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
// function: CallFunction
|
|
//
|
|
// Call a function that has been defined in this class
|
|
//
|
|
// Parameters
|
|
// szFunctionName - The Name of the function
|
|
// szParameters - The parameters to be sent in
|
|
//
|
|
// Return Values:
|
|
// These return values indicate the return value of the function that was called.
|
|
// Higher up, these will sometimes we used for conditional statements in the
|
|
// infs
|
|
//
|
|
BOOL
|
|
CFunctionDictionary::CallFunction(LPTSTR szFunctionName, LPTSTR szParameters)
|
|
{
|
|
CBaseFunction *pFunc;
|
|
BOOL bRet;
|
|
|
|
pFunc = FindFunction( szFunctionName );
|
|
|
|
if ( !pFunc )
|
|
{
|
|
iisDebugOut((LOG_TYPE_TRACE, _T("Function '%s' could not be found\n") , szFunctionName ) );
|
|
|
|
// We could not find the function, so lets return. (The return value does not indicate
|
|
// that we did not succeeded it just indicates that the return function returned something)
|
|
return FALSE;
|
|
}
|
|
|
|
iisDebugOut((LOG_TYPE_TRACE, _T("Calling function '%s'\n") , pFunc->GetMethodName() ) );
|
|
|
|
bRet = pFunc->DoWork( szParameters );
|
|
|
|
iisDebugOut((LOG_TYPE_TRACE, _T("Function '%s' returned 0x%08x\n") , pFunc->GetMethodName(), bRet ) );
|
|
|
|
return bRet;
|
|
}
|