424 lines
11 KiB
C++
424 lines
11 KiB
C++
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
/*++
|
||
|
|
||
|
Copyright (C) Microsoft Corporation, 1998 - 1999
|
||
|
|
||
|
Module Name: AddPolicyWizardPage1.cpp
|
||
|
|
||
|
Abstract:
|
||
|
Implementation file for the CNewRAPWiz_Name class.
|
||
|
We implement the class needed to handle the first property page for a Policy node.
|
||
|
|
||
|
Revision History:
|
||
|
mmaguire 12/15/97 - created
|
||
|
byao 1/22/98 Modified for Network Access Policy
|
||
|
|
||
|
--*/
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
|
||
|
#include "Precompiled.h"
|
||
|
#include "rapwz_name.h"
|
||
|
#include "NapUtil.h"
|
||
|
#include "PolicyNode.h"
|
||
|
#include "PoliciesNode.h"
|
||
|
#include "ChangeNotification.h"
|
||
|
|
||
|
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: CNewRAPWiz_Name
|
||
|
//
|
||
|
// Class: CNewRAPWiz_Name
|
||
|
//
|
||
|
// Synopsis: class constructor
|
||
|
//
|
||
|
// Arguments: CPolicyNode *pPolicyNode - policy node for this property page
|
||
|
// CIASAttrList *pAttrList -- attribute list
|
||
|
// TCHAR* pTitle = NULL -
|
||
|
//
|
||
|
// Returns: Nothing
|
||
|
//
|
||
|
// History: Created Header byao 2/16/98 4:31:52 PM
|
||
|
//
|
||
|
//+---------------------------------------------------------------------------
|
||
|
CNewRAPWiz_Name::CNewRAPWiz_Name(
|
||
|
CRapWizardData* pWizData,
|
||
|
LONG_PTR hNotificationHandle,
|
||
|
TCHAR* pTitle, BOOL bOwnsNotificationHandle
|
||
|
)
|
||
|
: CIASWizard97Page<CNewRAPWiz_Name, IDS_NEWRAPWIZ_NAME_TITLE, IDS_NEWRAPWIZ_NAME_SUBTITLE> ( hNotificationHandle, pTitle, bOwnsNotificationHandle ),
|
||
|
m_spWizData(pWizData)
|
||
|
|
||
|
{
|
||
|
TRACE_FUNCTION("CNewRAPWiz_Name::CNewRAPWiz_Name");
|
||
|
|
||
|
// Add the help button to the page
|
||
|
// m_psp.dwFlags |= PSP_HASHELP;
|
||
|
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: CNewRAPWiz_Name
|
||
|
//
|
||
|
// Class: CNewRAPWiz_Name
|
||
|
//
|
||
|
// Synopsis: class destructor
|
||
|
//
|
||
|
// Returns: Nothing
|
||
|
//
|
||
|
// History: Created Header byao 2/16/98 4:31:52 PM
|
||
|
//
|
||
|
//+---------------------------------------------------------------------------
|
||
|
CNewRAPWiz_Name::~CNewRAPWiz_Name()
|
||
|
{
|
||
|
TRACE_FUNCTION("CNewRAPWiz_Name::~CNewRAPWiz_Name");
|
||
|
|
||
|
}
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
/*++
|
||
|
|
||
|
CNewRAPWiz_Name::OnInitDialog
|
||
|
|
||
|
--*/
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
LRESULT CNewRAPWiz_Name::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
||
|
{
|
||
|
TRACE_FUNCTION("CNewRAPWiz_Name::OnInitDialog");
|
||
|
|
||
|
HRESULT hr = S_OK;
|
||
|
BOOL fRet;
|
||
|
CComPtr<IUnknown> spUnknown;
|
||
|
CComPtr<IEnumVARIANT> spEnumVariant;
|
||
|
long ulCount;
|
||
|
ULONG ulCountReceived;
|
||
|
|
||
|
//
|
||
|
// set the policy name on the page
|
||
|
//
|
||
|
SetDlgItemText(IDC_NEWRAPWIZ_NAME_POLICYNAME, m_spWizData->m_pPolicyNode->m_bstrDisplayName);
|
||
|
// check the default selected one
|
||
|
CheckDlgButton(IDC_NEWRAPWIZ_NAME_SCENARIO, BST_CHECKED);
|
||
|
|
||
|
|
||
|
SetModified(FALSE);
|
||
|
return TRUE; // ISSUE: what do we need to be returning here?
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
/*++
|
||
|
|
||
|
CNewRAPWiz_Name::OnWizardNext
|
||
|
|
||
|
--*/
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
BOOL CNewRAPWiz_Name::OnWizardNext()
|
||
|
{
|
||
|
TRACE_FUNCTION("CNewRAPWiz_Name::OnWizardNext");
|
||
|
|
||
|
HRESULT hr = S_OK;
|
||
|
WCHAR wzName[IAS_MAX_STRING];
|
||
|
|
||
|
// get the new policy name
|
||
|
if ( !GetDlgItemText(IDC_NEWRAPWIZ_NAME_POLICYNAME, wzName, IAS_MAX_STRING) )
|
||
|
{
|
||
|
// We couldn't retrieve a BSTR,
|
||
|
// so we need to initialize this variant to a null BSTR.
|
||
|
ErrorTrace(DEBUG_NAPMMC_POLICYPAGE1, "Couldn't get policy name from UI");
|
||
|
ShowErrorDialog(m_hWnd, IDS_ERROR_INVALID_POLICYNAME, wzName);
|
||
|
return FALSE; // can't apply
|
||
|
}
|
||
|
|
||
|
{
|
||
|
::CString str = (OLECHAR *) wzName;
|
||
|
str.TrimLeft();
|
||
|
str.TrimRight();
|
||
|
if (str.IsEmpty())
|
||
|
{
|
||
|
ShowErrorDialog( NULL, IDS_ERROR__POLICYNAME_EMPTY);
|
||
|
return FALSE; // can't apply
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
// invalid name?
|
||
|
if ( _tcscmp(wzName, m_spWizData->m_pPolicyNode->m_bstrDisplayName ) !=0 &&
|
||
|
!ValidPolicyName(wzName)
|
||
|
)
|
||
|
{
|
||
|
// name is changed, and is invalid
|
||
|
ErrorTrace(DEBUG_NAPMMC_POLICYPAGE1, "Invalid policy name");
|
||
|
ShowErrorDialog(m_hWnd, IDS_ERROR_INVALID_POLICYNAME);
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
|
||
|
CComVariant var;
|
||
|
|
||
|
V_VT(&var) = VT_BSTR;
|
||
|
V_BSTR(&var) = SysAllocString(wzName);
|
||
|
|
||
|
// Put the policy name -- the DS schema has been changed so that rename works.
|
||
|
hr = m_spWizData->m_spPolicySdo->PutProperty( PROPERTY_SDO_NAME, &var );
|
||
|
if( FAILED( hr ) )
|
||
|
{
|
||
|
ErrorTrace(DEBUG_NAPMMC_POLICYPAGE1, "Couldn't change policy name, err = %x", hr);
|
||
|
if(hr == HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS) || hr == E_INVALIDARG)
|
||
|
ShowErrorDialog( m_hWnd, IDS_ERROR_INVALID_POLICYNAME );
|
||
|
else
|
||
|
ShowErrorDialog( m_hWnd, IDS_ERROR_RENAMEPOLICY );
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
|
||
|
// Change the profile name to be whatever the policy name is -- the DS schema has been changed so that rename works.
|
||
|
hr = m_spWizData->m_spProfileSdo->PutProperty( PROPERTY_SDO_NAME, &var );
|
||
|
if( FAILED( hr ) )
|
||
|
{
|
||
|
ErrorTrace(DEBUG_NAPMMC_POLICYPAGE1, "Couldn't change profile name, err = %x", hr);
|
||
|
ShowErrorDialog( m_hWnd, IDS_ERROR_RENAMEPOLICY );
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
|
||
|
// Put the profile name associated with the policy -- the DS schema has been changed so that rename works.
|
||
|
hr = m_spWizData->m_spPolicySdo->PutProperty(PROPERTY_POLICY_PROFILE_NAME, &var);
|
||
|
if( FAILED(hr) )
|
||
|
{
|
||
|
ErrorTrace(DEBUG_NAPMMC_POLICYPAGE1, "Couldn't save profile name for this policy, err = %x", hr);
|
||
|
ShowErrorDialog( m_hWnd
|
||
|
, IDS_ERROR_SDO_ERROR_PUTPROP_POLICY_PROFILENAME
|
||
|
, NULL
|
||
|
, hr
|
||
|
);
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
|
||
|
var.Clear();
|
||
|
|
||
|
|
||
|
// Policy merit value (the evaluation order).
|
||
|
V_VT(&var) = VT_I4;
|
||
|
V_I4(&var) = m_spWizData->m_pPolicyNode->GetMerit();
|
||
|
hr = m_spWizData->m_spPolicySdo->PutProperty(PROPERTY_POLICY_MERIT, &var);
|
||
|
if( FAILED(hr) )
|
||
|
{
|
||
|
ErrorTrace(DEBUG_NAPMMC_POLICYPAGE1, "Failed to save Merit Value to the policy, err = %x", hr);
|
||
|
ShowErrorDialog( m_hWnd
|
||
|
, IDS_ERROR_SDO_ERROR_PUTPROP_POLICYMERIT
|
||
|
, NULL
|
||
|
, hr
|
||
|
);
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
|
||
|
DWORD dwScenaro = 0;
|
||
|
|
||
|
if (IsDlgButtonChecked(IDC_NEWRAPWIZ_NAME_SCENARIO))
|
||
|
dwScenaro = IDC_NEWRAPWIZ_NAME_SCENARIO;
|
||
|
else if (IsDlgButtonChecked(IDC_NEWRAPWIZ_NAME_MANUAL))
|
||
|
dwScenaro = IDC_NEWRAPWIZ_NAME_MANUAL;
|
||
|
|
||
|
if (dwScenaro == 0)
|
||
|
return FALSE;
|
||
|
|
||
|
// reset the dirty bit
|
||
|
m_spWizData->SetScenario(dwScenaro);
|
||
|
|
||
|
// reset the dirty bit
|
||
|
SetModified(FALSE);
|
||
|
|
||
|
// store this name with the m_spWizData
|
||
|
m_spWizData->m_strPolicyName = wzName;
|
||
|
|
||
|
return m_spWizData->GetNextPageId(((PROPSHEETPAGE*)(*this))->pszTemplate);
|
||
|
}
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
/*++
|
||
|
CNewRAPWiz_Name::OnQueryCancel
|
||
|
|
||
|
--*/
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
BOOL CNewRAPWiz_Name::OnQueryCancel()
|
||
|
{
|
||
|
TRACE_FUNCTION("CNewRAPWiz_Name::OnQueryCancel");
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: OnPolicyNameEdit
|
||
|
//
|
||
|
// Class: CConditionPage1
|
||
|
//
|
||
|
// Synopsis: message handler for the policy name edit box -- user
|
||
|
// has done something that might have changed the name
|
||
|
// We need to set the dirty bit
|
||
|
//
|
||
|
// Arguments: UINT uNotifyCode - notification code
|
||
|
// UINT uID - ID of the control
|
||
|
// HWND hWnd - HANDLE of the window
|
||
|
// BOOL &bHandled - whether the handler has processed the msg
|
||
|
//
|
||
|
// Returns: LRESULT - S_OK: succeeded
|
||
|
// S_FALSE: otherwise
|
||
|
//
|
||
|
// History: Created byao 2/22/98 4:51:35 PM
|
||
|
//
|
||
|
//+---------------------------------------------------------------------------
|
||
|
LRESULT CNewRAPWiz_Name::OnPolicyNameEdit(UINT uMsg, WPARAM wParam, HWND hWnd, BOOL& bHandled)
|
||
|
{
|
||
|
TRACE_FUNCTION("CNewRAPWiz_Name::OnPolicyNameEdit");
|
||
|
WCHAR wzName[IAS_MAX_STRING];
|
||
|
|
||
|
// get the new policy name
|
||
|
if ( !GetDlgItemText(IDC_NEWRAPWIZ_NAME_POLICYNAME, wzName, IAS_MAX_STRING) )
|
||
|
{
|
||
|
return 0; // can't apply
|
||
|
}
|
||
|
|
||
|
if ( _tcscmp(wzName, m_spWizData->m_pPolicyNode->m_bstrDisplayName ) !=0 )
|
||
|
{
|
||
|
// set the dirty bit
|
||
|
SetModified(TRUE);
|
||
|
}
|
||
|
|
||
|
bHandled = TRUE;
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: OnPath
|
||
|
//
|
||
|
// Class: CNewRAPWiz_Name
|
||
|
//
|
||
|
// Synopsis: message handler for the policy name edit box -- user
|
||
|
// has done something that might have changed the name
|
||
|
// We need to set the dirty bit
|
||
|
//
|
||
|
// Arguments: UINT uNotifyCode - notification code
|
||
|
// UINT uID - ID of the control
|
||
|
// HWND hWnd - HANDLE of the window
|
||
|
// BOOL &bHandled - whether the handler has processed the msg
|
||
|
//
|
||
|
// Returns: LRESULT - S_OK: succeeded
|
||
|
// S_FALSE: otherwise
|
||
|
//
|
||
|
// History: Created byao 2/22/98 4:51:35 PM
|
||
|
//
|
||
|
//+---------------------------------------------------------------------------
|
||
|
LRESULT CNewRAPWiz_Name::OnPath(UINT uMsg, WPARAM wParam, HWND hWnd, BOOL& bHandled)
|
||
|
{
|
||
|
// set the dirty bit
|
||
|
SetModified(TRUE);
|
||
|
|
||
|
bHandled = TRUE;
|
||
|
return S_OK;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Function: CNewRAPWiz_Name::ValidPolicyName
|
||
|
//
|
||
|
// Synopsis: Check whether this is a valid policy name
|
||
|
//
|
||
|
// Arguments: LPCTSTR pszName - policy name
|
||
|
//
|
||
|
// Returns: BOOL - TRUE: valid name
|
||
|
//
|
||
|
// History: Created Header byao 3/14/98 1:47:05 AM
|
||
|
//
|
||
|
//+---------------------------------------------------------------------------
|
||
|
BOOL CNewRAPWiz_Name::ValidPolicyName(LPCTSTR pszName)
|
||
|
{
|
||
|
TRACE_FUNCTION("CNewRAPWiz_Name::ValidPolicyName");
|
||
|
|
||
|
int iIndex;
|
||
|
int iLen;
|
||
|
|
||
|
// is this an empty string?
|
||
|
|
||
|
iLen = wcslen(pszName);
|
||
|
if ( !iLen )
|
||
|
{
|
||
|
ErrorTrace(ERROR_NAPMMC_POLICYPAGE1, "Empty policy name");
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
// is this a string that only has white spaces?
|
||
|
for (iIndex=0; iIndex < iLen; iIndex++)
|
||
|
{
|
||
|
if (pszName[iIndex] != _T(' ') &&
|
||
|
pszName[iIndex] != _T('\t') &&
|
||
|
pszName[iIndex] != _T('\n')
|
||
|
)
|
||
|
{
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
if ( iIndex == iLen )
|
||
|
{
|
||
|
ErrorTrace(ERROR_NAPMMC_POLICYPAGE1, "This policy name has only white spaces");
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
//
|
||
|
// does this name already exist?
|
||
|
//
|
||
|
if ( ((CPoliciesNode*)(m_spWizData->m_pPolicyNode->m_pParentNode))->FindChildWithName(pszName) )
|
||
|
{
|
||
|
ErrorTrace(ERROR_NAPMMC_POLICYPAGE1, "This policy name already exists");
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
/*++
|
||
|
|
||
|
CNewRAPWiz_Name::OnSetActive
|
||
|
|
||
|
Return values:
|
||
|
|
||
|
TRUE if the page can be made active
|
||
|
FALSE if the page should be be skipped and the next page should be looked at.
|
||
|
|
||
|
Remarks:
|
||
|
|
||
|
If you want to change which pages are visited based on a user's
|
||
|
choices in a previous page, return FALSE here as appropriate.
|
||
|
|
||
|
--*/
|
||
|
//////////////////////////////////////////////////////////////////////////////
|
||
|
BOOL CNewRAPWiz_Name::OnSetActive()
|
||
|
{
|
||
|
ATLTRACE(_T("# CNewRAPWiz_Name::OnSetActive\n"));
|
||
|
|
||
|
// MSDN docs say you need to use PostMessage here rather than SendMessage.
|
||
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_NEXT | PSWIZB_BACK);
|
||
|
|
||
|
return TRUE;
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|