|
|
/*++
Copyright (c) 1997-2000 Microsoft Corporation
Module Name:
rndreg.cpp
Abstract:
This module contains implementation of registry operations used in the Rendezvous control.
--*/
#include "stdafx.h"
#include "rndreg.h"
#include "rndils.h"
const WCHAR gsz_RendezvousRoot[] = L"Software\\Microsoft\\Windows\\CurrentVersion\\Dynamic Directory";
const WCHAR gsz_ConfInstRelRoot[] = L"Conference";
DWORD CRegistry::ms_ErrorCode = ERROR_SUCCESS;
WCHAR CRegistry::ms_ServerName[MAX_REG_WSTR_SIZE];
WCHAR CRegistry::ms_ProtocolId[MAX_REG_WSTR_SIZE]; WCHAR CRegistry::ms_SubType[MAX_REG_WSTR_SIZE]; WCHAR CRegistry::ms_AdvertisingScope[MAX_REG_WSTR_SIZE]; WCHAR CRegistry::ms_IsEncrypted[MAX_REG_WSTR_SIZE]; REG_INFO g_ConfInstInfoArray[] = { {MA_PROTOCOL, CRegistry::ms_ProtocolId} // {MA_ADVERTISING_SCOPE, CRegistry::ms_AdvertisingScope},
// {MA_ISENCRYPTED, CRegistry::ms_IsEncrypted}
};
DWORD g_ContInstInfoArraySize = (sizeof g_ConfInstInfoArray) / (sizeof REG_INFO);
// re-read the registry entry for server name
BOOL CRegistry::NotifyServerNameChange( ) { // read the server name under the rendezvous key
return ReadRegValue( m_RendezvousKey, REG_SERVER_NAME, CRegistry::ms_ServerName ); }
BOOL CRegistry::ReadRegValue( IN HKEY Key, IN const WCHAR * pName, IN WCHAR * pValue ) { DWORD ValueType = REG_SZ; DWORD BufferSize = 0;
// determine the size of the buffer
ms_ErrorCode = RegQueryValueExW( Key, pName, 0, &ValueType, NULL, &BufferSize ); if ( ERROR_SUCCESS != ms_ErrorCode ) { return FALSE; }
// check if the reqd buffer is bigger than the pre-allocated buffer size
if ( (MAX_REG_WSTR_SIZE < BufferSize) ) { ms_ErrorCode = ERROR_OUTOFMEMORY; return FALSE; }
// retrieve the value into the allocated buffer
ms_ErrorCode = RegQueryValueExW( Key, pName, 0, &ValueType, (BYTE *)pValue, &BufferSize );
return (ERROR_SUCCESS == ms_ErrorCode); }
BOOL CRegistry::ReadConfInstValues( IN HKEY ConfInstKey ) { for ( DWORD i = 0; i < g_ContInstInfoArraySize; i ++) { if ( !ReadRegValue( ConfInstKey, CILSDirectory::RTConferenceAttributeName( g_ConfInstInfoArray[i].Attribute ), g_ConfInstInfoArray[i].wstrValue )) { return FALSE; } } return TRUE; }
CRegistry::CRegistry( ) // : m_Event(FALSE, FALSE, NULL, NULL)
{ // open rendezvous key
ms_ErrorCode = RegOpenKeyExW( HKEY_LOCAL_MACHINE, gsz_RendezvousRoot, 0, KEY_READ, &m_RendezvousKey ); if ( ERROR_SUCCESS != ms_ErrorCode ) { return; }
// ZoltanS note: The key is closed in the destructor.
#ifdef SEARCH_REGISTRY_FOR_ILS_SERVER_NAME
// read the server info (only wstr values) under the rendezvous key
if ( !ReadRegValue( m_RendezvousKey, REG_SERVER_NAME, CRegistry::ms_ServerName )) { DBGOUT((ERROR, _T("CRegistry::CRegistry : could not read servername from registry"))); } #endif
// open conference instance key root
HKEY ConfInstKey; ms_ErrorCode = RegOpenKeyExW( m_RendezvousKey, gsz_ConfInstRelRoot, 0, KEY_READ, &ConfInstKey ); if ( ERROR_SUCCESS != ms_ErrorCode ) { return; }
KEY_WRAP ConfInstKeyWrap(ConfInstKey);
if ( !ReadConfInstValues(ConfInstKey) ) { return; } /*
// register for a notification when the values under the rendezvous key change
// are added or deleted. since the server name value exists under the key,
// any change in its value will cause the event handle to be signaled, other changes
// will be harmless (other than deletion of the server name value)
ms_ErrorCode = RegNotifyChangeKeyValue( m_RendezvousKey, // key to be registered for notification
FALSE, // only the key, no subkeys
REG_NOTIFY_CHANGE_LAST_SET, // only modifications, addition/deletion of values
(HANDLE)m_Event, // handle to be signaled
TRUE // async
); if ( ERROR_SUCCESS != ms_ErrorCode ) { return; } */ // success
ms_ErrorCode = ERROR_SUCCESS; return; }
|