|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: S R V R D L G . C P P
//
// Contents: Dialog box handling for the Server object.
//
// Notes:
//
// Author: danielwe 5 Mar 1997
//
//----------------------------------------------------------------------------
#include "pch.h"
#pragma hdrstop
#include "srvrdlg.h"
#include "ncreg.h"
static const WCHAR c_szServerParams[] = L"System\\CurrentControlSet\\Services\\LanmanServer\\Parameters"; static const WCHAR c_szLmAnnounce[] = L"Lmannounce"; static const WCHAR c_szSize[] = L"Size"; static const WCHAR c_szMemoryManagement[] = L"System\\CurrentControlSet\\Control\\Session Manager\\Memory Management"; static const WCHAR c_szLargeCache[] = L"LargeSystemCache";
//+---------------------------------------------------------------------------
//
// Member: CSrvrcfg::HrSetupPropSheets
//
// Purpose: Inits the prop sheet page objects and creates the pages to be
// returned to the installer object.
//
// Arguments:
// pahpsp [out] Array of handles to property sheet pages.
// cPages [in] Number of pages.
//
// Returns: HRESULT, Error code.
//
// Author: danielwe 5 Mar 1997
//
// Notes:
//
HRESULT CSrvrcfg::HrSetupPropSheets(HPROPSHEETPAGE **pahpsp, INT cPages) { HRESULT hr = S_OK; HPROPSHEETPAGE *ahpsp = NULL;
Assert(pahpsp);
*pahpsp = NULL;
// Allocate a buffer large enough to hold the handles to all of our
// property pages.
ahpsp = (HPROPSHEETPAGE *)CoTaskMemAlloc(sizeof(HPROPSHEETPAGE) * cPages); if (!ahpsp) { hr = E_OUTOFMEMORY; goto err; }
if (!m_apspObj[0]) { // Allocate each of the CPropSheetPage objects
m_apspObj[0] = new CServerConfigDlg(this); }
// Create the actual PROPSHEETPAGE for each object.
ahpsp[0] = m_apspObj[0]->CreatePage(DLG_ServerConfig, 0);
Assert(SUCCEEDED(hr));
*pahpsp = ahpsp;
cleanup: TraceError("HrSetupPropSheets", hr); return hr;
err: CoTaskMemFree(ahpsp); goto cleanup; }
//+---------------------------------------------------------------------------
//
// Member: CSrvrcfg::CleanupPropPages
//
// Purpose: Loop thru each of the pages and free the objects associated
// with them.
//
// Arguments:
// (none)
//
// Returns: Nothing.
//
// Author: danielwe 5 Mar 1997
//
// Notes:
//
VOID CSrvrcfg::CleanupPropPages() { INT ipage;
for (ipage = 0; ipage < c_cPages; ipage++) { delete m_apspObj[ipage]; m_apspObj[ipage] = NULL; } }
//+---------------------------------------------------------------------------
//
// Member: CSrvrcfg::HrOpenRegKeys
//
// Purpose: Open the various registry keys we'll be working with for the
// lifetime of our object.
//
// Arguments: pnc - An INetCfg interface
//
// Returns: HRESULT, Error code.
//
// Author: danielwe 5 Mar 1997
//
// Notes:
//
HRESULT CSrvrcfg::HrOpenRegKeys(INetCfg *pnc) { HRESULT hr = S_OK;
hr = HrRegOpenKeyBestAccess(HKEY_LOCAL_MACHINE, c_szMemoryManagement, &m_hkeyMM); if (FAILED(hr)) goto err;
err: TraceError("CSrvrcfg::HrOpenRegKeys", hr); return hr; }
//+---------------------------------------------------------------------------
//
// Member: CSrvrcfg::HrGetRegistryInfo
//
// Purpose: Fill our in-memory state with data from the registry.
//
// Arguments:
// fInstalling [in] TRUE if component is being installed, FALSE if
// it is just being initialized (already installed)
//
// Returns: HRESULT, Error code.
//
// Author: danielwe 5 Mar 1997
//
// Notes:
//
HRESULT CSrvrcfg::HrGetRegistryInfo(BOOL fInstalling) { HRESULT hr = S_OK; HKEY hkeyParams;
// Set reasonable defaults in case the key is missing
m_sdd.fAnnounce = FALSE;
if (m_pf == PF_SERVER) { m_sdd.dwSize = 3; m_sdd.fLargeCache = TRUE; } else { m_sdd.dwSize = 1; m_sdd.fLargeCache = FALSE; }
if (!m_fUpgradeFromWks) { hr = HrRegOpenKeyEx(HKEY_LOCAL_MACHINE, c_szServerParams, KEY_READ, &hkeyParams); if (SUCCEEDED(hr)) { DWORD dwSize;
hr = HrRegQueryDword(hkeyParams, c_szLmAnnounce, (DWORD *)&m_sdd.fAnnounce); if (FAILED(hr)) { if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) { hr = S_OK; } else { goto err; } }
hr = HrRegQueryDword(hkeyParams, c_szSize, &dwSize); if (FAILED(hr)) { if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) { hr = S_OK; } else { goto err; } } else { AssertSz(dwSize != 0, "This shouldn't be 0!"); m_sdd.dwSize = dwSize; }
RegCloseKey(hkeyParams); }
if (!fInstalling) { // RAID #94442
// Only read old value if this is not an initial install.
// We want our default to be written when this is a first time install.
AssertSz(m_hkeyMM, "No MM registry key??");
hr = HrRegQueryDword(m_hkeyMM, c_szLargeCache, (DWORD *) &m_sdd.fLargeCache); if (FAILED(hr)) { if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND)) { hr = S_OK; } else { goto err; } } } } else { TraceTag(ttidSrvrCfg, "Upgrading from workstation product so we're " "ignoring the registry read code."); }
err: TraceError("CSrvrcfg::HrGetRegistryInfo", hr); return hr; }
//+---------------------------------------------------------------------------
//
// Member: CSrvrcfg::HrSetRegistryInfo
//
// Purpose: Save out our in-memory state to the registry.
//
// Arguments:
// (none)
//
// Returns: HRESULT, Error code.
//
// Author: danielwe 5 Mar 1997
//
// Notes:
//
HRESULT CSrvrcfg::HrSetRegistryInfo() { HRESULT hr = S_OK; HKEY hkeyParams;
hr = HrRegOpenKeyEx(HKEY_LOCAL_MACHINE, c_szServerParams, KEY_ALL_ACCESS, &hkeyParams); if (SUCCEEDED(hr)) { hr = HrRegSetDword(hkeyParams, c_szLmAnnounce, m_sdd.fAnnounce); if (SUCCEEDED(hr)) { hr = HrRegSetDword(hkeyParams, c_szSize, m_sdd.dwSize); }
RegCloseKey(hkeyParams); }
if (SUCCEEDED(hr)) { AssertSz(m_hkeyMM, "Why is this not open?");
hr = HrRegSetDword(m_hkeyMM, c_szLargeCache, m_sdd.fLargeCache); }
TraceError("CSrvrcfg::HrSetRegistryInfo", hr); return hr; }
|