|
|
//////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2000 Microsoft Corporation
//
// Module Name:
// main.cpp
//
// Description:
// The entry point for the application that launches unattended
// installation of the cluster. This application parses input parameters,
// CoCreates the Configuration Wizard Component, passes the parsed
// parameters and invokes the Wizard. The Wizard may or may not show any
// UI depending on swithes and the (in)availability of information.
//
// Maintained By:
// Geoffrey Pease (GPease) 22-JAN-2000
// Vijay Vasu (VVasu) 22-JAN-2000
// Galen Barbee (GalenB) 22-JAN-2000
// David Potter (DavidP) 22-JAN-2000
//
//////////////////////////////////////////////////////////////////////////////
#include "pch.h"
#include <initguid.h>
#include <guids.h>
#include <ClusRtl.h>
DEFINE_MODULE( "W2KPROXYTEST" )
//
// Declarations
//
typedef HRESULT (* PDLLREGISTERSERVER)( void );
//
// Globals
//
HINSTANCE g_hInstance = NULL; LONG g_cObjects = 0; IClusCfgServer * g_pccs = NULL;
//
// Register the DLL
//
HRESULT HrRegisterTheDll( void ) { TraceFunc( "" );
HRESULT hr;
PDLLREGISTERSERVER pDllRegisterServer;
HMODULE hLib = NULL;
//
// Make sure the DLL is properly registered.
//
hLib = LoadLibrary( L"..\\..\\..\\..\\dll\\obj\\i386\\ClusCfgServer.dll" ); if ( hLib == NULL ) goto Win32Error;
pDllRegisterServer = reinterpret_cast< PDLLREGISTERSERVER >( GetProcAddress( hLib, "DllRegisterServer" ) ); if ( pDllRegisterServer == NULL ) goto Win32Error;
hr = THR( pDllRegisterServer() ); if ( FAILED( hr ) ) goto CleanUp;
CleanUp:
if ( hLib != NULL ) { FreeLibrary( hLib ); }
HRETURN( hr );
Win32Error: hr = THR( HRESULT_FROM_WIN32( GetLastError() ) ); goto CleanUp; }
//
// This tests the Storage device enumeration.
//
HRESULT HrTestManagedResourceEnum( void ) { TraceFunc( "" );
HRESULT hr; IEnumClusCfgManagedResources * pesd = NULL; ULONG cReceived = 0; IClusCfgManagedResourceInfo * rgDevices[ 10 ];
hr = g_pccs->GetManagedResourcesEnum( &pesd ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
while ( hr == S_OK ) { hr = pesd->Next( sizeof( rgDevices ) / sizeof( rgDevices[ 0 ] ), &rgDevices[ 0 ], &cReceived ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
DebugMsg( "cReceived = %u", cReceived );
for ( ULONG idx = 0; idx < cReceived; idx++ ) { BSTR bstr;
THR( rgDevices[ idx ]->GetUID( &bstr ) ); DebugMsg( "Device %u, UID = %ws", idx, bstr ); SysFreeString( bstr ); rgDevices[ idx ]->Release(); } // for:
} // while:
if ( hr == S_FALSE ) { hr = S_OK; } // if:
CleanUp:
if ( pesd != NULL ) { pesd->Release(); }
HRETURN( hr );
} //*** HrTestManagedResourceEnum()
//
// This tests the Storage device enumeration.
//
HRESULT HrTestNetworksEnum( void ) { TraceFunc( "" );
HRESULT hr; IEnumClusCfgNetworks * pens = NULL; ULONG cReceived = 0; IClusCfgNetworkInfo * rdNetworks[ 10 ]; BSTR bstrUID; LPWSTR lpsz = NULL; ULONG ulDottedQuad; IClusCfgIPAddressInfo * piccipai = NULL;
hr = g_pccs->GetNetworksEnum( &pens ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
while ( hr == S_OK ) { hr = STHR( pens->Next( sizeof( rdNetworks ) / sizeof( rdNetworks[ 0 ] ), &rdNetworks[ 0 ], &cReceived ) ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
for ( ULONG idx = 0; idx < cReceived; idx++ ) { hr = THR( rdNetworks[ idx ]->GetPrimaryNetworkAddress( &piccipai ) ); if ( SUCCEEDED( hr ) ) { hr = THR( piccipai->GetIPAddress( &ulDottedQuad ) ); if ( SUCCEEDED( hr ) ) { DWORD sc;
sc = ClRtlTcpipAddressToString( ulDottedQuad, &lpsz ); if ( sc == ERROR_SUCCESS ) { LocalFree( lpsz ); lpsz = NULL; } // if:
} // if:
piccipai->Release(); } // if:
hr = THR( rdNetworks[ idx ]->GetUID( &bstrUID ) ); if ( SUCCEEDED( hr ) ) { SysFreeString( bstrUID ); } // if:
rdNetworks[ idx ]->Release(); } // for:
} // while:
if ( hr == S_FALSE ) { hr = S_OK; } // if:
CleanUp:
if ( pens != NULL ) { pens->Release(); }
if ( lpsz != NULL ) { LocalFree( lpsz ); } // if:
HRETURN( hr );
} //*** HrTestNetworksEnum()
//
// This tests the node information
//
HRESULT HrTestNodeInfo( void ) { TraceFunc( "" );
HRESULT hr; IClusCfgNodeInfo * pccni = NULL; DWORD dwNodeHighestVersion; DWORD dwNodeLowestVersion; SDriveLetterMapping dlmDriveLetterUsage; IClusCfgClusterInfo * pccci = NULL; DWORD dwMajorVersion; DWORD dwMinorVersion; WORD wSuiteMask; BYTE bProductType; BSTR bstrCSDVersion = NULL;
hr = g_pccs->GetClusterNodeInfo( &pccni ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
hr = pccni->GetClusterVersion( &dwNodeHighestVersion, &dwNodeLowestVersion ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
hr = pccni->GetOSVersion( &dwMajorVersion, &dwMinorVersion, &wSuiteMask, &bProductType, &bstrCSDVersion ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
hr = pccni->GetDriveLetterMappings( &dlmDriveLetterUsage ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
hr = pccni->GetClusterConfigInfo( &pccci ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
CleanUp:
if ( pccci != NULL ) { pccci->Release(); }
if ( pccni != NULL ) { pccni->Release(); }
SysFreeString( bstrCSDVersion );
HRETURN( hr );
} //*** HrTestNodeInfo()
//////////////////////////////////////////////////////////////////////////////
//
// int
// _cdecl
// main( void )
//
// Description:
// Program entrance.
//
// Arguments:
// None.
//
// Return Value:
// S_OK (0) - Success.
// other HRESULTs - Error.
//
//////////////////////////////////////////////////////////////////////////////
int _cdecl main( void ) { HRESULT hr; BSTR bstrClusterName = NULL; IClusCfgInitialize * pgcci = NULL; IClusCfgCapabilities * piccc = NULL; IClusCfgClusterConnection * picccc = NULL;
TraceInitializeProcess();
#if 0
hr = THR( HrRegisterTheDll() ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
#endif
bstrClusterName = TraceSysAllocString( L"GalenB-Clus.ntdev.microsoft.com" ); if ( bstrClusterName == NULL ) { hr = THR( E_OUTOFMEMORY ); goto CleanUp; } // if:
//
// Start up the Cluster configuration server
//
hr = THR( CoInitialize( NULL ) ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
hr = THR( CoInitializeSecurity( NULL, -1, NULL, NULL, RPC_C_AUTHN_LEVEL_PKT_PRIVACY, RPC_C_IMP_LEVEL_IMPERSONATE, NULL, EOAC_NONE, 0 ) ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
hr = THR( CoCreateInstance( CLSID_ConfigClusApi, NULL, CLSCTX_SERVER, TypeSafeParams( IClusCfgServer, &g_pccs ) ) ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
hr = THR( g_pccs->TypeSafeQI( IClusCfgInitialize, &pgcci ) ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
hr = pgcci->Initialize( NULL, GetUserDefaultLCID() ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
hr = THR( g_pccs->TypeSafeQI( IClusCfgCapabilities, &piccc ) ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
hr = THR( piccc->CanNodeBeClustered() ); if ( FAILED( hr ) || ( hr == S_FALSE ) ) { goto CleanUp; } // if:
hr = THR( g_pccs->TypeSafeQI( IClusCfgClusterConnection, &picccc ) ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
hr = THR( picccc->OpenConnection( bstrClusterName ) ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
hr = THR( HrTestNodeInfo() ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
hr = THR( HrTestManagedResourceEnum() ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
hr = THR( HrTestNetworksEnum() ); if ( FAILED( hr ) ) { goto CleanUp; } // if:
CleanUp:
TraceSysFreeString( bstrClusterName );
if ( piccc != NULL ) { piccc->Release(); } // if:
if ( picccc != NULL ) { picccc->Release(); } // if:
if ( pgcci != NULL ) { pgcci->Release(); } // if:
if ( g_pccs != NULL ) { g_pccs->Release(); }
CoUninitialize();
TraceTerminateProcess();
return 0;
}
|