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.
|
|
/////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1996-2000 Microsoft Corporation
//
// Module Name:
// VerCheck.cpp
//
// Abstract:
// Contains the implementation of the ClRtlIsVersionCheckingDisabled()
// function that checks if the cluster version checking has been disabled
// on a particular computer or not.
//
// Author:
// Vijayendra Vasu (VVasu) 11-NOV-2000
//
// Revision History:
// None.
//
/////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
// Include files
//////////////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <malloc.h>
#include "clusudef.h"
#include "clusrtl.h"
/////////////////////////////////////////////////////////////////////////////
//++
//
// ClRtlIsVersionCheckingDisabled()
//
// Routine Description:
// Checks if cluster version checking has been disabled on a particular
// computer.
//
// Arguments:
// const WCHAR * pcszNodeNameIn
// Name of the node on which the test for the version checking state
// is to be performed. If NULL, this function checks if cluster
// version checking in disabled on the local node.
//
// BOOL * pfVerCheckDisabledOut
// Pointer to the boolean variable that will be set to TRUE if
// version checking is disabled on pcszNodeNameIn and FALSE otherwise.
//
// Return Value:
// ERROR_SUCCESS
// If all went well.
//
// Other Win32 error codes
// In case of error
//
//--
/////////////////////////////////////////////////////////////////////////////
DWORD ClRtlIsVersionCheckingDisabled( const WCHAR * pcszNodeNameIn , BOOL * pfVerCheckDisabledOut ) { DWORD dwError = ERROR_SUCCESS; HKEY hRemoteRegistry = NULL; HKEY hClusSvcParamsKey = NULL; WCHAR * pszTempString = NULL;
do { HKEY hParentKey = HKEY_LOCAL_MACHINE; DWORD dwVersionCheck = 0; DWORD dwType; DWORD dwSize;
// Validate parameter.
if ( pfVerCheckDisabledOut == NULL ) { dwError = ERROR_INVALID_PARAMETER; break; } // if: the output parameter is invalid
// Initialize output.
*pfVerCheckDisabledOut = FALSE;
// Connect to the remote registry, if required.
if ( pcszNodeNameIn != NULL ) { const WCHAR * pcszDoubleBackslashes = L"\\\\"; DWORD cchComputerNameSize = wcslen( pcszNodeNameIn ) + 1; DWORD cchPrefixLen = wcslen( pcszDoubleBackslashes );
// Allocate space for and prefix the computer name with '\\'
pszTempString = reinterpret_cast< WCHAR * >( malloc( ( cchPrefixLen + cchComputerNameSize ) * sizeof( *pszTempString ) ) ); if ( pszTempString == NULL ) { dwError = ERROR_OUTOFMEMORY; break; } // if: memory allocation failed
wcsncpy( pszTempString, pcszDoubleBackslashes, cchPrefixLen ); wcsncpy( pszTempString + cchPrefixLen, pcszNodeNameIn, cchComputerNameSize );
// Open the registry on the remote computer.
dwError = RegConnectRegistry( pszTempString, HKEY_LOCAL_MACHINE, &hRemoteRegistry ); if ( dwError != ERROR_SUCCESS ) { break; } // if: RegConnectRegistry() has failed
hParentKey = hRemoteRegistry; } // if: a remote computer needs to be contacted.
// Open the cluster service parameters registry key.
dwError = RegOpenKeyEx( hParentKey , CLUSREG_KEYNAME_CLUSSVC_PARAMETERS , 0 , KEY_QUERY_VALUE , &hClusSvcParamsKey );
if ( dwError != ERROR_SUCCESS ) { if ( dwError == ERROR_FILE_NOT_FOUND ) { // This is ok - absence of the value indicates that the cluster service
// does not exist on the target computer.
dwError = ERROR_SUCCESS; } // if: RegOpenKeyEx did not find the key
break; } // if: RegOpenKeyEx() has failed
// Read the required registry value
dwSize = sizeof( dwVersionCheck ); dwError = RegQueryValueEx( hClusSvcParamsKey , CLUSREG_NAME_SVC_PARAM_NOVER_CHECK , 0 , &dwType , reinterpret_cast< BYTE * >( &dwVersionCheck ) , &dwSize );
if ( dwError == ERROR_FILE_NOT_FOUND ) { // This is ok - absence of the value indicates that version checking is not disabled.
dwVersionCheck = 0; dwError = ERROR_SUCCESS; } // if: RegQueryValueEx did not find the value
else if ( dwError != ERROR_SUCCESS ) { break; } // else if: RegQueryValueEx() has failed
*pfVerCheckDisabledOut = ( dwVersionCheck == 0 ) ? FALSE : TRUE; } while( false ); // dummy do-while loop to avoid gotos
//
// Free acquired resources
//
if ( hRemoteRegistry != NULL ) { RegCloseKey( hRemoteRegistry ); } // if: we had opened the remote registry
if ( hClusSvcParamsKey != NULL ) { RegCloseKey( hClusSvcParamsKey ); } // if: we had opened the cluster service parameters registry key
// Free the allocated temporary string. (note, free( NULL ) is valid)
free( pszTempString ); return dwError; } //*** ClRtlIsVersionCheckingDisabled()
|