windows-nt/Source/XPSP1/NT/admin/snapin/wsecmgr/locdesc.cpp
2020-09-26 16:20:57 +08:00

176 lines
4.6 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation 1996-2001.
//
// File: locdesc.cpp
//
// Contents: implementation of CSetLocationDescription
//
//----------------------------------------------------------------------------
#include "stdafx.h"
#include "wsecmgr.h"
#include "snapmgr.h"
#include "cookie.h"
#include "LocDesc.h"
#include "util.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSetLocationDescription dialog
CSetLocationDescription::CSetLocationDescription(CWnd* pParent /*=NULL*/)
: CHelpDialog(a218HelpIDs, IDD, pParent)
{
//{{AFX_DATA_INIT(CSetLocationDescription)
m_strDesc = _T("");
//}}AFX_DATA_INIT
}
void CSetLocationDescription::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSetLocationDescription)
DDX_Text(pDX, IDC_DESCRIPTION, m_strDesc);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSetLocationDescription, CHelpDialog)
//{{AFX_MSG_MAP(CSetLocationDescription)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CSetLocationDescription::Initialize(CFolder *pFolder, CComponentDataImpl *pCDI) {
m_pFolder = pFolder;
m_pCDI = pCDI;
m_strDesc = pFolder->GetDesc();
}
/////////////////////////////////////////////////////////////////////////////
// CSetLocationDescription message handlers
DWORD
SetDescHelper(HKEY hKey,CFolder *pFolder,CString strDesc) {
DWORD status = RegSetValueEx(hKey,
L"Description", // Value name (not localized)
0, // Reserved
REG_SZ,
(CONST BYTE *)(LPCTSTR)strDesc,
(strDesc.GetLength()+1)*sizeof(TCHAR));
if (NO_ERROR == status) {
pFolder->SetDesc(strDesc);
} else {
// Couldn't set a value
}
RegCloseKey(hKey);
return status;
}
void CSetLocationDescription::OnOK()
{
DWORD status = 0;
HKEY hKey = 0;
CString strLocKey;
CString strErr;
LPTSTR szName = 0;
LPTSTR sz = 0;
UpdateData(TRUE);
strLocKey.LoadString(IDS_TEMPLATE_LOCATION_KEY);
strLocKey += L'\\';
szName = m_pFolder->GetName();
// replace '\' with '/' because Registry does not
// take '/' in a single key
//
sz = wcschr(szName, L'\\');
while (sz) {
*sz = L'/';
sz = wcschr(sz, L'\\');
}
strLocKey += szName;
status = RegOpenKeyEx(HKEY_LOCAL_MACHINE,
strLocKey,
0,
KEY_SET_VALUE,
&hKey);
if (NO_ERROR == status) {
status = SetDescHelper(hKey,m_pFolder,m_strDesc);
} else {
//
// Only display an error if we can read (and thus displayed)
// this key
//
if (NO_ERROR == RegOpenKeyEx(HKEY_LOCAL_MACHINE,
strLocKey,
0,
KEY_READ,
&hKey)) {
strErr.LoadString(IDS_ERR_GLOBAL_LOC_DESC);
MessageBox(strErr);
RegCloseKey(hKey);
}
}
if (NO_ERROR != status) {
//
// Bug 375324: if we can't succeed under HKLM try under HKCU
//
status = RegOpenKeyEx(HKEY_CURRENT_USER,
strLocKey,
0,
KEY_SET_VALUE,
&hKey);
if (NO_ERROR == status) {
status = SetDescHelper(hKey,m_pFolder,m_strDesc);
} else {
//
// Only display an error if we can read (and thus displayed)
// this key
//
if (NO_ERROR == RegOpenKeyEx(HKEY_CURRENT_USER,
strLocKey,
0,
KEY_READ,
&hKey)) {
strErr.LoadString(IDS_ERR_LOCAL_LOC_DESC);
MessageBox(strErr);
RegCloseKey(hKey);
}
}
}
szName = m_pFolder->GetName();
// replace '/' with '\' because Registry does not
sz = wcschr(szName, L'/');
while (sz) {
*sz = L'\\';
sz = wcschr(sz, L'/');
}
LPCONSOLENAMESPACE tempnamespace = m_pCDI->GetNameSpace(); //Raid #252638, 5/2/2001
if( tempnamespace )
{
tempnamespace->SetItem(m_pFolder->GetScopeItem());
}
DestroyWindow();
}
void CSetLocationDescription::OnCancel()
{
DestroyWindow();
}