windows-nt/Source/XPSP1/NT/net/config/netcfg/msclicfg/browsdlg.cpp
2020-09-26 16:20:57 +08:00

204 lines
5.2 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: B R O W S D L G . C P P
//
// Contents: Dialog box handling for Browser configuration.
//
// Notes:
//
// Author: danielwe 3 Mar 1997
//
//----------------------------------------------------------------------------
#include "pch.h"
#pragma hdrstop
#include <lm.h>
#include <icanon.h>
#include "mscliobj.h"
#include "ncreg.h"
#include "ncui.h"
static const WCHAR c_szWksParams[] = L"System\\CurrentControlSet\\Services\\LanmanWorkstation\\Parameters";
static const WCHAR c_szBrowserParams[] = L"System\\CurrentControlSet\\Services\\Browser\\Parameters";
static const WCHAR c_szOtherDomains[] = L"OtherDomains";
//+---------------------------------------------------------------------------
//
// Function: FIsValidDomainName
//
// Purpose: Returns TRUE if the given domain name is a valid NetBIOS name.
//
// Arguments:
// pszName [in] Domain name to validate
//
// Returns: TRUE if the name is valid, FALSE otherwise.
//
// Author: danielwe 3 Mar 1997
//
// Notes: $REVIEW (danielwe): Use new netsetup function instead?
//
BOOL FIsValidDomainName(PCWSTR pszName)
{
NET_API_STATUS nerr;
// Make sure the given name is a valid domain name
nerr = NetpNameValidate(NULL, const_cast<PWSTR>(pszName),
NAMETYPE_DOMAIN, 0L);
return !!(NERR_Success == nerr);
}
//+---------------------------------------------------------------------------
//
// Member: CMSClient::HrGetBrowserRegistryInfo
//
// Purpose: Read data from the registry into an in-memory copy.
//
// Arguments:
// (none)
//
// Returns: HRESULT, Error code.
//
// Author: danielwe 3 Mar 1997
//
// Notes:
//
HRESULT CMSClient::HrGetBrowserRegistryInfo()
{
HRESULT hr = S_OK;
HKEY hkeyWksParams = NULL;
Assert(!m_szDomainList);
// Open LanmanWorkstation Parameters key
hr = HrRegOpenKeyEx(HKEY_LOCAL_MACHINE, c_szWksParams,
KEY_READ, &hkeyWksParams);
if (FAILED(hr))
{
if (hr == HRESULT_FROM_WIN32 (ERROR_FILE_NOT_FOUND))
{
// Optional value. Ok if not there.
hr = S_OK;
}
else
{
goto err;
}
}
if (hkeyWksParams)
{
hr = HrRegQueryMultiSzWithAlloc(hkeyWksParams, c_szOtherDomains,
&m_szDomainList);
if (FAILED(hr))
{
if (hr == HRESULT_FROM_WIN32 (ERROR_FILE_NOT_FOUND))
{
AssertSz(!m_szDomainList, "Call failed, so why is this not "
"still NULL?");
// No problem if value is not there.
hr = S_OK;
}
else
{
goto err;
}
}
}
Assert(SUCCEEDED(hr));
// If we didn't get a domain list yet, make a new default one.
if (!m_szDomainList)
{
// Allocate space for empty string
m_szDomainList = new WCHAR[1];
if (m_szDomainList != NULL)
{
*m_szDomainList = 0;
}
}
err:
RegSafeCloseKey(hkeyWksParams);
TraceError("CMSClient::HrGetBrowserRegistryInfo", hr);
return hr;
}
//+---------------------------------------------------------------------------
//
// Member: CMSClient::HrSetBrowserRegistryInfo
//
// Purpose: Write what we have saved in memory into the registry.
//
// Arguments:
// (none)
//
// Returns: HRESULT, Error code.
//
// Author: danielwe 3 Mar 1997
//
// Notes:
//
HRESULT CMSClient::HrSetBrowserRegistryInfo()
{
HRESULT hr = S_OK;
if (m_fBrowserChanges)
{
HKEY hkeyBrowserParams = NULL;
// Verify that the Browser Parameters key exists. If not, we can't
// continue.
hr = HrRegOpenKeyEx(HKEY_LOCAL_MACHINE, c_szBrowserParams,
KEY_ALL_ACCESS, &hkeyBrowserParams);
if (SUCCEEDED(hr))
{
HKEY hkeyWksParams = NULL;
// Open LanmanWorkstation Parameters key
hr = HrRegOpenKeyEx(HKEY_LOCAL_MACHINE, c_szWksParams,
KEY_ALL_ACCESS, &hkeyWksParams);
if (SUCCEEDED(hr))
{
hr = HrRegSetMultiSz(hkeyWksParams, c_szOtherDomains,
m_szDomainList);
RegSafeCloseKey(hkeyWksParams);
}
RegSafeCloseKey(hkeyBrowserParams);
}
}
TraceError("CMSClient::HrSetBrowserRegistryInfo", hr);
return hr;
}
//+---------------------------------------------------------------------------
//
// Member: CMSClient::SetBrowserDomainList
//
// Purpose: Replace the current domain list with a new copy (obtained from
// the dialog).
//
// Arguments:
// pszNewList [in] New domain list in MULTI_SZ format.
//
// Returns: Nothing.
//
// Author: danielwe 3 Mar 1997
//
// Notes:
//
VOID CMSClient::SetBrowserDomainList(PWSTR pszNewList)
{
delete [] m_szDomainList;
m_szDomainList = pszNewList;
m_fBrowserChanges = TRUE;
}