Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

862 lines
34 KiB

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// BVTCIMv2.CPP
//
//
// Copyright (c)2000 Microsoft Corporation, All Rights Reserved
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <bvt.h>
#include "bvtrefresh.h"
#define NO_ERRORS_EXPECTED FALSE,__FILE__,__LINE__
#define ERRORS_CAN_BE_EXPECTED TRUE,__FILE__,__LINE__
int TestSemiSyncEvent(WCHAR * wcsEventInfo, BOOL fCompareResults);
int TestAsyncEvent(WCHAR * wcsEventInfo, BOOL fCompareResults);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int GetListOfProviders( int nWhichTest, ItemList & MasterList )
{
int nRc = FATAL_ERROR;
CHString sProviders;
if( g_Options.GetSpecificOptionForAPITest(L"PROVIDERS",sProviders,nWhichTest) )
{
//=======================================================
// Parse the list of Providers to process
//=======================================================
if( InitMasterList(sProviders,MasterList))
{
nRc = SUCCESS;
}
}
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int GetNextProviderNamespace( int i, int nWhichTest, ItemList & MasterList, CHString & sNamespace, CHString & sKey )
{
int nRc = FATAL_ERROR;
ItemInfo * p = MasterList.GetAt(i);
if( p )
{
CHString sTmp;
sKey = p->Item;
if( g_Options.GetSpecificOptionForAPITest(sKey,sTmp, nWhichTest) )
{
nRc = CrackNamespace(WPTR sTmp,sNamespace, NO_ERRORS_EXPECTED);
}
}
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int GetNextNamespaceAndRunRequestedTests( int nWhichTest, int & i, ItemList & MasterList, CHString & sNamespace, CHString & sKey,
BOOL fCompareResults, BOOL fSuppressHeader, IWbemServices ** ppNamespace )
{
//==========================================================================
// Open the requested namespaces
//==========================================================================
int nRc = FATAL_ERROR;
if( i == -1 )
{
LogTestBeginning(nWhichTest,fSuppressHeader);
nRc = GetListOfProviders( nWhichTest, MasterList );
}
else
{
nRc = SUCCESS;
}
if( SUCCESS == nRc )
{
i++;
// =====================================================================
// Make sure we are still in range
// =====================================================================
if( i < MasterList.Size() )
{
nRc = GetNextProviderNamespace(i, 200, MasterList, sNamespace, sKey);
if( SUCCESS == nRc )
{
// ==============================================================
// Open the namespace
// ==============================================================
nRc = OpenNamespaceAndKeepOpen( ppNamespace,WPTR sNamespace,FALSE,fCompareResults);
}
}
else
{
nRc = NO_MORE_DATA;
}
}
if( SUCCESS == nRc )
{
nRc = RunRequestedTests(nWhichTest, fCompareResults);
}
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 200
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int ProviderOpenNamespace(BOOL fCompareResults, BOOL fSuppressHeader)
{
//==========================================================================
// Open the requested namespaces
//==========================================================================
int nRc = FATAL_ERROR;
IWbemServices * pNamespace = NULL;
ItemList MasterList;
CHString sNamespace, sKey;
int i = -1;
while(TRUE)
{
nRc = GetNextNamespaceAndRunRequestedTests( 200, i, MasterList, sNamespace, sKey, fCompareResults, fSuppressHeader, &pNamespace );
// ==============================================================
// Release the pointers
// ==============================================================
SAFE_RELEASE_PTR(pNamespace);
if( nRc == NO_MORE_DATA )
{
nRc = SUCCESS;
break;
}
if( nRc == FATAL_ERROR )
{
break;
}
}
LogTestEnding(200,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 201
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int ProviderEnumerateClasses(BOOL fCompareResults, BOOL fSuppressHeader)
{
int nRc = FATAL_ERROR;
IWbemServices * pNamespace = NULL;
ItemList MasterList;
CHString sNamespace;
int i = -1;
while(TRUE)
{
CHString sKey;
nRc = GetNextNamespaceAndRunRequestedTests( 201, i, MasterList, sNamespace, sKey, fCompareResults, fSuppressHeader, &pNamespace );
if( SUCCESS != nRc )
{
break;
}
// =============================================================
// Get the list of classes to make sure they are in namespace
// =============================================================
CHString sClasses;
if( g_Options.GetSpecificOptionForAPITest( WPTR sKey,sClasses, 201 ) )
{
ItemList ClassList;
if(InitMasterList(sClasses, ClassList))
{
for( int i = 0; i < ClassList.Size(); i++ )
{
ItemInfo * pClass = ClassList.GetAt(i);
CHString sClassName;
if( g_Options.GetSpecificOptionForAPITest( WPTR pClass->Item,sClassName, 201 ) )
{
// =========================================================
// Get the class name and expected results,
// =========================================================
CHString sClass;
ItemList Results;
nRc = CrackClassNameAndResults(WPTR sClassName, sClass, Results, NO_ERRORS_EXPECTED );
if( SUCCESS == nRc )
{
// =========================================================
// Get the enumeration flags
// =========================================================
ItemList FlagList;
nRc = GetFlags(201, FlagList);
if( SUCCESS == nRc )
{
for( int x = 0; x < FlagList.Size(); x++ )
{
ItemInfo * p = FlagList.GetAt(x);
// =========================================================
// Make sure those classes are in the namespace
// =========================================================
IEnumWbemClassObject * pEnum = NULL;
nRc = EnumerateClassesAndLogErrors( pNamespace,&pEnum, p->dwFlags, WPTR sClass, WPTR sNamespace, NO_ERRORS_EXPECTED );
if( SUCCESS == nRc )
{
if( fCompareResults )
{
if( x < Results.Size() )
{
ItemInfo * pResults = Results.GetAt(x);
nRc = CompareResultsFromEnumeration(pEnum,pResults->Results,WPTR sClass, WPTR sNamespace);
}
}
}
SAFE_RELEASE_PTR(pEnum);
}
}
}
}
}
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
}
if( nRc == NO_MORE_DATA )
{
nRc = SUCCESS;
}
LogTestEnding(201,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 202
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int ProviderExecuteQueries(BOOL fCompareResults, BOOL fSuppressHeader)
{
int nRc = FATAL_ERROR;
IWbemServices * pNamespace = NULL;
ItemList MasterList;
CHString sNamespace;
int i = -1;
while(TRUE)
{
CHString sKey;
nRc = GetNextNamespaceAndRunRequestedTests( 202, i, MasterList, sNamespace, sKey, fCompareResults, fSuppressHeader, &pNamespace );
if( SUCCESS != nRc )
{
break;
}
// =============================================================
// Get the list of queries
// =============================================================
CHString sQueries;
if( g_Options.GetSpecificOptionForAPITest( WPTR sKey,sQueries, 202 ) )
{
ItemList List;
if(InitMasterList(sQueries, List))
{
for( int i = 0; i < List.Size(); i++ )
{
ItemInfo * p = List.GetAt(i);
CHString sQuery;
if( g_Options.GetSpecificOptionForAPITest(p->Item,sQuery,202) )
{
EventInfo Query;
nRc = CrackEvent(WPTR sQuery, Query,NO_ERRORS_EXPECTED);
if( SUCCESS == nRc )
{
//==================================================================
// Regular query
//==================================================================
nRc = QueryAndCompareResults( pNamespace,WPTR Query.Query,Query.Results,WPTR sNamespace);
if( nRc != S_OK )
{
break;
}
}
}
}
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
}
if( nRc == NO_MORE_DATA )
{
nRc = SUCCESS;
}
LogTestEnding(202,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 203
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 204
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int ProviderEnumerateInstances(BOOL fCompareResults, BOOL fSuppressHeader)
{
int nRc = FATAL_ERROR;
IWbemServices * pNamespace = NULL;
ItemList MasterList;
CHString sNamespace;
int i = -1;
while(TRUE)
{
CHString sKey;
nRc = GetNextNamespaceAndRunRequestedTests( 204, i, MasterList, sNamespace, sKey, fCompareResults, fSuppressHeader, &pNamespace );
if( SUCCESS != nRc )
{
break;
}
// =============================================================
// Get the list of instances
// =============================================================
CHString sInstances;
if( g_Options.GetSpecificOptionForAPITest( WPTR sKey,sInstances, 204 ) )
{
// =========================================================
// Get the enumeration flags
// =========================================================
ItemList FlagList;
nRc = GetFlags(204, FlagList);
if( SUCCESS == nRc )
{
for( int x = 0; x < FlagList.Size(); x++ )
{
ItemInfo * p = FlagList.GetAt(x);
// =================================================
// Make sure those instances are in the namespace
// =================================================
nRc = EnumerateInstancesAndCompare( sInstances, 204, fCompareResults, pNamespace,(WCHAR*)((const WCHAR*)sNamespace));
}
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
}
if( nRc == NO_MORE_DATA )
{
nRc = SUCCESS;
}
LogTestEnding(204,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 205
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int ProviderGetObjects(BOOL fCompareResults, BOOL fSuppressHeader)
{
int nRc = FATAL_ERROR;
IWbemServices * pNamespace = NULL;
ItemList MasterList;
CHString sNamespace;
int i = -1;
while(TRUE)
{
CHString sKey;
nRc = GetNextNamespaceAndRunRequestedTests( 205, i, MasterList, sNamespace, sKey, fCompareResults, fSuppressHeader, &pNamespace );
if( SUCCESS != nRc )
{
break;
}
// =============================================================
// Get the list of instances
// =============================================================
CHString sObjects;
if( g_Options.GetSpecificOptionForAPITest( WPTR sKey,sObjects, 205 ) )
{
// =========================================================
// Get the enumeration flags
// =========================================================
ItemList FlagList;
nRc = GetFlags(205, FlagList);
if( SUCCESS == nRc )
{
for( int x = 0; x < FlagList.Size(); x++ )
{
ItemInfo * p = FlagList.GetAt(x);
// =================================================
// Get the specific objects
// =================================================
nRc = GetSpecificObjects(sObjects, pNamespace, 205,WPTR sNamespace);
}
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
}
if( nRc == NO_MORE_DATA )
{
nRc = SUCCESS;
}
LogTestEnding(205,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 206
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int ProviderEnumerateMethods(BOOL fCompareResults, BOOL fSuppressHeader)
{
int nRc = FATAL_ERROR;
IWbemServices * pNamespace = NULL;
ItemList MasterList;
CHString sNamespace;
int i = -1;
while(TRUE)
{
CHString sKey;
nRc = GetNextNamespaceAndRunRequestedTests( 206, i, MasterList, sNamespace, sKey, fCompareResults, fSuppressHeader, &pNamespace );
if( SUCCESS != nRc )
{
break;
}
// =============================================================
// Get the list of Methods
// =============================================================
CHString sObjects;
if( g_Options.GetSpecificOptionForAPITest( WPTR sKey,sObjects, 206 ) )
{
// =========================================================
// Get the enumeration flags
// =========================================================
ItemList FlagList;
nRc = GetFlags(206, FlagList);
if( SUCCESS == nRc )
{
for( int x = 0; x < FlagList.Size(); x++ )
{
ItemInfo * p = FlagList.GetAt(x);
// =========================================================
// Delete the methods
// =========================================================
nRc = EnumerateMethodsAndCompare(sObjects, pNamespace, 206,fCompareResults,WPTR sNamespace);
}
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
}
if( nRc == NO_MORE_DATA )
{
nRc = SUCCESS;
}
LogTestEnding(206,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 207
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int ProviderExecuteMethods(BOOL fCompareResults, BOOL fSuppressHeader)
{
int nRc = FATAL_ERROR;
IWbemServices * pNamespace = NULL;
ItemList MasterList;
CHString sNamespace;
int i = -1;
while(TRUE)
{
CHString sKey;
nRc = GetNextNamespaceAndRunRequestedTests( 207, i, MasterList, sNamespace, sKey, fCompareResults, fSuppressHeader, &pNamespace );
if( SUCCESS != nRc )
{
break;
}
// =============================================================
// Get the list of Methods
// =============================================================
CHString sObjects;
if( g_Options.GetSpecificOptionForAPITest( WPTR sKey,sObjects, 207 ) )
{
// =========================================================
// Get the enumeration flags
// =========================================================
ItemList FlagList;
nRc = GetFlags(207, FlagList);
if( SUCCESS == nRc )
{
for( int x = 0; x < FlagList.Size(); x++ )
{
ItemInfo * p = FlagList.GetAt(x);
// =========================================================
// Delete the methods
// =========================================================
nRc = ExecuteMethodsAndCompare(sObjects, pNamespace, 207,fCompareResults,WPTR sNamespace);
}
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
}
if( nRc == NO_MORE_DATA )
{
nRc = SUCCESS;
}
LogTestEnding(207,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 208
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int ProviderSemiSyncEvents(BOOL fCompareResults, BOOL fSuppressHeader)
{
int nRc = FATAL_ERROR;
IWbemServices * pNamespace = NULL;
ItemList MasterList;
CHString sNamespace;
int i = -1;
while(TRUE)
{
CHString sKey;
nRc = GetNextNamespaceAndRunRequestedTests( 208, i, MasterList, sNamespace, sKey, fCompareResults, fSuppressHeader, &pNamespace );
if( SUCCESS != nRc )
{
break;
}
// =============================================================
// Get the list of Methods
// =============================================================
CHString sEvents;
if( g_Options.GetSpecificOptionForAPITest( WPTR sKey,sEvents, 208 ) )
{
ItemList EventList;
if(InitMasterList(sEvents, EventList))
{
for( int i = 0; i < EventList.Size(); i++ )
{
ItemInfo * pEvent = EventList.GetAt(i);
CHString sEventInfo;
// ==================================================
// Get the event info
// ==================================================
if( g_Options.GetSpecificOptionForAPITest( WPTR pEvent->Item,sEventInfo, 208 ) )
{
nRc = TestSemiSyncEvent( WPTR sEventInfo, fCompareResults);
}
}
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
}
if( nRc == NO_MORE_DATA )
{
nRc = SUCCESS;
}
LogTestEnding(208,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 209
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int ProviderTempAsyncEvents(BOOL fCompareResults, BOOL fSuppressHeader)
{
int nRc = FATAL_ERROR;
IWbemServices * pNamespace = NULL;
ItemList MasterList;
CHString sNamespace;
int i = -1;
while(TRUE)
{
CHString sKey;
nRc = GetNextNamespaceAndRunRequestedTests( 209, i, MasterList, sNamespace, sKey, fCompareResults, fSuppressHeader, &pNamespace );
if( SUCCESS != nRc )
{
break;
}
// =============================================================
// Get the list of Methods
// =============================================================
CHString sEvents;
if( g_Options.GetSpecificOptionForAPITest( WPTR sKey,sEvents, 209 ) )
{
ItemList EventList;
if(InitMasterList(sEvents, EventList))
{
for( int i = 0; i < EventList.Size(); i++ )
{
ItemInfo * pEvent = EventList.GetAt(i);
CHString sEventInfo;
// ==================================================
// Get the event info
// ==================================================
if( g_Options.GetSpecificOptionForAPITest( WPTR pEvent->Item,sEventInfo, 209 ) )
{
nRc = TestAsyncEvent( WPTR sEventInfo, fCompareResults);
}
}
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
}
if( nRc == NO_MORE_DATA )
{
nRc = SUCCESS;
}
LogTestEnding(209,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 210
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int RefreshLoop( WCHAR * wcsClass, IWbemServices * pNamespace)
{
int nRc = FATAL_ERROR;
long lLoopCount = 0; // Refresh loop counter
CRefresher aRefClient;
// Initialize our container class
// ==============================
aRefClient.Initialize(pNamespace, wcsClass);
// Add items to the refresher
// ==========================
// Add an enumerator
// =================
HRESULT hr = aRefClient.AddEnum(wcsClass);
if ( SUCCEEDED( hr ) )
{
hr = aRefClient.AddObjects(wcsClass);
if( SUCCEEDED(hr) )
{
// Begin the refreshing loop
// =========================
for ( lLoopCount = 0; lLoopCount < cdwNumReps; lLoopCount++ )
{
// Refresh!!
// =========
hr = aRefClient.Refresh();
if ( SUCCEEDED (hr) )
{
aRefClient.EnumerateObjectData();
aRefClient.EnumerateEnumeratorData();
}
else
{
break;
}
}
}
}
aRefClient.RemoveEnum();
aRefClient.RemoveObjects();
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int ProviderRefresher(BOOL fCompareResults, BOOL fSuppressHeader)
{
int nRc = FATAL_ERROR;
IWbemServices * pNamespace = NULL;
ItemList MasterList;
CHString sNamespace;
int i = -1;
while(TRUE)
{
CHString sKey;
nRc = GetNextNamespaceAndRunRequestedTests( 210, i, MasterList, sNamespace, sKey, fCompareResults, fSuppressHeader, &pNamespace );
if( SUCCESS != nRc )
{
break;
}
// =============================================================
// Get the list of Methods
// =============================================================
CHString sEvents;
if( g_Options.GetSpecificOptionForAPITest( WPTR sKey,sEvents, 210) )
{
ItemList EventList;
if(InitMasterList(sEvents, EventList))
{
for( int i = 0; i < EventList.Size(); i++ )
{
ItemInfo * pEvent = EventList.GetAt(i);
CHString sEventInfo;
// ==================================================
// Get the event info
// ==================================================
if( g_Options.GetSpecificOptionForAPITest( WPTR pEvent->Item,sEventInfo, 210 ) )
{
// nRc = RefreshLoop( WPTR sEventInfo, pNamespace);
}
}
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
}
if( nRc == NO_MORE_DATA )
{
nRc = SUCCESS;
}
LogTestEnding(210,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 211
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int ProviderCreateClasses(BOOL fCompareResults, BOOL fSuppressHeader)
{
int nRc = FATAL_ERROR;
IWbemServices * pNamespace = NULL;
ItemList MasterList;
CHString sNamespace;
int i = -1;
while(TRUE)
{
CHString sKey;
nRc = GetNextNamespaceAndRunRequestedTests( 211, i, MasterList, sNamespace, sKey, fCompareResults, fSuppressHeader, &pNamespace );
if( SUCCESS != nRc )
{
break;
}
// =========================================================
// Get the enumeration flags
// =========================================================
ItemList FlagList;
nRc = GetFlags(211, FlagList);
if( SUCCESS == nRc )
{
for( int x = 0; x < FlagList.Size(); x++ )
{
ItemInfo * p = FlagList.GetAt(x);
// =========================================================
// Create classes
// =========================================================
nRc = CreateClassesForSpecificTest(pNamespace, WPTR sNamespace, WPTR sKey,211);
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
}
if( nRc == NO_MORE_DATA )
{
nRc = SUCCESS;
}
LogTestEnding(211,nRc,fSuppressHeader);
return nRc;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//*****************************************************************************************************************
// Test 212
//*****************************************************************************************************************
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int ProviderCreateInstances(BOOL fCompareResults, BOOL fSuppressHeader)
{
int nRc = FATAL_ERROR;
IWbemServices * pNamespace = NULL;
ItemList MasterList;
CHString sNamespace;
int i = -1;
while(TRUE)
{
CHString sKey;
nRc = GetNextNamespaceAndRunRequestedTests( 212, i, MasterList, sNamespace, sKey, fCompareResults, fSuppressHeader, &pNamespace );
if( SUCCESS != nRc )
{
break;
}
// =========================================================
// Get the enumeration flags
// =========================================================
ItemList FlagList;
nRc = GetFlags(212, FlagList);
if( SUCCESS == nRc )
{
for( int x = 0; x < FlagList.Size(); x++ )
{
ItemInfo * p = FlagList.GetAt(x);
// =========================================================
// Create Instances
// =========================================================
nRc = CreateInstancesForSpecificTest(pNamespace, WPTR sNamespace,WPTR sKey,212,TRUE);
}
}
// =====================================================================
// Release the pointers
// =====================================================================
SAFE_RELEASE_PTR(pNamespace);
}
if( nRc == NO_MORE_DATA )
{
nRc = SUCCESS;
}
LogTestEnding(212,nRc,fSuppressHeader);
return nRc;
}