204 lines
5.2 KiB
C++
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;
|
|
}
|