|
|
//////////////////////////////////////////////////////////////////////////////
/*++
Copyright (C) Microsoft Corporation
Module Name:
rtradvise.cpp
Abstract: this class implement IRtrAdviseSink interface to redirect notification of changes to the snapin node
Author:
Wei Jiang 1/7/99
Revision History: weijiang 1/7/99 - created
--*/ //////////////////////////////////////////////////////////////////////////////
#include "Precompiled.h"
#include "rtradvise.h"
const IID IID_IRtrAdviseSink = {0x66A2DB14,0xD706,0x11d0,{0xA3,0x7B,0x00,0xC0,0x4F,0xC9,0xDA,0x04}};
const IID IID_IRouterRefresh = {0x66a2db15,0xd706,0x11d0,{0xa3,0x7b,0x00,0xc0,0x4f,0xc9,0xda,0x04}};
const IID IID_IRouterRefreshAccess = {0x66a2db1c,0xd706,0x11d0,{0xa3,0x7b,0x00,0xc0,0x4f,0xc9,0xda,0x04}};
//----------------------------------------------------------------------------
// Function: ConnectRegistry
//
// Connects to the registry on the specified machine
//----------------------------------------------------------------------------
DWORD ConnectRegistry( IN LPCTSTR pszMachine, // NULL if local
OUT HKEY* phkeyMachine ) {
//
// if no machine name was specified, connect to the local machine.
// otherwise, connect to the specified machine
//
DWORD dwErr = NO_ERROR; if (NULL == pszMachine) { *phkeyMachine = HKEY_LOCAL_MACHINE; } else { //
// Make the connection
//
dwErr = ::RegConnectRegistry( (LPTSTR)pszMachine, HKEY_LOCAL_MACHINE, phkeyMachine ); }
return dwErr; }
//----------------------------------------------------------------------------
// Function: DisconnectRegistry
//
// Disconnects the specified config-handle. The handle is assumed to have been
// acquired by calling 'ConnectRegistry'.
//----------------------------------------------------------------------------
VOID DisconnectRegistry( IN HKEY hkeyMachine ) {
if (hkeyMachine != HKEY_LOCAL_MACHINE) { ::RegCloseKey(hkeyMachine); } }
DWORD ReadRegistryStringValue(LPCTSTR pszMachine, LPCTSTR pszKeyUnderLocalMachine, LPCTSTR pszName, ::CString& strValue) { HKEY rootk = NULL; HKEY k = NULL; DWORD ret = NO_ERROR; if((ret = ConnectRegistry(pszMachine, &rootk)) != NO_ERROR) goto Error;
// Cool, we have a machine registry entry, now get the
// path down to the routertype key
ret = RegOpenKeyEx(rootk, pszKeyUnderLocalMachine, 0, KEY_READ, &k); if (ret != NO_ERROR) goto Error;
// Ok, at this point we just need to get the RouterType value from
// the key
{ DWORD type = REG_SZ; TCHAR value[MAX_PATH]; DWORD len = MAX_PATH; ret = ::RegQueryValueEx(k, pszName, 0, &type, (LPBYTE )value, &len); if(ret == ERROR_SUCCESS) strValue = value; }
Error: if(rootk) DisconnectRegistry(rootk); if(k) RegCloseKey(k);
return ret; }
DWORD ReadRegistryDWORDValue(LPCTSTR pszMachine, LPCTSTR pszKeyUnderLocalMachine, LPCTSTR pszName, DWORD* pdwValue) { HKEY rootk = NULL; HKEY k = NULL; DWORD ret = NO_ERROR; if((ret = ConnectRegistry(pszMachine, &rootk)) != NO_ERROR) goto Error;
// Cool, we have a machine registry entry, now get the
// path down to the routertype key
ret = RegOpenKeyEx(rootk, pszKeyUnderLocalMachine, 0, KEY_READ, &k); if (ret != NO_ERROR) goto Error;
{ // Ok, at this point we just need to get the RouterType value from
// the key
DWORD type = REG_DWORD; DWORD len = sizeof(DWORD); ret = ::RegQueryValueEx(k, pszName, 0, &type, (LPBYTE )pdwValue, &len); }
Error: if(rootk) DisconnectRegistry(rootk); if(k) RegCloseKey(k);
return ret; }
//----------------------------------------------------------------------------
//
// helper functions to check if RRAS is using NT Authentication
//
//----------------------------------------------------------------------------
BOOL IsRRASUsingNTAuthentication(LPCTSTR pszMachine) // when NULL: local machine
{ ::CString str; BOOL ret = FALSE;
if(ERROR_SUCCESS == ReadRegistryStringValue(pszMachine, RegKeyRouterAuthenticationProviders, RegValueName_RouterActiveAuthenticationProvider, str)) { ret = (str.CompareNoCase(NTRouterAuthenticationProvider) == 0); }
return ret; }
//----------------------------------------------------------------------------
//
// helper functions to check if RRAS is configured
//
//----------------------------------------------------------------------------
BOOL IsRRASConfigured(LPCTSTR pszMachine) // when NULL: local machine
{ DWORD dwConfig= 0;
ReadRegistryDWORDValue(pszMachine, RegRemoteAccessKey, RegRtrConfigured, &dwConfig);
return (dwConfig != 0); }
//----------------------------------------------------------------------------
//
// helper function to check if RRAS is using NT accounting for logging
//
//----------------------------------------------------------------------------
BOOL IsRRASUsingNTAccounting(LPCTSTR pszMachine) // when NULL, local machine
{
::CString str; BOOL ret = FALSE;
if(ERROR_SUCCESS == ReadRegistryStringValue(pszMachine, RegKeyRouterAccountingProviders, RegValueName_RouterActiveAccountingProvider, str)) { ret = (str.CompareNoCase(NTRouterAccountingProvider) == 0); }
return ret;
};
static unsigned int s_cfComputerAddedAsLocal = RegisterClipboardFormat(L"MMC_MPRSNAP_COMPUTERADDEDASLOCAL");
BOOL ExtractComputerAddedAsLocal(LPDATAOBJECT lpDataObject) { BOOL fReturn = FALSE; BOOL * pReturn; pReturn = Extract<BOOL>(lpDataObject, (CLIPFORMAT) s_cfComputerAddedAsLocal, -1); if (pReturn) { fReturn = *pReturn; GlobalFree(pReturn); }
return fReturn; }
|