1366 lines
38 KiB
C++
1366 lines
38 KiB
C++
//+---------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1993 - 1997.
|
|
//
|
|
// File: locppg.cpp
|
|
//
|
|
// Contents: Implements the classes CGeneralPropertyPage,
|
|
// CLocationPropertyPage, CSecurityPropertyPage and
|
|
// CIdentityPropertyPage which manage the four property
|
|
// pages per AppId.
|
|
//
|
|
// Classes:
|
|
//
|
|
// Methods: CGeneralPropertyPage::CGeneralPropertyPage
|
|
// CGeneralPropertyPage::~CGeneralPropertyPage
|
|
// CGeneralPropertyPage::DoDataExchange
|
|
// CLocationPropertyPage::CLocationPropertyPage
|
|
// CLocationPropertyPage::~CLocationPropertyPage
|
|
// CLocationPropertyPage::DoDataExchange
|
|
// CLocationPropertyPage::OnBrowse
|
|
// CLocationPropertyPage::OnRunRemote
|
|
// CLocationPropertyPage::UpdateControls
|
|
// CLocationPropertyPage::OnSetActive
|
|
// CLocationPropertyPage::OnChange
|
|
// CSecurityPropertyPage::CSecurityPropertyPage
|
|
// CSecurityPropertyPage::~CSecurityPropertyPage
|
|
// CSecurityPropertyPage::DoDataExchange
|
|
// CSecurityPropertyPage::OnDefaultAccess
|
|
// CSecurityPropertyPage::OnCustomAccess
|
|
// CSecurityPropertyPage::OnDefaultLaunch
|
|
// CSecurityPropertyPage::OnCustomLaunch
|
|
// CSecurityPropertyPage::OnDefaultConfig
|
|
// CSecurityPropertyPage::OnCustomConfig
|
|
// CSecurityPropertyPage::OnEditAccess
|
|
// CSecurityPropertyPage::OnEditLaunch
|
|
// CSecurityPropertyPage::OnEditConfig
|
|
// CIdentityPropertyPage::CIdentityPropertyPage
|
|
// CIdentityPropertyPage::~CIdentityPropertyPage
|
|
// CIdentityPropertyPage::DoDataExchange
|
|
// CIdentityPropertyPage::OnBrowse
|
|
// CIdentityPropertyPage::OnChange
|
|
//
|
|
// History: 23-Apr-96 BruceMa Created.
|
|
// ??-Oct-97 ronans General fixes and cleanup
|
|
//
|
|
//----------------------------------------------------------------------
|
|
|
|
|
|
#include "stdafx.h"
|
|
#include "afxtempl.h"
|
|
#include "assert.h"
|
|
#include "resource.h"
|
|
#include "types.h"
|
|
#include "LocPPg.h"
|
|
#include "clspsht.h"
|
|
#include "datapkt.h"
|
|
|
|
#if !defined(STANDALONE_BUILD)
|
|
extern "C"
|
|
{
|
|
#include <getuser.h>
|
|
}
|
|
#endif
|
|
|
|
#include "util.h"
|
|
#include "virtreg.h"
|
|
|
|
#if !defined(STANDALONE_BUILD)
|
|
#include "ntlsa.h"
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char BASED_CODE THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
IMPLEMENT_DYNCREATE(CGeneralPropertyPage, CPropertyPage)
|
|
IMPLEMENT_DYNCREATE(CLocationPropertyPage, CPropertyPage)
|
|
IMPLEMENT_DYNCREATE(CSecurityPropertyPage, CPropertyPage)
|
|
IMPLEMENT_DYNCREATE(CIdentityPropertyPage, CPropertyPage)
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CGeneralPropertyPage property page
|
|
|
|
CGeneralPropertyPage::CGeneralPropertyPage() : CPropertyPage(CGeneralPropertyPage::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CGeneralPropertyPage)
|
|
m_szServerName = _T("");
|
|
m_szServerPath = _T("");
|
|
m_szServerType = _T("");
|
|
m_szPathTitle = _T("");
|
|
m_szComputerName = _T("");
|
|
//}}AFX_DATA_INIT
|
|
|
|
m_authLevel = Defaultx;
|
|
m_authLevelIndex = -1;
|
|
m_bChanged = FALSE;
|
|
}
|
|
|
|
CGeneralPropertyPage::~CGeneralPropertyPage()
|
|
{
|
|
CancelChanges();
|
|
}
|
|
|
|
void CGeneralPropertyPage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CPropertyPage::DoDataExchange(pDX);
|
|
|
|
switch (m_iServerType)
|
|
{
|
|
case INPROC:
|
|
m_szPathTitle.LoadString(IDS_PATH);
|
|
GetDlgItem(IDC_PATHTITLE)->ShowWindow(SW_SHOW);
|
|
GetDlgItem(IDC_MACHINETITLE)->ShowWindow(SW_HIDE);
|
|
GetDlgItem(IDC_SERVERPATH)->ShowWindow(SW_SHOW);
|
|
GetDlgItem(IDC_MACHINE)->ShowWindow(SW_HIDE);
|
|
m_szServerType.LoadString(IDS_SERVERTYPE_INPROC);
|
|
break;
|
|
|
|
case LOCALEXE:
|
|
m_szPathTitle.LoadString(IDS_PATH);
|
|
GetDlgItem(IDC_PATHTITLE)->ShowWindow(SW_SHOW);
|
|
GetDlgItem(IDC_MACHINETITLE)->ShowWindow(SW_HIDE);
|
|
GetDlgItem(IDC_SERVERPATH)->ShowWindow(SW_SHOW);
|
|
GetDlgItem(IDC_MACHINE)->ShowWindow(SW_HIDE);
|
|
m_szServerType.LoadString(IDS_SERVERTYPE_LOCALEXE);
|
|
break;
|
|
|
|
case SERVICE:
|
|
m_szPathTitle.LoadString(IDS_SERVICENAME);
|
|
GetDlgItem(IDC_PATHTITLE)->ShowWindow(SW_SHOW);
|
|
GetDlgItem(IDC_MACHINETITLE)->ShowWindow(SW_HIDE);
|
|
GetDlgItem(IDC_SERVERPATH)->ShowWindow(SW_SHOW);
|
|
GetDlgItem(IDC_MACHINE)->ShowWindow(SW_HIDE);
|
|
m_szServerType.LoadString(IDS_SERVERTYPE_SERVICE);
|
|
break;
|
|
|
|
case PURE_REMOTE:
|
|
GetDlgItem(IDC_PATHTITLE)->ShowWindow(SW_HIDE);
|
|
GetDlgItem(IDC_MACHINETITLE)->ShowWindow(SW_SHOW);
|
|
GetDlgItem(IDC_SERVERPATH)->ShowWindow(SW_HIDE);
|
|
GetDlgItem(IDC_MACHINE)->ShowWindow(SW_SHOW);
|
|
m_szServerType.LoadString(IDS_SERVERTYPE_PURE_REMOTE);
|
|
break;
|
|
|
|
case REMOTE_LOCALEXE:
|
|
m_szPathTitle.LoadString(IDS_PATH);
|
|
GetDlgItem(IDC_PATHTITLE)->ShowWindow(SW_SHOW);
|
|
GetDlgItem(IDC_MACHINETITLE)->ShowWindow(SW_SHOW);
|
|
GetDlgItem(IDC_SERVERPATH)->ShowWindow(SW_SHOW);
|
|
GetDlgItem(IDC_MACHINE)->ShowWindow(SW_SHOW);
|
|
m_szServerType.LoadString(IDS_SERVERTYPE_REMOTE_LOCALEXE);
|
|
break;
|
|
|
|
case REMOTE_SERVICE:
|
|
m_szPathTitle.LoadString(IDS_SERVICENAME);
|
|
GetDlgItem(IDC_PATHTITLE)->ShowWindow(SW_SHOW);
|
|
GetDlgItem(IDC_MACHINETITLE)->ShowWindow(SW_SHOW);
|
|
GetDlgItem(IDC_SERVERPATH)->ShowWindow(SW_SHOW);
|
|
GetDlgItem(IDC_MACHINE)->ShowWindow(SW_SHOW);
|
|
m_szServerType.LoadString(IDS_SERVERTYPE_REMOTE_SERVICE);
|
|
break;
|
|
|
|
case SURROGATE:
|
|
m_szPathTitle.LoadString(IDS_PATH);
|
|
GetDlgItem(IDC_PATHTITLE)->ShowWindow(SW_SHOW);
|
|
GetDlgItem(IDC_MACHINETITLE)->ShowWindow(SW_HIDE);
|
|
GetDlgItem(IDC_SERVERPATH)->ShowWindow(SW_SHOW);
|
|
GetDlgItem(IDC_MACHINE)->ShowWindow(SW_HIDE);
|
|
m_szServerType.LoadString(IDS_SERVERTYPE_SURROGATE);
|
|
break;
|
|
|
|
default:
|
|
m_szServerType.LoadString(IDS_SERVERTYPE_UNKNOWN);
|
|
break;
|
|
}
|
|
|
|
//{{AFX_DATA_MAP(CGeneralPropertyPage)
|
|
DDX_Control(pDX, IDC_COMBO1, m_authLevelCBox);
|
|
DDX_Text(pDX, IDC_SERVERNAME, m_szServerName);
|
|
DDX_Text(pDX, IDC_SERVERPATH, m_szServerPath);
|
|
DDX_Text(pDX, IDC_SERVERTYPE, m_szServerType);
|
|
DDX_Text(pDX, IDC_PATHTITLE, m_szPathTitle);
|
|
DDX_Text(pDX, IDC_MACHINE, m_szComputerName);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
void CGeneralPropertyPage::OnEditchangeCombo1()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
|
|
}
|
|
|
|
void CGeneralPropertyPage::OnSelchangeCombo1()
|
|
{
|
|
int iSel;
|
|
|
|
// Get the new selection
|
|
iSel = m_authLevelCBox.GetCurSel();
|
|
m_authLevel = (AUTHENTICATIONLEVEL) m_authLevelCBox.GetItemData(iSel);
|
|
|
|
// Virtually write it to the registry
|
|
if (m_authLevelIndex == -1)
|
|
{
|
|
g_virtreg.NewRegDwordNamedValue(g_hAppid,
|
|
NULL,
|
|
TEXT("AuthenticationLevel"),
|
|
m_authLevel,
|
|
&m_authLevelIndex);
|
|
}
|
|
else
|
|
{
|
|
g_virtreg.ChgRegDwordNamedValue(m_authLevelIndex,
|
|
m_authLevel);
|
|
}
|
|
|
|
// This is a reboot event
|
|
g_fReboot = TRUE;
|
|
|
|
// Enable the Apply button
|
|
SetModified(m_bChanged = TRUE);
|
|
}
|
|
|
|
BOOL CGeneralPropertyPage::OnInitDialog()
|
|
{
|
|
int iIndex;
|
|
int err;
|
|
CPropertyPage::OnInitDialog();
|
|
|
|
// Populate the authentication combo boxe
|
|
CString sTemp;
|
|
|
|
m_authLevelCBox.ResetContent();
|
|
|
|
// Associate values with entries
|
|
sTemp.LoadString(IDS_DEFAULT);
|
|
iIndex = m_authLevelCBox.AddString(sTemp);
|
|
m_authLevelCBox.SetItemData(iIndex, Defaultx);
|
|
|
|
sTemp.LoadString(IDS_NONE);
|
|
iIndex = m_authLevelCBox.AddString(sTemp);
|
|
m_authLevelCBox.SetItemData(iIndex, None);
|
|
|
|
sTemp.LoadString(IDS_CONNECT);
|
|
iIndex = m_authLevelCBox.AddString(sTemp);
|
|
m_authLevelCBox.SetItemData(iIndex, Connect);
|
|
|
|
sTemp.LoadString(IDS_CALL);
|
|
iIndex = m_authLevelCBox.AddString(sTemp);
|
|
m_authLevelCBox.SetItemData(iIndex, Call);
|
|
|
|
sTemp.LoadString(IDS_PACKET);
|
|
iIndex = m_authLevelCBox.AddString(sTemp);
|
|
m_authLevelCBox.SetItemData(iIndex, Packet);
|
|
|
|
sTemp.LoadString(IDS_PACKETINTEGRITY);
|
|
iIndex = m_authLevelCBox.AddString(sTemp);
|
|
m_authLevelCBox.SetItemData(iIndex, PacketIntegrity);
|
|
|
|
sTemp.LoadString(IDS_PACKETPRIVACY);
|
|
iIndex = m_authLevelCBox.AddString(sTemp);
|
|
m_authLevelCBox.SetItemData(iIndex, PacketPrivacy);
|
|
|
|
m_authLevelCBox.SetCurSel(Defaultx);
|
|
|
|
// Attempt to read HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\OLE.
|
|
// LegacyAuthenticationLevel
|
|
err = g_virtreg.ReadRegDwordNamedValue(g_hAppid,
|
|
NULL,
|
|
TEXT("AuthenticationLevel"),
|
|
&m_authLevelIndex);
|
|
if (err == ERROR_SUCCESS)
|
|
{
|
|
CDataPacket * pCdp = g_virtreg.GetAt(m_authLevelIndex);
|
|
|
|
m_authLevel = (AUTHENTICATIONLEVEL) pCdp->GetDwordValue();
|
|
}
|
|
else if (err != ERROR_ACCESS_DENIED && err != ERROR_FILE_NOT_FOUND)
|
|
{
|
|
g_util.PostErrorMessage();
|
|
}
|
|
else
|
|
m_authLevel = Defaultx;
|
|
|
|
// AuthenticationLevel
|
|
for (int k = 0; k < m_authLevelCBox.GetCount(); k++)
|
|
{
|
|
if (((AUTHENTICATIONLEVEL) m_authLevelCBox.GetItemData(k)) == m_authLevel)
|
|
{
|
|
m_authLevelCBox.SetCurSel(k);
|
|
break;
|
|
}
|
|
}
|
|
|
|
SetModified(m_bChanged = FALSE);
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Member: CGeneralPropertyPage::ValidateChanges
|
|
//
|
|
// Synopsis: Called to validate the changes before updating
|
|
//
|
|
// Arguments: None
|
|
//
|
|
// Returns: BOOL success flag
|
|
//
|
|
// Algorithm: N/A
|
|
//
|
|
// History: 27-Oct-97 Ronans Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
BOOL CGeneralPropertyPage::ValidateChanges()
|
|
{
|
|
UpdateData(TRUE);
|
|
return TRUE;
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Member: CGeneralPropertyPage::UpdateChanges
|
|
//
|
|
// Synopsis: Called to update the changes to registry
|
|
//
|
|
// Arguments: hkAppID - HKEY for AppID
|
|
//
|
|
// Returns: BOOL success flag
|
|
//
|
|
// Algorithm: N/A
|
|
//
|
|
// History: 27-Oct-97 Ronans Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
BOOL CGeneralPropertyPage::UpdateChanges(HKEY hkAppID)
|
|
{
|
|
if (m_authLevelIndex >= 0)
|
|
{
|
|
if (m_bChanged)
|
|
{
|
|
// delete key if its the default
|
|
if (m_authLevel == Defaultx)
|
|
g_virtreg.MarkForDeletion(m_authLevelIndex);
|
|
g_virtreg.Apply(m_authLevelIndex);
|
|
}
|
|
g_virtreg.Remove(m_authLevelIndex);
|
|
m_authLevelIndex = -1;
|
|
}
|
|
m_bChanged = FALSE;
|
|
return TRUE;
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Member: CGeneralPropertyPage::CancelChanges
|
|
//
|
|
// Synopsis: Called to cancel the changes to registry
|
|
//
|
|
// Arguments: None
|
|
//
|
|
// Returns: BOOL success flag
|
|
//
|
|
// Algorithm: N/A
|
|
//
|
|
// History: 27-Oct-97 Ronans Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
BOOL CGeneralPropertyPage::CancelChanges()
|
|
{
|
|
if (m_authLevelIndex >= 0)
|
|
{
|
|
g_virtreg.Remove(m_authLevelIndex);
|
|
m_authLevelIndex = -1;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
BOOL CGeneralPropertyPage::OnHelpInfo(HELPINFO* pHelpInfo)
|
|
{
|
|
if(-1 != pHelpInfo->iCtrlId)
|
|
{
|
|
WORD hiWord = 0x8000 | CGeneralPropertyPage::IDD;
|
|
WORD loWord = (WORD) pHelpInfo->iCtrlId;
|
|
DWORD dwLong = MAKELONG(loWord,hiWord);
|
|
|
|
WinHelp(dwLong, HELP_CONTEXTPOPUP);
|
|
return TRUE;
|
|
}
|
|
else
|
|
return CPropertyPage::OnHelpInfo(pHelpInfo);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CGeneralPropertyPage, CPropertyPage)
|
|
//{{AFX_MSG_MAP(CGeneralPropertyPage)
|
|
ON_WM_HELPINFO()
|
|
ON_CBN_EDITCHANGE(IDC_COMBO1, OnEditchangeCombo1)
|
|
ON_CBN_SELCHANGE(IDC_COMBO1, OnSelchangeCombo1)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CLocationPropertyPage property page
|
|
|
|
CLocationPropertyPage::CLocationPropertyPage() : CPropertyPage(CLocationPropertyPage::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CLocationPropertyPage)
|
|
m_szComputerName = _T("");
|
|
m_fAtStorage = FALSE;
|
|
m_fLocal = FALSE;
|
|
m_fRemote = FALSE;
|
|
m_iInitial = 2;
|
|
//}}AFX_DATA_INIT
|
|
m_bChanged = FALSE;
|
|
}
|
|
|
|
CLocationPropertyPage::~CLocationPropertyPage()
|
|
{
|
|
}
|
|
|
|
void CLocationPropertyPage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CPropertyPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CLocationPropertyPage)
|
|
DDX_Text(pDX, IDC_EDIT1, m_szComputerName);
|
|
DDV_MaxChars(pDX, m_szComputerName, 256);
|
|
DDX_Check(pDX, IDC_CHECK1, m_fAtStorage);
|
|
DDX_Check(pDX, IDC_CHECK2, m_fLocal);
|
|
DDX_Check(pDX, IDC_CHECK3, m_fRemote);
|
|
//}}AFX_DATA_MAP
|
|
if (m_fRemote)
|
|
{
|
|
pDX->PrepareEditCtrl(IDC_EDIT1);
|
|
if (m_szComputerName.GetLength() == 0 && m_iInitial == 0)
|
|
{
|
|
CString szTemp;
|
|
szTemp.LoadString(IDS_INVALIDSERVER);
|
|
MessageBox(szTemp);
|
|
pDX->Fail();
|
|
}
|
|
}
|
|
|
|
if (m_fAtStorage)
|
|
{
|
|
m_pPage1->m_szComputerName.LoadString(IDS_ATSTORAGE);
|
|
}
|
|
else
|
|
m_pPage1->m_szComputerName = m_szComputerName;
|
|
|
|
switch(m_pPage1->m_iServerType)
|
|
{
|
|
case LOCALEXE:
|
|
case SERVICE:
|
|
if (m_fAtStorage || m_fRemote)
|
|
m_pPage1->m_iServerType += 3;
|
|
break;
|
|
|
|
case REMOTE_LOCALEXE:
|
|
case REMOTE_SERVICE:
|
|
if (!(m_fAtStorage || m_fRemote))
|
|
m_pPage1->m_iServerType -= 3;
|
|
break;
|
|
}
|
|
|
|
if (m_iInitial)
|
|
m_iInitial--;
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CLocationPropertyPage, CPropertyPage)
|
|
//{{AFX_MSG_MAP(CLocationPropertyPage)
|
|
ON_BN_CLICKED(IDC_BUTTON1, OnBrowse)
|
|
ON_BN_CLICKED(IDC_CHECK3, OnRunRemote)
|
|
ON_EN_CHANGE(IDC_EDIT1, OnChange)
|
|
ON_BN_CLICKED(IDC_CHECK1, OnChange)
|
|
ON_BN_CLICKED(IDC_CHECK2, OnChange)
|
|
ON_WM_HELPINFO()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
void CLocationPropertyPage::OnBrowse()
|
|
{
|
|
TCHAR szMachine[MAX_PATH];
|
|
|
|
if (g_util.InvokeMachineBrowser(szMachine))
|
|
{
|
|
// Strip off "\\" - if present
|
|
int nIndex = 0;
|
|
while(szMachine[nIndex] == TEXT('\\'))
|
|
nIndex++;
|
|
|
|
GetDlgItem(IDC_EDIT1)->SetWindowText(&szMachine[nIndex]);
|
|
SetModified(m_bChanged = TRUE);
|
|
}
|
|
}
|
|
|
|
void CLocationPropertyPage::OnRunRemote()
|
|
{
|
|
SetModified(m_bChanged = TRUE);
|
|
UpdateControls();
|
|
}
|
|
|
|
void CLocationPropertyPage::UpdateControls()
|
|
{
|
|
BOOL fChecked = IsDlgButtonChecked(IDC_CHECK3);
|
|
GetDlgItem(IDC_EDIT1)->EnableWindow(fChecked);
|
|
|
|
// Leave this browse button disabled until after SUR Beta 2
|
|
GetDlgItem(IDC_BUTTON1)->EnableWindow(fChecked);
|
|
}
|
|
|
|
BOOL CLocationPropertyPage::OnSetActive()
|
|
{
|
|
if (!m_fCanBeLocal)
|
|
GetDlgItem(IDC_CHECK2)->EnableWindow(FALSE);
|
|
UpdateControls();
|
|
return CPropertyPage::OnSetActive();
|
|
}
|
|
|
|
void CLocationPropertyPage::OnChange()
|
|
{
|
|
SetModified(m_bChanged = TRUE);
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Member: CLocationPropertyPage::ValidateChanges
|
|
//
|
|
// Synopsis: Called to validate the changes before updating
|
|
//
|
|
// Arguments: None
|
|
//
|
|
// Returns: BOOL success flag
|
|
//
|
|
// Algorithm: N/A
|
|
//
|
|
// History: 27-Oct-97 Ronans Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
BOOL CLocationPropertyPage::ValidateChanges()
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
// Check that remote servers are valid connectable machines
|
|
if (m_fRemote)
|
|
{
|
|
if (!g_util.VerifyRemoteMachine((TCHAR *) LPCTSTR(m_szComputerName)))
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Member: CLocationPropertyPage::UpdateChanges
|
|
//
|
|
// Synopsis: Called to update the changes to registry
|
|
//
|
|
// Arguments: hkAppID - HKEY for AppID
|
|
//
|
|
// Returns: BOOL success flag
|
|
//
|
|
// Algorithm: N/A
|
|
//
|
|
// History: 27-Oct-97 Ronans Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
BOOL CLocationPropertyPage::UpdateChanges(HKEY hkAppID)
|
|
{
|
|
long lErr;
|
|
|
|
////////////////////////////////////////////////////////////////////
|
|
// Persist Location property page data
|
|
if (m_fAtStorage)
|
|
lErr = RegSetValueEx(
|
|
hkAppID,
|
|
TEXT("ActivateAtStorage"),
|
|
0,
|
|
REG_SZ,
|
|
(BYTE *)TEXT("Y"),
|
|
sizeof(TCHAR) * 2);
|
|
else
|
|
lErr = RegDeleteValue(hkAppID, TEXT("ActivateAtStorage"));
|
|
|
|
|
|
if (m_fRemote)
|
|
lErr = RegSetValueEx(
|
|
hkAppID,
|
|
TEXT("RemoteServerName"),
|
|
0,
|
|
REG_SZ,
|
|
(BYTE *)(LPCTSTR)m_szComputerName,
|
|
(1 + m_szComputerName.GetLength()) * sizeof(TCHAR));
|
|
else
|
|
lErr = RegDeleteValue(hkAppID, TEXT("RemoteServerName"));
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Member: CLocationPropertyPage::CancelChanges
|
|
//
|
|
// Synopsis: Called to cancel the changes to registry
|
|
//
|
|
// Arguments: None
|
|
//
|
|
// Returns: BOOL success flag
|
|
//
|
|
// Algorithm: N/A
|
|
//
|
|
// History: 27-Oct-97 Ronans Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
BOOL CLocationPropertyPage::CancelChanges()
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CSecurityPropertyPage property page
|
|
|
|
CSecurityPropertyPage::CSecurityPropertyPage() : CPropertyPage(CSecurityPropertyPage::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CSecurityPropertyPage)
|
|
m_iAccess = -1;
|
|
m_iLaunch = -1;
|
|
m_iConfig = -1;
|
|
m_iAccessIndex = -1;
|
|
m_iLaunchIndex = -1;
|
|
m_iConfigurationIndex = -1;
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
CSecurityPropertyPage::~CSecurityPropertyPage()
|
|
{
|
|
}
|
|
|
|
void CSecurityPropertyPage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CPropertyPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CSecurityPropertyPage)
|
|
DDX_Radio(pDX, IDC_RADIO1, m_iAccess);
|
|
DDX_Radio(pDX, IDC_RADIO3, m_iLaunch);
|
|
DDX_Radio(pDX, IDC_RADIO5, m_iConfig);
|
|
//}}AFX_DATA_MAP
|
|
GetDlgItem(IDC_BUTTON1)->EnableWindow(1 == m_iAccess);
|
|
GetDlgItem(IDC_BUTTON2)->EnableWindow(1 == m_iLaunch);
|
|
GetDlgItem(IDC_BUTTON3)->EnableWindow(1 == m_iConfig);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CSecurityPropertyPage, CPropertyPage)
|
|
//{{AFX_MSG_MAP(CSecurityPropertyPage)
|
|
ON_BN_CLICKED(IDC_RADIO1, OnDefaultAccess)
|
|
ON_BN_CLICKED(IDC_RADIO2, OnCustomAccess)
|
|
ON_BN_CLICKED(IDC_RADIO3, OnDefaultLaunch)
|
|
ON_BN_CLICKED(IDC_RADIO4, OnCustomLaunch)
|
|
ON_BN_CLICKED(IDC_RADIO5, OnDefaultConfig)
|
|
ON_BN_CLICKED(IDC_RADIO6, OnCustomConfig)
|
|
ON_BN_CLICKED(IDC_BUTTON1, OnEditAccess)
|
|
ON_BN_CLICKED(IDC_BUTTON2, OnEditLaunch)
|
|
ON_BN_CLICKED(IDC_BUTTON3, OnEditConfig)
|
|
ON_WM_HELPINFO()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
void CSecurityPropertyPage::OnDefaultAccess()
|
|
{
|
|
// Disable the edit access permissions window
|
|
UpdateData(TRUE);
|
|
|
|
// If there is an SD here then mark it for delete
|
|
if (m_iAccessIndex != -1)
|
|
{
|
|
CDataPacket * pCdp = g_virtreg.GetAt(m_iAccessIndex);
|
|
pCdp->MarkForDeletion(TRUE);
|
|
SetModified(TRUE);
|
|
}
|
|
}
|
|
|
|
void CSecurityPropertyPage::OnCustomAccess()
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
// If there is an SD here then unmark it for delete
|
|
if (m_iAccessIndex != -1)
|
|
{
|
|
CDataPacket * pCdp = g_virtreg.GetAt(m_iAccessIndex);
|
|
pCdp->MarkForDeletion(FALSE);
|
|
SetModified(TRUE);
|
|
}
|
|
}
|
|
|
|
void CSecurityPropertyPage::OnDefaultLaunch()
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
// If there is an SD here then mark it for delete
|
|
if (m_iLaunchIndex != -1)
|
|
{
|
|
CDataPacket * pCdp = g_virtreg.GetAt(m_iLaunchIndex);
|
|
pCdp->MarkForDeletion(TRUE);
|
|
SetModified(TRUE);
|
|
}
|
|
}
|
|
|
|
void CSecurityPropertyPage::OnCustomLaunch()
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
// If there is an SD here then unmark it for delete
|
|
if (m_iLaunchIndex != -1)
|
|
{
|
|
CDataPacket *pCdp = g_virtreg.GetAt(m_iLaunchIndex);
|
|
pCdp->MarkForDeletion(FALSE);
|
|
}
|
|
}
|
|
|
|
void CSecurityPropertyPage::OnDefaultConfig()
|
|
{
|
|
int err;
|
|
ULONG ulSize = 1;
|
|
BYTE *pbValue = NULL;
|
|
|
|
// Read the security descriptor for HKEY_CLASSES_ROOT
|
|
// Note: We always expect to get ERROR_INSUFFICIENT_BUFFER
|
|
err = RegGetKeySecurity(HKEY_CLASSES_ROOT,
|
|
OWNER_SECURITY_INFORMATION |
|
|
GROUP_SECURITY_INFORMATION |
|
|
DACL_SECURITY_INFORMATION,
|
|
pbValue,
|
|
&ulSize);
|
|
if (err == ERROR_INSUFFICIENT_BUFFER)
|
|
{
|
|
pbValue = new BYTE[ulSize];
|
|
if (pbValue == NULL)
|
|
{
|
|
return;
|
|
}
|
|
err = RegGetKeySecurity(HKEY_CLASSES_ROOT,
|
|
OWNER_SECURITY_INFORMATION |
|
|
GROUP_SECURITY_INFORMATION |
|
|
DACL_SECURITY_INFORMATION,
|
|
pbValue,
|
|
&ulSize);
|
|
}
|
|
// Change the custom security back to the default, if there is a custom
|
|
// security descriptor, but just in the virtual registry -
|
|
// in case the user cancels
|
|
if (m_iConfigurationIndex != -1)
|
|
{
|
|
CDataPacket * pCdb = g_virtreg.GetAt(m_iConfigurationIndex);
|
|
pCdb->ChgACL((SECURITY_DESCRIPTOR *) pbValue, TRUE);
|
|
pCdb->SetModified(TRUE);
|
|
}
|
|
delete pbValue;
|
|
|
|
UpdateData(TRUE);
|
|
SetModified(TRUE);
|
|
}
|
|
|
|
|
|
void CSecurityPropertyPage::OnCustomConfig()
|
|
{
|
|
// If a security descriptor already exists, then the user was here
|
|
// before, then selected default configuration. So just copy the
|
|
// original as the extant custom configuration
|
|
if (m_iConfigurationIndex != -1)
|
|
{
|
|
CDataPacket *pCdb = g_virtreg.GetAt(m_iConfigurationIndex);
|
|
pCdb->ChgACL(pCdb->pkt.racl.pSecOrig, TRUE);
|
|
pCdb-> SetModified(TRUE);
|
|
}
|
|
|
|
UpdateData(TRUE);
|
|
SetModified(TRUE);
|
|
}
|
|
|
|
|
|
void CSecurityPropertyPage::OnEditAccess()
|
|
{
|
|
int err;
|
|
|
|
// Invoke the ACL editor
|
|
err = g_util.ACLEditor(m_hWnd,
|
|
g_hAppid,
|
|
NULL,
|
|
TEXT("AccessPermission"),
|
|
&m_iAccessIndex,
|
|
SingleACL,
|
|
dcomAclAccess);
|
|
|
|
// Enable the Apply button
|
|
if (err == ERROR_SUCCESS)
|
|
SetModified(TRUE);
|
|
}
|
|
|
|
void CSecurityPropertyPage::OnEditLaunch()
|
|
{
|
|
int err;
|
|
|
|
// Invoke the ACL editor
|
|
err = g_util.ACLEditor(m_hWnd,
|
|
g_hAppid,
|
|
NULL,
|
|
TEXT("LaunchPermission"),
|
|
&m_iLaunchIndex,
|
|
SingleACL,
|
|
dcomAclLaunch);
|
|
|
|
// Enable the Apply button
|
|
if (err == ERROR_SUCCESS)
|
|
SetModified(TRUE);
|
|
}
|
|
|
|
void CSecurityPropertyPage::OnEditConfig()
|
|
{
|
|
int err = ERROR_SUCCESS;
|
|
|
|
// Invoke the ACL editor
|
|
err = g_util.ACLEditor2(m_hWnd,
|
|
g_hAppid,
|
|
g_rghkCLSID,
|
|
g_cCLSIDs,
|
|
g_szAppTitle,
|
|
&m_iConfigurationIndex,
|
|
RegKeyACL);
|
|
|
|
// Enable the Apply button
|
|
if (err == ERROR_SUCCESS)
|
|
SetModified(TRUE);
|
|
else if (err == ERROR_ACCESS_DENIED)
|
|
g_util.CkForAccessDenied(ERROR_ACCESS_DENIED);
|
|
else if (err != IDCANCEL)
|
|
g_util.PostErrorMessage();
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Member: CSecurityPropertyPage::ValidateChanges
|
|
//
|
|
// Synopsis: Called to validate the changes before updating
|
|
//
|
|
// Arguments: None
|
|
//
|
|
// Returns: BOOL success flag
|
|
//
|
|
// Algorithm: N/A
|
|
//
|
|
// History: 27-Oct-97 Ronans Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
BOOL CSecurityPropertyPage::ValidateChanges()
|
|
{
|
|
UpdateData(TRUE);
|
|
return TRUE;
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Member: CSecurityPropertyPage::UpdateChanges
|
|
//
|
|
// Synopsis: Called to update the changes to registry
|
|
//
|
|
// Arguments: hkAppID - HKEY for AppID
|
|
//
|
|
// Returns: BOOL success flag
|
|
//
|
|
// Algorithm: N/A
|
|
//
|
|
// History: 27-Oct-97 Ronans Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
BOOL CSecurityPropertyPage::UpdateChanges(HKEY hkAppID)
|
|
{
|
|
////////////////////////////////////////////////////////////////////
|
|
// Persist Security property page data
|
|
|
|
// Access permissions
|
|
// Use default access permissions
|
|
if (m_iAccess == 0)
|
|
{
|
|
// Delete the local AccessPermission named value to force this
|
|
// AppID to use the default global named value DefaultAccessPermission
|
|
long lErr = RegDeleteValue(hkAppID, TEXT("AccessPermission"));
|
|
}
|
|
|
|
// Use per AppID access permissions
|
|
else
|
|
{
|
|
// If the user edited security, then persist that now
|
|
if (m_iAccessIndex >= 0)
|
|
{
|
|
long lErr = g_virtreg.Apply(m_iAccessIndex);
|
|
g_virtreg.Remove(m_iAccessIndex);
|
|
m_iAccessIndex = -1;
|
|
}
|
|
}
|
|
|
|
// Launch permissions
|
|
// Use default Launch permissions
|
|
if (m_iLaunch == 0)
|
|
{
|
|
// Delete the local LaunchPermission named value to force this
|
|
// AppID to use the default global named value DefaultLaunchPermission
|
|
long lErr = RegDeleteValue(hkAppID, TEXT("LaunchPermission"));
|
|
}
|
|
|
|
// Use per AppID Launch permissions
|
|
else
|
|
{
|
|
// If the user edited security, then persist that now
|
|
if (m_iLaunchIndex >= 0)
|
|
{
|
|
long lErr = g_virtreg.Apply(m_iLaunchIndex);
|
|
g_virtreg.Remove(m_iLaunchIndex);
|
|
m_iLaunchIndex = -1;
|
|
}
|
|
}
|
|
|
|
// Configuration permissions
|
|
// Only meaningful on a per AppID basis
|
|
// If the user edited configuration security, then persist that now
|
|
if (m_iConfigurationIndex >= 0)
|
|
{
|
|
long lErr = g_virtreg.Apply(m_iConfigurationIndex);
|
|
g_virtreg.Remove(m_iConfigurationIndex);
|
|
m_iConfigurationIndex = -1;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Member: CSecurityPropertyPage::CancelChanges
|
|
//
|
|
// Synopsis: Called to cancel the changes to registry
|
|
//
|
|
// Arguments: None
|
|
//
|
|
// Returns: BOOL success flag
|
|
//
|
|
// Algorithm: N/A
|
|
//
|
|
// History: 27-Oct-97 Ronans Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
BOOL CSecurityPropertyPage::CancelChanges()
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CIdentityPropertyPage property page
|
|
|
|
CIdentityPropertyPage::CIdentityPropertyPage() : CPropertyPage(CIdentityPropertyPage::IDD)
|
|
{
|
|
//{{AFX_DATA_INIT(CIdentityPropertyPage)
|
|
m_szUserName = _T("");
|
|
m_szPassword = _T("");
|
|
m_szConfirmPassword = _T("");
|
|
m_iIdentity = -1;
|
|
//}}AFX_DATA_INIT
|
|
}
|
|
|
|
CIdentityPropertyPage::~CIdentityPropertyPage()
|
|
{
|
|
}
|
|
|
|
void CIdentityPropertyPage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
// If server is not a service, disable IDC_RADIO4 on page4.
|
|
if (m_fService)
|
|
{
|
|
GetDlgItem(IDC_RADIO1)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_RADIO2)->EnableWindow(FALSE);
|
|
}
|
|
else
|
|
{
|
|
GetDlgItem(IDC_RADIO4)->EnableWindow(FALSE);
|
|
}
|
|
|
|
CPropertyPage::DoDataExchange(pDX);
|
|
|
|
//{{AFX_DATA_MAP(CIdentityPropertyPage)
|
|
DDX_Text(pDX, IDC_EDIT1, m_szUserName);
|
|
DDV_MaxChars(pDX, m_szUserName, 128);
|
|
DDX_Text(pDX, IDC_EDIT2, m_szPassword);
|
|
DDV_MaxChars(pDX, m_szPassword, 128);
|
|
DDX_Text(pDX, IDC_EDIT3, m_szConfirmPassword);
|
|
DDV_MaxChars(pDX, m_szConfirmPassword, 128);
|
|
DDX_Radio(pDX, IDC_RADIO1, m_iIdentity);
|
|
//}}AFX_DATA_MAP
|
|
|
|
GetDlgItem(IDC_EDIT1)->EnableWindow(2 == m_iIdentity);
|
|
GetDlgItem(IDC_STATIC1)->EnableWindow(2 == m_iIdentity);
|
|
GetDlgItem(IDC_EDIT2)->EnableWindow(2 == m_iIdentity);
|
|
GetDlgItem(IDC_STATIC2)->EnableWindow(2 == m_iIdentity);
|
|
GetDlgItem(IDC_EDIT3)->EnableWindow(2 == m_iIdentity);
|
|
GetDlgItem(IDC_STATIC3)->EnableWindow(2 == m_iIdentity);
|
|
GetDlgItem(IDC_BUTTON1)->EnableWindow(2 == m_iIdentity);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CIdentityPropertyPage, CPropertyPage)
|
|
//{{AFX_MSG_MAP(CIdentityPropertyPage)
|
|
ON_EN_CHANGE(IDC_EDIT1, OnChange)
|
|
ON_BN_CLICKED(IDC_BUTTON1, OnBrowse)
|
|
ON_WM_HELPINFO()
|
|
ON_EN_CHANGE(IDC_EDIT2, OnChange)
|
|
ON_EN_CHANGE(IDC_EDIT3, OnChange)
|
|
ON_BN_CLICKED(IDC_RADIO1, OnChange)
|
|
ON_BN_CLICKED(IDC_RADIO2, OnChange)
|
|
ON_BN_CLICKED(IDC_RADIO4, OnChange)
|
|
ON_BN_CLICKED(IDC_RADIO3, OnChangeToUser)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
void CIdentityPropertyPage::OnBrowse()
|
|
{
|
|
TCHAR szUser[128];
|
|
|
|
if (g_util.InvokeUserBrowser(m_hWnd, szUser))
|
|
{
|
|
GetDlgItem(IDC_EDIT1)->SetWindowText(szUser);
|
|
UpdateData(TRUE);
|
|
SetModified(TRUE);
|
|
}
|
|
}
|
|
|
|
void CIdentityPropertyPage::OnChange()
|
|
{
|
|
UpdateData(TRUE);
|
|
SetModified(TRUE);
|
|
}
|
|
|
|
void CIdentityPropertyPage::OnChangeToUser()
|
|
{
|
|
if (g_util.IsBackupDC())
|
|
{
|
|
CString sTmp((LPCTSTR)IDS_BDCCONFIRM);
|
|
int reply = AfxMessageBox(sTmp, MB_YESNO);
|
|
if (reply == IDYES ) {
|
|
UpdateData(TRUE);
|
|
SetModified(TRUE);
|
|
}
|
|
else
|
|
{
|
|
UpdateData(FALSE);
|
|
|
|
// set focus to old button
|
|
switch (m_iIdentity)
|
|
{
|
|
case 0:
|
|
GetDlgItem(IDC_RADIO1)->SetFocus();
|
|
break;
|
|
|
|
case 1:
|
|
GetDlgItem(IDC_RADIO2)->SetFocus();
|
|
break;
|
|
|
|
case 2:
|
|
GetDlgItem(IDC_RADIO3)->SetFocus();
|
|
break;
|
|
|
|
case 3:
|
|
GetDlgItem(IDC_RADIO4)->SetFocus();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// get old identity value
|
|
UpdateData(TRUE);
|
|
SetModified(TRUE);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Member: CIdentityPropertyPage::ValidateChanges
|
|
//
|
|
// Synopsis: Called to validate the changes before updating
|
|
//
|
|
// Arguments: None
|
|
//
|
|
// Returns: BOOL success flag
|
|
//
|
|
// Algorithm: N/A
|
|
//
|
|
// History: 27-Oct-97 Ronans Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
BOOL CIdentityPropertyPage::ValidateChanges()
|
|
{
|
|
CString szUserName;
|
|
|
|
UpdateData(TRUE);
|
|
|
|
if (m_iIdentity == 2)
|
|
{
|
|
// Check that the username is not blank
|
|
if (_tcslen(m_szUserName) == 0)
|
|
{
|
|
CString szTemp((LPCTSTR)IDS_BLANKUSERNAME);
|
|
MessageBox(szTemp);
|
|
return FALSE;
|
|
}
|
|
|
|
/*
|
|
// Check that the password is not blank
|
|
if (_tcslen(m_szPassword) == 0)
|
|
{
|
|
CString szTemp((LPCTSTR)IDS_BLANKPASSWORD);
|
|
MessageBox(szTemp);
|
|
return FALSE;
|
|
}
|
|
*/
|
|
|
|
// Check that the password has been confirmed
|
|
if (m_szPassword != m_szConfirmPassword)
|
|
{
|
|
CString szTemp((LPCTSTR)IDS_NOMATCH);
|
|
MessageBox(szTemp);
|
|
return FALSE;
|
|
}
|
|
|
|
int iSplitPoint = m_szUserName.ReverseFind('\\');
|
|
if (iSplitPoint < 0)
|
|
{
|
|
DWORD dwSize = MAX_COMPUTERNAME_LENGTH + 1;
|
|
|
|
// user didn't specify a domain
|
|
if (!GetComputerName(m_szDomain.GetBuffer(dwSize), &dwSize))
|
|
{
|
|
m_szDomain.ReleaseBuffer();
|
|
g_util.PostErrorMessage();
|
|
return FALSE;
|
|
}
|
|
m_szDomain.ReleaseBuffer();
|
|
szUserName = m_szUserName;
|
|
m_szUserName = m_szDomain + "\\" + m_szUserName;
|
|
}
|
|
else
|
|
{
|
|
// user did specify a domain
|
|
m_szDomain = m_szUserName.Left(iSplitPoint);
|
|
szUserName = m_szUserName.Mid(iSplitPoint + 1);
|
|
}
|
|
|
|
// Validate the domain and user name
|
|
BOOL fOk = FALSE;
|
|
BYTE sid[256];
|
|
DWORD cbSid = 256;
|
|
TCHAR szAcctDomain[MAX_PATH];
|
|
DWORD cbAcctDomain = MAX_PATH * sizeof(TCHAR);
|
|
SID_NAME_USE acctType;
|
|
|
|
CString sFullUserName = m_szDomain + "\\" + m_szUserName;
|
|
fOk = LookupAccountName(NULL,
|
|
(TCHAR *) ((LPCTSTR) m_szUserName),
|
|
sid,
|
|
&cbSid,
|
|
szAcctDomain,
|
|
&cbAcctDomain,
|
|
&acctType);
|
|
|
|
// if successful, then validate domain name and account type
|
|
if (fOk)
|
|
{
|
|
fOk = ((_tcsicmp((TCHAR *) ((LPCTSTR) m_szDomain), szAcctDomain) == 0)
|
|
&&
|
|
(acctType == SidTypeUser));
|
|
|
|
// If still unsuccessful, then try to match the domain against
|
|
// this computer's name
|
|
if (!fOk)
|
|
{
|
|
TCHAR szThisComputer[MAX_COMPUTERNAME_LENGTH + 1];
|
|
DWORD dwSize;
|
|
|
|
if (GetComputerName(szThisComputer, &dwSize))
|
|
{
|
|
fOk = (_tcsicmp((TCHAR *) ((LPCTSTR) szThisComputer),
|
|
szAcctDomain) == 0
|
|
&&
|
|
acctType == SidTypeDomain);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!fOk)
|
|
{
|
|
CString szTemp((LPCTSTR)IDS_NOACCOUNT);
|
|
MessageBox(szTemp);
|
|
return FALSE;
|
|
}
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Member: CIdentityPropertyPage::UpdateChanges
|
|
//
|
|
// Synopsis: Called to update the changes to registry
|
|
//
|
|
// Arguments: hkAppID - HKEY for AppID
|
|
//
|
|
// Returns: BOOL success flag
|
|
//
|
|
// Algorithm: N/A
|
|
//
|
|
// History: 27-Oct-97 Ronans Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
BOOL CIdentityPropertyPage::UpdateChanges(HKEY hkAppID)
|
|
{
|
|
long lErr;
|
|
|
|
#if !defined(STANDALONE_BUILD)
|
|
// Write the RunAs password to the Lsa private database
|
|
// (Note: We do this even if it's a service since QueryServiceConfig
|
|
// doesn't return the password, though we can use ChangeServiceConfig
|
|
// to set the password in the service database.)
|
|
if (m_iIdentity == 2)
|
|
{
|
|
if (!g_util.StoreUserPassword(g_szAppid, m_szPassword))
|
|
g_util.PostErrorMessage();
|
|
|
|
// Add rights to this user's account for "SeBatchLogonRight"
|
|
int err;
|
|
|
|
CString szUserName = m_szUserName;
|
|
|
|
// ronans - do not display errors when trying to set account rights on backup domain controllers
|
|
if ((err = g_util.SetAccountRights((LPCTSTR) szUserName, m_fService ? SE_SERVICE_LOGON_NAME : SE_BATCH_LOGON_NAME ) != ERROR_SUCCESS)
|
|
&& !g_util.IsBackupDC())
|
|
g_util.PostErrorMessage(err);
|
|
}
|
|
#endif
|
|
|
|
switch (m_iIdentity)
|
|
{
|
|
case 0:
|
|
{
|
|
CString szTemp(TEXT("Interactive User"));
|
|
lErr = RegSetValueEx(
|
|
hkAppID,
|
|
TEXT("RunAs"),
|
|
0,
|
|
REG_SZ,
|
|
(BYTE *)(LPCTSTR)szTemp,
|
|
(1 + szTemp.GetLength()) * sizeof(TCHAR));
|
|
break;
|
|
}
|
|
|
|
case 1:
|
|
case 3:
|
|
lErr = RegDeleteValue(hkAppID,
|
|
TEXT("RunAs"));
|
|
break;
|
|
|
|
case 2:
|
|
lErr = RegSetValueEx(hkAppID,
|
|
TEXT("RunAs"),
|
|
0,
|
|
REG_SZ,
|
|
(BYTE *)(LPCTSTR)m_szUserName,
|
|
(1 + m_szUserName.GetLength()) *
|
|
sizeof(TCHAR));
|
|
break;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Member: CIdentityPropertyPage::CancelChanges
|
|
//
|
|
// Synopsis: Called to cancel the changes to registry
|
|
//
|
|
// Arguments: None
|
|
//
|
|
// Returns: BOOL success flag
|
|
//
|
|
// Algorithm: N/A
|
|
//
|
|
// History: 27-Oct-97 Ronans Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
BOOL CIdentityPropertyPage::CancelChanges()
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BOOL CLocationPropertyPage::OnHelpInfo(HELPINFO* pHelpInfo)
|
|
{
|
|
if(-1 != pHelpInfo->iCtrlId)
|
|
{
|
|
WORD hiWord = 0x8000 | CLocationPropertyPage::IDD;
|
|
WORD loWord = (WORD) pHelpInfo->iCtrlId;
|
|
DWORD dwLong = MAKELONG(loWord,hiWord);
|
|
|
|
WinHelp(dwLong, HELP_CONTEXTPOPUP);
|
|
return TRUE;
|
|
}
|
|
else
|
|
return CPropertyPage::OnHelpInfo(pHelpInfo);
|
|
}
|
|
|
|
|
|
BOOL CSecurityPropertyPage::OnHelpInfo(HELPINFO* pHelpInfo)
|
|
{
|
|
if(-1 != pHelpInfo->iCtrlId)
|
|
{
|
|
WORD hiWord = 0x8000 | CSecurityPropertyPage::IDD;
|
|
WORD loWord = (WORD) pHelpInfo->iCtrlId;
|
|
DWORD dwLong = MAKELONG(loWord,hiWord);
|
|
|
|
WinHelp(dwLong, HELP_CONTEXTPOPUP);
|
|
return TRUE;
|
|
}
|
|
else
|
|
return CPropertyPage::OnHelpInfo(pHelpInfo);
|
|
}
|
|
|
|
|
|
BOOL CIdentityPropertyPage::OnHelpInfo(HELPINFO* pHelpInfo)
|
|
{
|
|
if(-1 != pHelpInfo->iCtrlId)
|
|
{
|
|
WORD hiWord = 0x8000 | CIdentityPropertyPage::IDD;
|
|
WORD loWord = (WORD) pHelpInfo->iCtrlId;
|
|
DWORD dwLong = MAKELONG(loWord,hiWord);
|
|
|
|
WinHelp(dwLong, HELP_CONTEXTPOPUP);
|
|
return TRUE;
|
|
}
|
|
else
|
|
return CPropertyPage::OnHelpInfo(pHelpInfo);
|
|
}
|
|
|
|
|