155 lines
4 KiB
C++
155 lines
4 KiB
C++
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Copyright (c) 1996-1998 Microsoft Corporation
|
||
|
//
|
||
|
// Module Name:
|
||
|
// ClusObj.cpp
|
||
|
//
|
||
|
// Description:
|
||
|
// Implementation of the CClusterObject classes.
|
||
|
//
|
||
|
// Author:
|
||
|
// David Potter (davidp) September 15, 1998
|
||
|
//
|
||
|
// Revision History:
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#include "ClusObj.h"
|
||
|
#include "AdmCommonRes.h"
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// class CClusResInfo
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// CClusResInfo::BRequiredDependenciesPresent
|
||
|
//
|
||
|
// Routine Description:
|
||
|
// Determine if the resource contains each required resource for this
|
||
|
// type of resource.
|
||
|
//
|
||
|
// Arguments:
|
||
|
// plpri [IN] List of resources. Defaults to this resource's
|
||
|
// dependency list.
|
||
|
// rstrMissing [OUT] String in which to return a missing resource
|
||
|
// class name or type name.
|
||
|
// rbMissingTypeName
|
||
|
// [OUT] TRUE = missing resource type name
|
||
|
// FALSE = missing resource class
|
||
|
//
|
||
|
// Return Value:
|
||
|
// None.
|
||
|
//
|
||
|
// Exceptions Thrown:
|
||
|
// Any exceptions thrown by CString::LoadString() or CString::operator=().
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
BOOL CClusResInfo::BRequiredDependenciesPresent(
|
||
|
IN CClusResPtrList const * plpri,
|
||
|
OUT CString & rstrMissing,
|
||
|
OUT BOOL & rbMissingTypeName
|
||
|
)
|
||
|
{
|
||
|
ATLASSERT( Prti() != NULL );
|
||
|
|
||
|
BOOL bFound = TRUE;
|
||
|
CLUSPROP_BUFFER_HELPER buf;
|
||
|
const CClusResInfo * pri;
|
||
|
|
||
|
// Loop to avoid goto's.
|
||
|
do
|
||
|
{
|
||
|
//
|
||
|
// We're done if there are no required dependencies.
|
||
|
//
|
||
|
if ( Prti()->Pcrd() == NULL )
|
||
|
{
|
||
|
break;
|
||
|
} // if: no required dependencies
|
||
|
|
||
|
//
|
||
|
// Default the list of resources if none specified.
|
||
|
//
|
||
|
if ( plpri == NULL )
|
||
|
{
|
||
|
plpri = PlpriDependencies();
|
||
|
} // if: no list of dependencies specified
|
||
|
|
||
|
//
|
||
|
// Get the list of required dependencies.
|
||
|
//
|
||
|
buf.pRequiredDependencyValue = Prti()->Pcrd();
|
||
|
|
||
|
//
|
||
|
// Loop through each required dependency and make sure
|
||
|
// there is a dependency on a resource of that type.
|
||
|
//
|
||
|
for ( ; buf.pSyntax->dw != CLUSPROP_SYNTAX_ENDMARK
|
||
|
; buf.pb += sizeof( *buf.pValue ) + ALIGN_CLUSPROP( buf.pValue->cbLength )
|
||
|
)
|
||
|
{
|
||
|
bFound = FALSE;
|
||
|
CClusResPtrList::iterator itCurrent = plpri->begin();
|
||
|
CClusResPtrList::iterator itLast = plpri->end();
|
||
|
for ( ; itCurrent != itLast ; itCurrent++ )
|
||
|
{
|
||
|
pri = *itCurrent;
|
||
|
|
||
|
//
|
||
|
// If this is the right type, we've satisfied the
|
||
|
// requirement so exit the loop.
|
||
|
//
|
||
|
if ( buf.pSyntax->dw == CLUSPROP_SYNTAX_RESCLASS )
|
||
|
{
|
||
|
if ( buf.pResourceClassValue->rc == pri->ResClass() )
|
||
|
{
|
||
|
bFound = TRUE;
|
||
|
} // if: match found
|
||
|
} // if: resource class
|
||
|
else if ( buf.pSyntax->dw == CLUSPROP_SYNTAX_NAME )
|
||
|
{
|
||
|
if ( pri->Prti()->RstrName().CompareNoCase( buf.pStringValue->sz ) == 0 )
|
||
|
{
|
||
|
bFound = TRUE;
|
||
|
} // if: match found
|
||
|
} // else if: resource name
|
||
|
if ( bFound )
|
||
|
{
|
||
|
break;
|
||
|
} // if: found a match
|
||
|
} // while: more items in the list
|
||
|
|
||
|
//
|
||
|
// If a match was not found, changes cannot be applied.
|
||
|
//
|
||
|
if ( ! bFound )
|
||
|
{
|
||
|
if ( buf.pSyntax->dw == CLUSPROP_SYNTAX_RESCLASS )
|
||
|
{
|
||
|
if ( ! rstrMissing.LoadString( ADMC_IDS_RESCLASS_UNKNOWN + buf.pResourceClassValue->rc ) )
|
||
|
{
|
||
|
rstrMissing.LoadString( ADMC_IDS_RESCLASS_UNKNOWN );
|
||
|
} // if: error loading specific class name
|
||
|
rbMissingTypeName = FALSE;
|
||
|
} // if: resource class not found
|
||
|
else if ( buf.pSyntax->dw == CLUSPROP_SYNTAX_NAME )
|
||
|
{
|
||
|
rstrMissing = buf.pStringValue->sz;
|
||
|
rbMissingTypeName = TRUE;
|
||
|
} // else if: resource type name not found
|
||
|
break;
|
||
|
} // if: not found
|
||
|
|
||
|
} // while: more dependencies required
|
||
|
} while ( 0 );
|
||
|
|
||
|
return bFound;
|
||
|
|
||
|
} //*** CClusResInfo::BRequiredDependenciesPresent()
|