You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1872 lines
54 KiB
1872 lines
54 KiB
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
Copyright (C) Microsoft Corporation
|
|
|
|
Module Name: rapwiz.cpp
|
|
|
|
Abstract:
|
|
We implement the class needed to handle the property pages for a RAP Policy wizard.
|
|
|
|
Revision History:
|
|
History: Created Header 05/04/00 4:31:52 PM
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "Precompiled.h"
|
|
#include "iasattrlist.h"
|
|
#include "condlist.h"
|
|
#include "rapwiz.h"
|
|
#include "NapUtil.h"
|
|
#include "PolicyNode.h"
|
|
#include "PoliciesNode.h"
|
|
#include "ChangeNotification.h"
|
|
#include "dialinusr.h"
|
|
#include "safearray.h"
|
|
#include "rrascfg.h"
|
|
#include "proxyres.h"
|
|
#include "ias.h"
|
|
#include "varvec.h"
|
|
|
|
HRESULT InternalGetEapProviders(
|
|
LPCWSTR machineName,
|
|
AuthProviderArray *pProvList
|
|
);
|
|
|
|
|
|
//=======================================================================================
|
|
//
|
|
//
|
|
// CRapWizardData
|
|
//
|
|
//
|
|
//=======================================================================================
|
|
// page sequence information
|
|
// page id array ends with 0
|
|
DWORD __SCEN_NAME_GRP_AUTH_ENCY__[] = {
|
|
IDD_NEWRAPWIZ_WELCOME,
|
|
IDD_NEWRAPWIZ_NAME,
|
|
IDD_NEWRAPWIZ_SCENARIO,
|
|
IDD_NEWRAPWIZ_GROUP,
|
|
IDD_NEWRAPWIZ_AUTHENTICATION,
|
|
IDD_NEWRAPWIZ_ENCRYPTION,
|
|
IDD_NEWRAPWIZ_COMPLETION,
|
|
0};
|
|
|
|
DWORD __SCEN_NAME_GRP_AUTH_ENCY_VPN__[] = {
|
|
IDD_NEWRAPWIZ_WELCOME,
|
|
IDD_NEWRAPWIZ_NAME,
|
|
IDD_NEWRAPWIZ_SCENARIO,
|
|
IDD_NEWRAPWIZ_GROUP,
|
|
IDD_NEWRAPWIZ_AUTHENTICATION,
|
|
IDD_NEWRAPWIZ_ENCRYPTION_VPN,
|
|
IDD_NEWRAPWIZ_COMPLETION,
|
|
0};
|
|
|
|
DWORD __SCEN_NAME_GRP_EAP_ENCY_WIRELESS__[] = {
|
|
IDD_NEWRAPWIZ_WELCOME,
|
|
IDD_NEWRAPWIZ_NAME,
|
|
IDD_NEWRAPWIZ_SCENARIO,
|
|
IDD_NEWRAPWIZ_GROUP,
|
|
IDD_NEWRAPWIZ_EAP,
|
|
IDD_NEWRAPWIZ_COMPLETION,
|
|
0};
|
|
|
|
DWORD __SCEN_NAME_GRP_EAP__[] = {
|
|
IDD_NEWRAPWIZ_WELCOME,
|
|
IDD_NEWRAPWIZ_NAME,
|
|
IDD_NEWRAPWIZ_SCENARIO,
|
|
IDD_NEWRAPWIZ_GROUP,
|
|
IDD_NEWRAPWIZ_EAP,
|
|
IDD_NEWRAPWIZ_COMPLETION,
|
|
0};
|
|
|
|
DWORD __SCEN_NAME_COND_ALLW_PROF__[] = {
|
|
IDD_NEWRAPWIZ_WELCOME,
|
|
IDD_NEWRAPWIZ_NAME,
|
|
IDD_NEWRAPWIZ_CONDITION,
|
|
IDD_NEWRAPWIZ_ALLOWDENY,
|
|
IDD_NEWRAPWIZ_EDITPROFILE,
|
|
IDD_NEWRAPWIZ_COMPLETION,
|
|
0};
|
|
|
|
// top scenarios
|
|
CRapWizScenario Scenario_Senarios =
|
|
{
|
|
IDC_NEWRAPWIZ_NAME_SCENARIO, // ID
|
|
FALSE, // No encr
|
|
TRUE, // E_EAP
|
|
FALSE, // C_EAP
|
|
EXCLUDE_AUTH_TYPE, // Exclude flags (authentication, FramedProtocol)
|
|
VPN_PORT_CONDITION, // Pre-condition
|
|
TRUE, // bSDO
|
|
__SCEN_NAME_GRP_AUTH_ENCY__ // pagelist
|
|
};
|
|
|
|
CRapWizScenario Scenario_Manual =
|
|
{
|
|
IDC_NEWRAPWIZ_NAME_MANUAL,
|
|
DONT_CARE,
|
|
DONT_CARE,
|
|
DONT_CARE,
|
|
DONT_CARE,
|
|
NULL,
|
|
FALSE,
|
|
__SCEN_NAME_COND_ALLW_PROF__
|
|
};
|
|
|
|
// sub scenarios
|
|
CRapWizScenario Scenario_VPN =
|
|
{
|
|
IDC_NEWRAPWIZ_SCENARIO_VPN,
|
|
FALSE,
|
|
TRUE,
|
|
FALSE,
|
|
EXCLUDE_AUTH_TYPE,
|
|
VPN_PORT_CONDITION,
|
|
TRUE,
|
|
__SCEN_NAME_GRP_AUTH_ENCY_VPN__
|
|
};
|
|
|
|
CRapWizScenario Scenario_DialUp =
|
|
{
|
|
IDC_NEWRAPWIZ_SCENARIO_DIALUP,
|
|
TRUE,
|
|
TRUE,
|
|
TRUE,
|
|
EXCLUDE_AUTH_TYPE,
|
|
DIALUP_PORT_CONDITION,
|
|
TRUE,
|
|
__SCEN_NAME_GRP_AUTH_ENCY__
|
|
};
|
|
|
|
CRapWizScenario Scenario_Wireless =
|
|
{
|
|
IDC_NEWRAPWIZ_SCENARIO_WIRELESS,
|
|
DONT_CARE,
|
|
TRUE,
|
|
FALSE,
|
|
EXCLUDE_AUTH_TYPE | EXCLUDE_DEFAULT_FRAMED,
|
|
WIRELESS_PORT_CONDITION,
|
|
TRUE,
|
|
__SCEN_NAME_GRP_EAP_ENCY_WIRELESS__
|
|
};
|
|
|
|
CRapWizScenario Scenario_Switch =
|
|
{
|
|
IDC_NEWRAPWIZ_SCENARIO_SWITCH,
|
|
DONT_CARE,
|
|
TRUE,
|
|
TRUE,
|
|
EXCLUDE_AUTH_TYPE | EXCLUDE_DEFAULT_FRAMED,
|
|
SWITCH_PORT_CONDITION,
|
|
TRUE,
|
|
__SCEN_NAME_GRP_EAP__
|
|
};
|
|
|
|
CRapWizScenario*
|
|
CRapWizardData::m_Scenarios[] = {
|
|
&Scenario_Senarios,
|
|
&Scenario_Manual,
|
|
&Scenario_VPN,
|
|
&Scenario_DialUp,
|
|
&Scenario_Wireless,
|
|
&Scenario_Switch,
|
|
NULL};
|
|
|
|
|
|
CRapWizardData::CRapWizardData():
|
|
// scenario
|
|
m_dwScenarioIndex(0),
|
|
// user / group
|
|
m_dwUserOrGroup(IDC_NEWRAPWIZ_GROUP_GROUP),
|
|
|
|
// authentication
|
|
m_bMSCHAP(FALSE),
|
|
m_bMSCHAP2(TRUE),
|
|
m_bEAP(FALSE),
|
|
m_dwEAPProvider(0),
|
|
|
|
// encryption
|
|
m_bEncrypt_No(FALSE),
|
|
m_bEncrypt_Basic(TRUE),
|
|
m_bEncrypt_Strong(TRUE),
|
|
m_bEncrypt_Strongest(TRUE),
|
|
m_pPolicyNode(NULL),
|
|
|
|
// Dialin
|
|
m_bAllowDialin(FALSE)
|
|
{
|
|
}
|
|
|
|
void CRapWizardData::SetInfo(LPCTSTR czMachine, CPolicyNode* pNode, ISdoDictionaryOld* pDic, ISdo* pPolicy, ISdo* pProfile, ISdoCollection* pPolicyCol, ISdoCollection* pProfileCol, ISdoServiceControl* pServiceCtrl, CIASAttrList* pAttrList)
|
|
{
|
|
// related to MMC
|
|
m_pPolicyNode = pNode;
|
|
|
|
m_NTGroups.m_bstrServerName = czMachine;
|
|
|
|
// SDO pointers
|
|
m_spDictionarySdo = pDic;
|
|
m_spPolicySdo = pPolicy;
|
|
m_spProfileSdo = pProfile;
|
|
m_spPoliciesCollectionSdo = pPolicyCol;
|
|
m_spProfilesCollectionSdo = pProfileCol;
|
|
m_spSdoServiceControl = pServiceCtrl;
|
|
m_pAttrList = pAttrList;
|
|
}
|
|
|
|
DWORD CRapWizardData::GetNextPageId(LPCTSTR pszCurrTemplate)
|
|
{
|
|
DWORD* pdwPages = m_Scenarios[m_dwScenarioIndex]->m_pdwPages;
|
|
if ( pdwPages == NULL )
|
|
return 0;
|
|
|
|
if (pszCurrTemplate == MAKEINTRESOURCE(0))
|
|
return pdwPages[0];
|
|
|
|
int i = 0;
|
|
while ( pdwPages[i] != 0 && MAKEINTRESOURCE(pdwPages[i]) != pszCurrTemplate ) i++;
|
|
|
|
if ( MAKEINTRESOURCE(pdwPages[i]) == pszCurrTemplate )
|
|
{
|
|
if (pdwPages[i+1] == 0)
|
|
// this allows the page to finish
|
|
return TRUE;
|
|
else
|
|
return pdwPages[i+1];
|
|
}
|
|
else
|
|
return NULL;
|
|
}
|
|
|
|
DWORD CRapWizardData::GetPrevPageId(LPCTSTR pszCurrTemplate)
|
|
{
|
|
DWORD* pdwPages = m_Scenarios[m_dwScenarioIndex]->m_pdwPages;
|
|
// when there is no previous page
|
|
if ( pdwPages == NULL || pszCurrTemplate == MAKEINTRESOURCE(0) || MAKEINTRESOURCE(pdwPages[0]) == pszCurrTemplate)
|
|
return NULL;
|
|
|
|
int i = 0;
|
|
while ( pdwPages[i] != 0 && MAKEINTRESOURCE(pdwPages[i]) != pszCurrTemplate ) i++;
|
|
|
|
if ( MAKEINTRESOURCE(pdwPages[i]) == pszCurrTemplate )
|
|
return pdwPages[i - 1];
|
|
else
|
|
return NULL;
|
|
}
|
|
|
|
BOOL CRapWizardData::SetScenario(DWORD dwScenario)
|
|
{
|
|
BOOL bRet = FALSE;
|
|
|
|
int i = 0;
|
|
|
|
while (m_Scenarios[i] != 0)
|
|
{
|
|
if (m_Scenarios[i]->m_dwScenarioID == dwScenario)
|
|
{
|
|
m_dwScenarioIndex = i;
|
|
if (m_Scenarios[i]->m_bAllowClear == FALSE)
|
|
m_bEncrypt_No = FALSE;
|
|
else if (m_Scenarios[i]->m_bAllowClear == DONT_CARE)
|
|
{
|
|
// this will cause finish not to populate the attribute
|
|
m_bEncrypt_No = TRUE;
|
|
m_bEncrypt_Basic = TRUE;
|
|
m_bEncrypt_Strong = TRUE;
|
|
m_bEncrypt_Strongest = TRUE;
|
|
}
|
|
bRet = TRUE;
|
|
break;
|
|
}
|
|
i++;
|
|
}
|
|
return bRet;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CRapWizardData::GetSettingsText
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CRapWizardData::GetSettingsText(::CString& settingsText)
|
|
{
|
|
BOOL bRet = TRUE;
|
|
::CString strOutput;
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
|
|
try{
|
|
strOutput.LoadString(IDS_NEWRAPWIZ_COMPLETION_CONDITION);
|
|
|
|
|
|
// condition text -- get condition text from sdo
|
|
// Policy name.
|
|
CComBSTR policyName;
|
|
policyName = m_strPolicyName;
|
|
|
|
//get the condition collection for this SDO
|
|
CComPtr<ISdoCollection> spConditions;
|
|
|
|
// ====================
|
|
// conditions
|
|
::GetSdoInterfaceProperty(
|
|
m_spPolicySdo,
|
|
PROPERTY_POLICY_CONDITIONS_COLLECTION,
|
|
IID_ISdoCollection,
|
|
(void **)&spConditions);
|
|
|
|
// List of conditions.
|
|
ConditionList condList;
|
|
condList.finalConstruct(
|
|
NULL,
|
|
m_pAttrList,
|
|
ALLOWEDINCONDITION,
|
|
m_spDictionarySdo,
|
|
spConditions,
|
|
m_pPolicyNode->m_pszServerAddress,
|
|
policyName
|
|
);
|
|
strOutput += condList.getDisplayText();
|
|
|
|
|
|
// profile text
|
|
// if manual , then only display information -- it was set manually
|
|
::CString temp1;
|
|
if (!m_Scenarios[m_dwScenarioIndex]->m_bSheetWriteSDO)
|
|
{
|
|
temp1.LoadString(IDS_NEWRAPWIZ_COMPLETION_MANUALSET);
|
|
strOutput += temp1;
|
|
}
|
|
else
|
|
{
|
|
::CString sep;
|
|
|
|
// authentication
|
|
temp1.LoadString(IDS_NEWRAPWIZ_COMPLETION_AUTHEN);
|
|
strOutput += temp1;
|
|
|
|
if (m_bEAP)
|
|
{
|
|
::CString temp2;
|
|
|
|
temp1.LoadString(IDS_AUTHEN_METHOD_EAP);
|
|
temp2.Format(temp1, m_strEAPProvider);
|
|
strOutput += temp2;
|
|
sep.LoadString(IDS_NEWRAPWIZ_ITEM_SEP);
|
|
}
|
|
|
|
if (m_bMSCHAP)
|
|
{
|
|
temp1.LoadString(IDS_AUTHEN_METHOD_MSCHAP);
|
|
|
|
strOutput += sep;
|
|
strOutput += temp1;
|
|
sep.LoadString(IDS_NEWRAPWIZ_ITEM_SEP);
|
|
}
|
|
|
|
if (m_bMSCHAP2)
|
|
{
|
|
temp1.LoadString(IDS_AUTHEN_METHOD_MSCHAP2);
|
|
|
|
strOutput += sep;
|
|
strOutput += temp1;
|
|
}
|
|
|
|
// encryption
|
|
temp1.LoadString(IDS_NEWRAPWIZ_COMPLETION_ENCRY);
|
|
strOutput += temp1;
|
|
sep = L"";
|
|
|
|
if (m_bEncrypt_Basic)
|
|
{
|
|
temp1.LoadString(IDS_ENCYP_METHOD_BASIC);
|
|
|
|
strOutput += sep;
|
|
strOutput += temp1;
|
|
sep.LoadString(IDS_NEWRAPWIZ_ITEM_SEP);
|
|
}
|
|
|
|
if (m_bEncrypt_Strong)
|
|
{
|
|
temp1.LoadString(IDS_ENCYP_METHOD_STRONG);
|
|
|
|
strOutput += sep;
|
|
strOutput += temp1;
|
|
sep.LoadString(IDS_NEWRAPWIZ_ITEM_SEP);
|
|
}
|
|
|
|
if (m_bEncrypt_Strongest)
|
|
{
|
|
temp1.LoadString(IDS_ENCYP_METHOD_STRONGEST);
|
|
|
|
strOutput += sep;
|
|
strOutput += temp1;
|
|
sep.LoadString(IDS_NEWRAPWIZ_ITEM_SEP);
|
|
}
|
|
|
|
if (m_bEncrypt_No)
|
|
{
|
|
temp1.LoadString(IDS_ENCYP_METHOD_NO);
|
|
|
|
strOutput += sep;
|
|
strOutput += temp1;
|
|
}
|
|
}
|
|
settingsText = strOutput;
|
|
}
|
|
catch(...)
|
|
{
|
|
bRet = FALSE;
|
|
}
|
|
|
|
return bRet;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CRapWizardData::OnWizardPreFinish
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CRapWizardData::OnWizardPreFinish(HWND hWnd)
|
|
{
|
|
HRESULT hr = S_OK;
|
|
//
|
|
// when on manual scenario, the condition and profile data are already written in SDO -- but no persisted yet
|
|
// when on other scenario, the data are kept in RapWizardData, so we need to write the data to sdo
|
|
if (!m_Scenarios[m_dwScenarioIndex]->m_bSheetWriteSDO) // no write the addtional data into SDO
|
|
return TRUE;
|
|
|
|
// clean up profile, and policy object -- in case use used manual
|
|
//get the condition collection for this SDO
|
|
CComPtr<ISdoCollection> spConditions;
|
|
CComPtr<ISdoCollection> spProfileProperties;
|
|
VARIANT var;
|
|
VariantInit(&var);
|
|
CComBSTR bstrName;
|
|
CComPtr<IDispatch> spDisp;
|
|
CComPtr<ISdo> spCond;
|
|
|
|
// ====================
|
|
// conditions
|
|
hr = ::GetSdoInterfaceProperty(
|
|
m_spPolicySdo,
|
|
PROPERTY_POLICY_CONDITIONS_COLLECTION,
|
|
IID_ISdoCollection,
|
|
(void **)&spConditions);
|
|
|
|
if ( FAILED(hr) )
|
|
{
|
|
ErrorTrace(ERROR_NAPMMC_POLICYPAGE1, "Can't get condition collection Sdo, err = %x", hr);
|
|
return FALSE;
|
|
}
|
|
|
|
// clean up conditions
|
|
spConditions->RemoveAll();
|
|
|
|
// preconditions based on scenario
|
|
if ( m_Scenarios[m_dwScenarioIndex]->m_lpszPreCond)
|
|
{
|
|
bstrName = L"PreCondition0";
|
|
|
|
// prepare new condition
|
|
spDisp.Release();
|
|
hr = spConditions->Add(bstrName, &spDisp);
|
|
ASSERT(hr == S_OK);
|
|
spCond.Release();
|
|
hr = spDisp->QueryInterface(IID_ISdo, (void**)&spCond);
|
|
ASSERT(hr == S_OK);
|
|
|
|
VariantClear(&var);
|
|
V_VT(&var) = VT_BSTR;
|
|
V_BSTR(&var) = SysAllocString(m_Scenarios[m_dwScenarioIndex]->m_lpszPreCond);
|
|
|
|
// put condition with SDO
|
|
hr = spCond->PutProperty(PROPERTY_CONDITION_TEXT, &var);
|
|
VariantClear(&var);
|
|
|
|
if( FAILED (hr) )
|
|
{
|
|
ErrorTrace(DEBUG_NAPMMC_POLICYPAGE1, "Couldn't save this condition, err = %x", hr);
|
|
ShowErrorDialog( hWnd
|
|
, IDS_ERROR_SDO_ERROR_PUTPROP_CONDTEXT
|
|
, NULL
|
|
, hr
|
|
);
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
// windows group condition
|
|
if(m_dwUserOrGroup == IDC_NEWRAPWIZ_GROUP_GROUP)
|
|
{
|
|
|
|
bstrName = L"GrpCondition";
|
|
|
|
// prepare new condition
|
|
spDisp.Release();
|
|
hr = spConditions->Add(bstrName, &spDisp);
|
|
ASSERT(hr == S_OK);
|
|
spCond.Release();
|
|
hr = spDisp->QueryInterface(IID_ISdo, (void**)&spCond);
|
|
ASSERT(hr == S_OK);
|
|
|
|
m_NTGroups.PopulateVariantFromGroups(&var);
|
|
::CString str;
|
|
|
|
// now form the condition text
|
|
str = NTG_PREFIX;
|
|
str += _T("(\"");
|
|
str += V_BSTR(&var);
|
|
str += _T("\")");
|
|
VariantClear(&var);
|
|
V_VT(&var) = VT_BSTR;
|
|
V_BSTR(&var) = SysAllocString((LPCTSTR)str);
|
|
|
|
// put condition with SDO
|
|
hr = spCond->PutProperty(PROPERTY_CONDITION_TEXT, &var);
|
|
VariantClear(&var);
|
|
|
|
if( FAILED (hr) )
|
|
{
|
|
ErrorTrace(DEBUG_NAPMMC_POLICYPAGE1, "Couldn't save this condition, err = %x", hr);
|
|
ShowErrorDialog( hWnd
|
|
, IDS_ERROR_SDO_ERROR_PUTPROP_CONDTEXT
|
|
, NULL
|
|
, hr
|
|
);
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
// ====================
|
|
// profile properties
|
|
hr = ::GetSdoInterfaceProperty(
|
|
m_spProfileSdo,
|
|
PROPERTY_PROFILE_ATTRIBUTES_COLLECTION,
|
|
IID_ISdoCollection,
|
|
(void **)&spProfileProperties);
|
|
|
|
if ( FAILED(hr) )
|
|
{
|
|
ErrorTrace(ERROR_NAPMMC_POLICYPAGE1, "Can't get property collection Sdo, err = %x", hr);
|
|
return FALSE;
|
|
}
|
|
|
|
// clean up profiles -- in case use went to manual mode first, and then came back to other scenarios
|
|
spProfileProperties->RemoveAll();
|
|
|
|
((CPoliciesNode*)m_pPolicyNode->m_pParentNode)->AddDefaultProfileAttrs(
|
|
m_spProfileSdo,
|
|
m_Scenarios[m_dwScenarioIndex]->m_excludeFlag
|
|
);
|
|
|
|
// authentication -- attributes
|
|
DWORD MyArray[6];
|
|
DWORD dwNextCel = 0;
|
|
|
|
if (m_bEAP && m_dwEAPProvider != 0)
|
|
{
|
|
MyArray[dwNextCel++] = IAS_AUTH_EAP;
|
|
|
|
VariantClear(&var);
|
|
CVariantVector<VARIANT> eapArray(&var, 1);
|
|
|
|
VARIANT varEap;
|
|
VariantInit(&varEap);
|
|
V_VT(&varEap) = VT_I4;
|
|
V_I4(&varEap) = m_dwEAPProvider;
|
|
|
|
eapArray[0] = varEap;
|
|
|
|
((CPoliciesNode*)m_pPolicyNode->m_pParentNode)->AddProfAttr(spProfileProperties, IAS_ATTRIBUTE_NP_ALLOWED_EAP_TYPE, &var);
|
|
|
|
VariantClear(&var);
|
|
|
|
m_eapProfile.ClearExcept(static_cast<BYTE>(m_dwEAPProvider));
|
|
if (!m_eapProfile.IsEmpty())
|
|
{
|
|
HRESULT hr = m_eapProfile.Store(var);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
static_cast<CPoliciesNode*>(
|
|
m_pPolicyNode->m_pParentNode
|
|
)->AddProfAttr(
|
|
spProfileProperties,
|
|
IAS_ATTRIBUTE_EAP_CONFIG,
|
|
&var
|
|
);
|
|
|
|
VariantClear(&var);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (m_bMSCHAP)
|
|
{
|
|
MyArray[dwNextCel++] = IAS_AUTH_MSCHAP;
|
|
MyArray[dwNextCel++] = IAS_AUTH_MSCHAP_CPW;
|
|
}
|
|
|
|
if (m_bMSCHAP2)
|
|
{
|
|
MyArray[dwNextCel++] = IAS_AUTH_MSCHAP2;
|
|
MyArray[dwNextCel++] = IAS_AUTH_MSCHAP2_CPW;
|
|
}
|
|
|
|
// put new value
|
|
CSafeArray<CComVariant, VT_VARIANT> Values = Dim(dwNextCel); // 2 values
|
|
|
|
Values.Lock();
|
|
|
|
for ( int i = 0; i < dwNextCel; i++)
|
|
{
|
|
VariantClear(&var);
|
|
V_VT(&var) = VT_I4;
|
|
V_I4(&var) = MyArray[i];
|
|
Values[i] = var;
|
|
VariantClear(&var);
|
|
}
|
|
|
|
|
|
Values.Unlock();
|
|
|
|
|
|
if(dwNextCel > 0)
|
|
{
|
|
SAFEARRAY sa = (SAFEARRAY)Values;
|
|
V_VT(&var) = VT_ARRAY | VT_VARIANT;
|
|
V_ARRAY(&var) = &sa;
|
|
|
|
((CPoliciesNode*)m_pPolicyNode->m_pParentNode)->AddProfAttr(spProfileProperties, IAS_ATTRIBUTE_NP_AUTHENTICATION_TYPE, &var);
|
|
|
|
// not to call VariantClear, since the SAFEARRAY is not allocated using normal way
|
|
VariantInit(&var);
|
|
}
|
|
|
|
// encryption
|
|
DWORD EncPolicy = 0;
|
|
DWORD EncType = 0;
|
|
|
|
// ignore the default case -- allow anything, -- remove the attributes
|
|
if (!(m_bEncrypt_No && m_bEncrypt_Basic && m_bEncrypt_Strong && m_bEncrypt_Strongest))
|
|
{
|
|
|
|
if(m_bEncrypt_No)
|
|
EncPolicy = RAS_EP_ALLOW;
|
|
else
|
|
EncPolicy = RAS_EP_REQUIRE;
|
|
|
|
if ( m_bEncrypt_Basic )
|
|
EncType |= RAS_ET_BASIC;
|
|
|
|
if ( m_bEncrypt_Strong )
|
|
EncType |= RAS_ET_STRONG;
|
|
|
|
if ( m_bEncrypt_Strongest )
|
|
EncType |= RAS_ET_STRONGEST;
|
|
|
|
|
|
V_VT(&var) = VT_I4;
|
|
V_I4(&var) = EncType;
|
|
((CPoliciesNode*)m_pPolicyNode->m_pParentNode)->AddProfAttr(spProfileProperties, RAS_ATTRIBUTE_ENCRYPTION_TYPE, &var);
|
|
VariantClear(&var);
|
|
|
|
V_VT(&var) = VT_I4;
|
|
V_I4(&var) = EncPolicy;
|
|
|
|
((CPoliciesNode*)m_pPolicyNode->m_pParentNode)->AddProfAttr(spProfileProperties, RAS_ATTRIBUTE_ENCRYPTION_POLICY, &var);
|
|
VariantClear(&var);
|
|
}
|
|
|
|
// Dialin
|
|
V_VT(&var) = VT_BOOL;
|
|
V_I4(&var) = (m_bAllowDialin)? VARIANT_TRUE : VARIANT_FALSE;
|
|
((CPoliciesNode*)m_pPolicyNode->m_pParentNode)->AddProfAttr(spProfileProperties, IAS_ATTRIBUTE_ALLOW_DIALIN, &var);
|
|
VariantClear(&var);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CRapWizardData::OnWizardFinish
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CRapWizardData::OnWizardFinish(HWND hWnd)
|
|
{
|
|
|
|
HRESULT hr = S_OK;
|
|
try
|
|
{
|
|
|
|
// We should just be able to Apply here because the user has hit the Finish button.
|
|
hr = m_spPolicySdo->Apply();
|
|
if( FAILED( hr ) )
|
|
{
|
|
// can't commit on Policy
|
|
ErrorTrace(ERROR_NAPMMC_POLICYPAGE1, "PolicySdo->Apply() failed, err = %x", hr);
|
|
if(hr == DB_E_NOTABLE) // assume, the RPC connection has problem
|
|
ShowErrorDialog( hWnd, IDS_ERROR__NOTABLE_TO_WRITE_SDO );
|
|
else if(hr == HRESULT_FROM_WIN32(ERROR_ALREADY_EXISTS))
|
|
ShowErrorDialog( hWnd, IDS_ERROR_INVALID_POLICYNAME );
|
|
else
|
|
ShowErrorDialog( hWnd, IDS_ERROR_SDO_ERROR_POLICY_APPLY, NULL, hr );
|
|
throw hr;
|
|
}
|
|
|
|
hr = m_spProfileSdo->Apply();
|
|
|
|
if( FAILED( hr ) )
|
|
{
|
|
if(hr == DB_E_NOTABLE) // assume, the RPC connection has problem
|
|
ShowErrorDialog( hWnd, IDS_ERROR__NOTABLE_TO_WRITE_SDO );
|
|
else
|
|
{
|
|
// can't commit on Profiles
|
|
ErrorTrace(ERROR_NAPMMC_POLICYPAGE1, "ProfileSdo->Apply() failed, err = %x", hr);
|
|
ShowErrorDialog( hWnd, IDS_ERROR_SDO_ERROR_PROFILE_APPLY, NULL, hr );
|
|
}
|
|
throw hr;
|
|
}
|
|
|
|
|
|
// Tell the service to reload data.
|
|
HRESULT hrTemp = m_spSdoServiceControl->ResetService();
|
|
if( FAILED( hrTemp ) )
|
|
{
|
|
ErrorTrace(ERROR_NAPMMC_POLICYPAGE1, "ISdoServiceControl::ResetService() failed, err = %x", hrTemp);
|
|
}
|
|
|
|
|
|
// Make sure the node object knows about any changes we made to SDO while in proppage.
|
|
m_pPolicyNode->LoadSdoData();
|
|
|
|
// Add the child to the UI's list of nodes and end this dialog.
|
|
DebugTrace(DEBUG_NAPMMC_POLICYPAGE1, "Adding the brand new node...");
|
|
CPoliciesNode* pPoliciesNode = (CPoliciesNode*)(m_pPolicyNode->m_pParentNode);
|
|
pPoliciesNode->AddSingleChildToListAndCauseViewUpdate( m_pPolicyNode );
|
|
|
|
}
|
|
catch(...)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
// reset the dirty bit
|
|
return TRUE;
|
|
}
|
|
|
|
//=======================================================================================
|
|
//
|
|
//
|
|
// CPolicyWizard_Scenarios
|
|
//
|
|
//
|
|
//=======================================================================================
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: CPolicyWizard_Scenarios
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
CPolicyWizard_Scenarios::CPolicyWizard_Scenarios( CRapWizardData* pWizData, LONG_PTR hNotificationHandle,
|
|
TCHAR* pTitle, BOOL bOwnsNotificationHandle
|
|
)
|
|
: m_spWizData(pWizData)
|
|
, CIASWizard97Page<CPolicyWizard_Scenarios, IDS_NEWRAPWIZ_SCENARIO_TITLE, IDS_NEWRAPWIZ_SCENARIO_SUBTITLE>( hNotificationHandle, pTitle, bOwnsNotificationHandle )
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Scenarios::CPolicyWizard_Scenarios");
|
|
_ASSERTE(pWizData);
|
|
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: CPolicyWizard_Scenarios
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
CPolicyWizard_Scenarios::~CPolicyWizard_Scenarios()
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Scenarios::~CPolicyWizard_Scenarios");
|
|
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Scenarios::OnInitDialog
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Scenarios::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Scenarios::OnInitDialog");
|
|
|
|
// uncheck all
|
|
|
|
// check the default selected one
|
|
CheckDlgButton(IDC_NEWRAPWIZ_SCENARIO_VPN, BST_CHECKED);
|
|
|
|
// clean dirty bit
|
|
SetModified(FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Scenarios::OnDialinCheck
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Scenarios::OnScenario(UINT uMsg, WPARAM wParam, HWND hWnd, BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Scenarios::OnScenario");
|
|
|
|
SetModified(TRUE);
|
|
|
|
return 0;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Scenarios::OnWizardNext
|
|
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CPolicyWizard_Scenarios::OnWizardNext()
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Scenarios::OnWizardNext");
|
|
DWORD dwScenaro = 0;
|
|
CRapWizScenario** pS = m_spWizData->GetAllScenarios();
|
|
|
|
while(*pS != NULL)
|
|
{
|
|
if (IsDlgButtonChecked((*pS)->m_dwScenarioID))
|
|
{
|
|
dwScenaro = (*pS)->m_dwScenarioID;
|
|
break;
|
|
}
|
|
pS++;
|
|
}
|
|
|
|
if (dwScenaro == 0)
|
|
return FALSE;
|
|
|
|
// reset the dirty bit
|
|
SetModified(FALSE);
|
|
m_spWizData->SetScenario(dwScenaro);
|
|
|
|
return m_spWizData->GetNextPageId(((PROPSHEETPAGE*)(*this))->pszTemplate);
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Scenarios::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 CPolicyWizard_Scenarios::OnSetActive()
|
|
{
|
|
ATLTRACE(_T("# CPolicyWizard_Scenarios::OnSetActive\n"));
|
|
|
|
// MSDN docs say you need to use PostMessage here rather than SendMessage.
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_NEXT | PSWIZB_BACK);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
|
|
//=======================================================================================
|
|
//
|
|
//
|
|
// CPolicyWizard_Groups
|
|
//
|
|
//
|
|
//=======================================================================================
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: CPolicyWizard_Groups
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
CPolicyWizard_Groups::CPolicyWizard_Groups( CRapWizardData* pWizData, LONG_PTR hNotificationHandle,
|
|
TCHAR* pTitle, BOOL bOwnsNotificationHandle
|
|
)
|
|
: m_spWizData(pWizData)
|
|
, CIASWizard97Page<CPolicyWizard_Groups, IDS_NEWRAPWIZ_GROUP_TITLE, IDS_NEWRAPWIZ_GROUP_SUBTITLE>( hNotificationHandle, pTitle, bOwnsNotificationHandle )
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Scenarios::CPolicyWizard_Scenarios");
|
|
_ASSERTE(pWizData);
|
|
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: CPolicyWizard_Scenarios
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
CPolicyWizard_Groups::~CPolicyWizard_Groups()
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Groups::~CPolicyWizard_Groups");
|
|
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Groups::OnInitDialog
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Groups::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Groups::OnInitDialog");
|
|
|
|
// uncheck all
|
|
CheckDlgButton(IDC_NEWRAPWIZ_GROUP_USER, BST_UNCHECKED);
|
|
CheckDlgButton(IDC_NEWRAPWIZ_GROUP_GROUP, BST_UNCHECKED);
|
|
|
|
// check the default selected one
|
|
CheckDlgButton(m_spWizData->m_dwUserOrGroup, BST_CHECKED);
|
|
|
|
SetBtnState();
|
|
|
|
// listview init
|
|
HWND hList = GetDlgItem(IDC_NEWRAPWIZ_GROUP_GROUPS);
|
|
|
|
//
|
|
// first, set the list box to 2 columns
|
|
//
|
|
LVCOLUMN lvc;
|
|
int iCol;
|
|
WCHAR achColumnHeader[256];
|
|
HINSTANCE hInst;
|
|
|
|
// initialize the LVCOLUMN structure
|
|
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
|
|
lvc.fmt = LVCFMT_LEFT;
|
|
|
|
lvc.cx = 300;
|
|
lvc.pszText = achColumnHeader;
|
|
|
|
// first column header: name
|
|
hInst = _Module.GetModuleInstance();
|
|
|
|
::LoadStringW(hInst, IDS_DISPLAY_GROUPS_FIRSTCOLUMN, achColumnHeader, sizeof(achColumnHeader)/sizeof(achColumnHeader[0]));
|
|
lvc.iSubItem = 0;
|
|
ListView_InsertColumn(hList, 0, &lvc);
|
|
|
|
// Set the listview control so that double-click anywhere in row selects.
|
|
ListView_SetExtendedListViewStyleEx(hList, LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
|
|
|
|
//
|
|
|
|
// link the list view with help class
|
|
m_spWizData->m_NTGroups.SetListView(GetDlgItem(IDC_NEWRAPWIZ_GROUP_GROUPS), this->m_hWnd);
|
|
|
|
m_spWizData->m_NTGroups.PopulateGroupList( 0 );
|
|
|
|
// Set some items based on whether the list is empty or not.
|
|
if( m_spWizData->m_NTGroups.size() )
|
|
{
|
|
|
|
// Select the first item.
|
|
ListView_SetItemState(hList, 0, LVIS_SELECTED, LVIS_SELECTED);
|
|
|
|
}
|
|
else
|
|
{
|
|
// Make sure the Remove button is not enabled initially.
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_GROUP_REMOVEGROUP), FALSE);
|
|
}
|
|
|
|
|
|
// clean dirty bit
|
|
SetModified(FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Scenarios::OnUserOrGroup
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Groups::OnUserOrGroup(UINT uMsg, WPARAM wParam, HWND hWnd, BOOL& bHandled)
|
|
{
|
|
BOOL bGroup = IsDlgButtonChecked(IDC_NEWRAPWIZ_GROUP_GROUP);
|
|
|
|
// ::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_GROUP_GROUPS), bGroup);
|
|
SetBtnState();
|
|
// ::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_GROUP_ADDGROUP), bGroup);
|
|
|
|
SetModified(TRUE);
|
|
|
|
return 0;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Scenarios::OnUserOrGroup
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Groups::OnRemoveGroup(UINT uMsg, WPARAM wParam, HWND hWnd, BOOL& bHandled)
|
|
{
|
|
m_spWizData->m_NTGroups.RemoveSelectedGroups();
|
|
SetBtnState();
|
|
SetModified(TRUE);
|
|
|
|
|
|
return 0;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Scenarios::OnUserOrGroup
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Groups::OnAddGroups(UINT uMsg, WPARAM wParam, HWND hWnd, BOOL& bHandled)
|
|
{
|
|
m_spWizData->m_NTGroups.AddMoreGroups();
|
|
SetBtnState();
|
|
SetModified(TRUE);
|
|
|
|
return 0;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CNewRAPWiz_AllowDeny::OnWizardNext
|
|
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CPolicyWizard_Groups::OnWizardNext()
|
|
{
|
|
DWORD dwScenaro = 0;
|
|
|
|
if (IsDlgButtonChecked(IDC_NEWRAPWIZ_GROUP_GROUP))
|
|
{
|
|
m_spWizData->m_dwUserOrGroup = IDC_NEWRAPWIZ_GROUP_GROUP;
|
|
m_spWizData->m_bAllowDialin = TRUE;
|
|
}
|
|
else if (IsDlgButtonChecked(IDC_NEWRAPWIZ_GROUP_USER))
|
|
{
|
|
m_spWizData->m_dwUserOrGroup = IDC_NEWRAPWIZ_GROUP_USER;
|
|
m_spWizData->m_bAllowDialin = FALSE;
|
|
}
|
|
else
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
// reset the dirty bit
|
|
SetModified(FALSE);
|
|
|
|
return m_spWizData->GetNextPageId(((PROPSHEETPAGE*)(*this))->pszTemplate);
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Groups::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 CPolicyWizard_Groups::OnSetActive()
|
|
{
|
|
ATLTRACE(_T("# CPolicyWizard_Groups::OnSetActive\n"));
|
|
|
|
// MSDN docs say you need to use PostMessage here rather than SendMessage.
|
|
SetBtnState();
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Groups::OnListViewItemChanged
|
|
|
|
We enable or disable the Remove button depending on whether an item is selected.
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Groups::OnListViewItemChanged(int idCtrl,
|
|
LPNMHDR pnmh,
|
|
BOOL& bHandled)
|
|
{
|
|
SetBtnState();
|
|
|
|
bHandled = FALSE;
|
|
return 0;
|
|
}
|
|
|
|
void CPolicyWizard_Groups::SetBtnState()
|
|
{
|
|
BOOL bGroup = IsDlgButtonChecked(IDC_NEWRAPWIZ_GROUP_GROUP);
|
|
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_GROUP_GROUPS), bGroup);
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_GROUP_GROUPTEXT), bGroup);
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_GROUP_ADDGROUP), bGroup);
|
|
|
|
// remove button
|
|
// Find out what's selected.
|
|
int iSelected = ListView_GetNextItem(GetDlgItem(IDC_NEWRAPWIZ_GROUP_GROUPS), -1, LVNI_SELECTED);
|
|
|
|
|
|
if (-1 == iSelected || !bGroup)
|
|
{
|
|
if( ::GetFocus() == GetDlgItem(IDC_NEWRAPWIZ_GROUP_REMOVEGROUP))
|
|
::SetFocus(GetDlgItem(IDC_NEWRAPWIZ_GROUP_ADDGROUP));
|
|
|
|
// The user selected nothing, let's disable the remove button.
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_GROUP_REMOVEGROUP), FALSE);
|
|
}
|
|
else
|
|
{
|
|
// Yes, enable the remove button.
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_GROUP_REMOVEGROUP), TRUE);
|
|
}
|
|
|
|
// next button
|
|
if(bGroup && m_spWizData->m_NTGroups.size() < 1)
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK);
|
|
else
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK | PSWIZB_NEXT);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
//=======================================================================================
|
|
//
|
|
//
|
|
// CPolicyWizard_Authentication
|
|
//
|
|
//
|
|
//=======================================================================================
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: CPolicyWizard_Authentication
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
CPolicyWizard_Authentication::CPolicyWizard_Authentication( CRapWizardData* pWizData, LONG_PTR hNotificationHandle,
|
|
TCHAR* pTitle, BOOL bOwnsNotificationHandle
|
|
)
|
|
: m_spWizData(pWizData)
|
|
, CIASWizard97Page<CPolicyWizard_Authentication, IDS_NEWRAPWIZ_AUTHENTICATION_TITLE, IDS_NEWRAPWIZ_AUTHENTICATION_SUBTITLE>( hNotificationHandle, pTitle, bOwnsNotificationHandle )
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Authentication::CPolicyWizard_Authentication");
|
|
_ASSERTE(pWizData);
|
|
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: CPolicyWizard_Authentication
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
CPolicyWizard_Authentication::~CPolicyWizard_Authentication()
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Authentication::~CPolicyWizard_Authentication");
|
|
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Authentication::OnInitDialog
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Authentication::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Authentication::OnInitDialog");
|
|
|
|
// check the default values ...
|
|
if (m_spWizData->m_bMSCHAP)
|
|
CheckDlgButton(IDC_NEWRAPWIZ_AUTH_MSCHAP, BST_CHECKED);
|
|
|
|
if (m_spWizData->m_bMSCHAP2)
|
|
CheckDlgButton(IDC_NEWRAPWIZ_AUTH_MSCHAP2, BST_CHECKED);
|
|
|
|
if (m_spWizData->m_bEAP)
|
|
CheckDlgButton(IDC_NEWRAPWIZ_AUTH_EAP, BST_CHECKED);
|
|
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_AUTH_EAP_COMBO), m_spWizData->m_bEAP);
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_AUTH_CONFIGEAP), m_spWizData->m_bEAP);
|
|
|
|
// populate EAP providers
|
|
HRESULT hr = InternalGetEapProviders(
|
|
m_spWizData->m_pPolicyNode->m_pszServerAddress,
|
|
&m_EAPProviders);
|
|
m_EapBox.Attach(GetDlgItem (IDC_NEWRAPWIZ_AUTH_EAP_COMBO));
|
|
|
|
ResetEAPList();
|
|
|
|
// clean dirty bit
|
|
SetModified(FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Authentication::ResetEAPlist
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
void CPolicyWizard_Authentication::ResetEAPList()
|
|
{
|
|
m_EapBox.ResetContent();
|
|
for(int i = 0; i < m_EAPProviders.GetSize(); i++)
|
|
{
|
|
// VPN only shows the ones support encryption
|
|
BOOL bAdd = FALSE;
|
|
|
|
if (m_EAPProviders[i].m_fSupportsEncryption && m_spWizData->GetScenario()->m_bAllowEncryptionEAP)
|
|
{
|
|
int iComboIndex = m_EapBox.AddString( m_EAPProviders[i].m_stServerTitle );
|
|
|
|
if(iComboIndex != CB_ERR)
|
|
m_EapBox.SetItemData(iComboIndex, i);
|
|
}
|
|
|
|
if (!m_EAPProviders[i].m_fSupportsEncryption && m_spWizData->GetScenario()->m_bAllowClearEAP)
|
|
{
|
|
int iComboIndex = m_EapBox.AddString( m_EAPProviders[i].m_stServerTitle );
|
|
|
|
if(iComboIndex != CB_ERR)
|
|
m_EapBox.SetItemData(iComboIndex, i);
|
|
}
|
|
};
|
|
|
|
if(m_EAPProviders.GetSize() > 0)
|
|
m_EapBox.SetCurSel(0);
|
|
|
|
BOOL b;
|
|
OnSelectedEAPChanged(0,0,0, b);
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Authentication::OnUserOrGroup
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Authentication::OnAuthSelect(UINT uMsg, WPARAM wParam, HWND hWnd, BOOL& bHandled)
|
|
{
|
|
m_spWizData->m_bEAP = IsDlgButtonChecked(IDC_NEWRAPWIZ_AUTH_EAP);
|
|
m_spWizData->m_bMSCHAP2 = IsDlgButtonChecked(IDC_NEWRAPWIZ_AUTH_MSCHAP2);
|
|
m_spWizData->m_bMSCHAP = IsDlgButtonChecked(IDC_NEWRAPWIZ_AUTH_MSCHAP);
|
|
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_AUTH_EAP_COMBO), m_spWizData->m_bEAP);
|
|
|
|
if(m_spWizData->m_bEAP)
|
|
{
|
|
BOOL b;
|
|
OnSelectedEAPChanged(0,0,0, b);
|
|
}
|
|
else
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_AUTH_CONFIGEAP), m_spWizData->m_bEAP);
|
|
|
|
SetModified(TRUE);
|
|
|
|
// Find out what's selected.
|
|
int iSelected = m_EapBox.GetCurSel();;
|
|
|
|
if ((m_spWizData->m_bEAP && iSelected != -1)|| m_spWizData->m_bMSCHAP2 || m_spWizData->m_bMSCHAP)
|
|
// MSDN docs say you need to use PostMessage here rather than SendMessage.
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK | PSWIZB_NEXT);
|
|
else
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK);
|
|
|
|
return 0;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Authentication::OnConfigEAP
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Authentication::OnConfigEAP(
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
HWND hWnd,
|
|
BOOL& bHandled
|
|
)
|
|
{
|
|
// Find out what's selected.
|
|
int iSelected = m_EapBox.GetCurSel();
|
|
if (iSelected == -1)
|
|
{
|
|
return S_OK;
|
|
}
|
|
|
|
DWORD index = m_EapBox.GetItemData(iSelected);
|
|
if (m_EAPProviders[index].m_stConfigCLSID.IsEmpty())
|
|
{
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT hr;
|
|
|
|
do
|
|
{
|
|
GUID guid;
|
|
hr = CLSIDFromString(
|
|
const_cast<wchar_t*>(
|
|
static_cast<const wchar_t*>(
|
|
m_EAPProviders[index].m_stConfigCLSID
|
|
)
|
|
),
|
|
&guid
|
|
);
|
|
if (FAILED(hr))
|
|
{
|
|
break;
|
|
}
|
|
|
|
// Create the EAP provider object
|
|
CComPtr<IEAPProviderConfig> spEAPConfig;
|
|
hr = CoCreateInstance(
|
|
guid,
|
|
0,
|
|
CLSCTX_INPROC_SERVER,
|
|
__uuidof(IEAPProviderConfig),
|
|
reinterpret_cast<void**>(&spEAPConfig)
|
|
);
|
|
if (FAILED(hr))
|
|
{
|
|
break;
|
|
}
|
|
|
|
// Configure this EAP provider
|
|
// EAP configure displays its own error message, so no hr is kept
|
|
DWORD dwId = _wtol(m_EAPProviders[index].m_stKey);
|
|
ULONG_PTR uConnection = 0;
|
|
hr = spEAPConfig->Initialize(
|
|
m_spWizData->m_pPolicyNode->m_pszServerAddress,
|
|
dwId,
|
|
&uConnection
|
|
);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
CComPtr<IEAPProviderConfig2> spEAPConfig2;
|
|
hr = spEAPConfig->QueryInterface(
|
|
__uuidof(IEAPProviderConfig2),
|
|
reinterpret_cast<void**>(&spEAPConfig2)
|
|
);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
EapProfile::ConstConfigData inData;
|
|
m_spWizData->m_eapProfile.Get(static_cast<BYTE>(dwId), inData);
|
|
EapProfile::ConfigData outData = { 0, 0 };
|
|
hr = spEAPConfig2->ServerInvokeConfigUI2(
|
|
dwId,
|
|
uConnection,
|
|
m_hWnd,
|
|
inData.value,
|
|
inData.length,
|
|
&(outData.value),
|
|
&(outData.length)
|
|
);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
hr = m_spWizData->m_eapProfile.Set(
|
|
static_cast<BYTE>(dwId),
|
|
outData
|
|
);
|
|
CoTaskMemFree(outData.value);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Bring up the configuration UI for this EAP
|
|
hr = spEAPConfig->ServerInvokeConfigUI(
|
|
dwId,
|
|
uConnection,
|
|
m_hWnd,
|
|
0,
|
|
0
|
|
);
|
|
}
|
|
|
|
spEAPConfig->Uninitialize(dwId, uConnection);
|
|
}
|
|
}
|
|
while (false);
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
ShowErrorDialog(m_hWnd, IDS_FAILED_CONFIG_EAP, NULL, hr, 0);
|
|
}
|
|
|
|
SetModified(TRUE);
|
|
|
|
return 0;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Authentication::OnWizardNext
|
|
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CPolicyWizard_Authentication::OnWizardNext()
|
|
{
|
|
// reset the dirty bit
|
|
SetModified(FALSE);
|
|
|
|
return m_spWizData->GetNextPageId(((PROPSHEETPAGE*)(*this))->pszTemplate);
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Groups::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 CPolicyWizard_Authentication::OnSetActive()
|
|
{
|
|
ATLTRACE(_T("# CPolicyWizard_Groups::OnSetActive\n"));
|
|
|
|
ResetEAPList();
|
|
|
|
// Find out what's selected.
|
|
int iSelected = m_EapBox.GetCurSel();;
|
|
if( m_spWizData->m_bEAP && iSelected == -1)
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK);
|
|
else
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK | PSWIZB_NEXT);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Groups::OnListViewItemChanged
|
|
|
|
We enable or disable the Remove button depending on whether an item is selected.
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Authentication::OnSelectedEAPChanged(
|
|
UINT uMsg
|
|
, WPARAM wParam
|
|
, HWND hwnd
|
|
, BOOL& bHandled
|
|
)
|
|
{
|
|
// Find out what's selected.
|
|
int iSelected = m_EapBox.GetCurSel();;
|
|
|
|
if (-1 == iSelected )
|
|
{
|
|
if( ::GetFocus() == GetDlgItem(IDC_NEWRAPWIZ_AUTH_CONFIGEAP))
|
|
::SetFocus(GetDlgItem(IDC_NEWRAPWIZ_AUTH_EAP_COMBO));
|
|
|
|
// The user selected nothing, let's disable the remove button.
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_AUTH_CONFIGEAP), FALSE);
|
|
|
|
m_spWizData->m_dwEAPProvider = 0;
|
|
}
|
|
else
|
|
{
|
|
// enable configure button if it's configrable
|
|
DWORD index = m_EapBox.GetItemData(iSelected);
|
|
m_spWizData->m_dwEAPProvider = _ttol(m_EAPProviders[index].m_stKey);
|
|
m_spWizData->m_strEAPProvider = m_EAPProviders[index].m_stServerTitle;
|
|
::EnableWindow(GetDlgItem(IDC_NEWRAPWIZ_AUTH_CONFIGEAP), (!m_EAPProviders[index].m_stConfigCLSID.IsEmpty()));
|
|
}
|
|
|
|
bHandled = FALSE;
|
|
return 0;
|
|
}
|
|
|
|
|
|
//=======================================================================================
|
|
//
|
|
//
|
|
// CPolicyWizard_EAP
|
|
//
|
|
//
|
|
//=======================================================================================
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_EAP::OnInitDialog
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_EAP::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_EAP::OnInitDialog");
|
|
|
|
m_spWizData->m_bEAP = TRUE;
|
|
m_spWizData->m_bMSCHAP2 = FALSE;
|
|
m_spWizData->m_bMSCHAP = FALSE;
|
|
// populate EAP providers
|
|
HRESULT hr = InternalGetEapProviders(
|
|
m_spWizData->m_pPolicyNode->m_pszServerAddress,
|
|
&m_EAPProviders);
|
|
m_EapBox.Attach(GetDlgItem (IDC_NEWRAPWIZ_AUTH_EAP_COMBO));
|
|
|
|
ResetEAPList();
|
|
|
|
// clean dirty bit
|
|
SetModified(FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_EAP::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 CPolicyWizard_EAP::OnSetActive()
|
|
{
|
|
ATLTRACE(_T("# CPolicyWizard_Groups::OnSetActive\n"));
|
|
|
|
ResetEAPList();
|
|
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK | PSWIZB_NEXT);
|
|
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
//=======================================================================================
|
|
//
|
|
//
|
|
// CPolicyWizard_Encryption
|
|
//
|
|
//
|
|
//=======================================================================================
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: CPolicyWizard_Encryption
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
CPolicyWizard_Encryption::CPolicyWizard_Encryption( CRapWizardData* pWizData, LONG_PTR hNotificationHandle,
|
|
TCHAR* pTitle, BOOL bOwnsNotificationHandle
|
|
)
|
|
: m_spWizData(pWizData)
|
|
, CIASWizard97Page<CPolicyWizard_Encryption, IDS_NEWRAPWIZ_ENCRYPTION_TITLE, IDS_NEWRAPWIZ_ENCRYPTION_SUBTITLE>( hNotificationHandle, pTitle, bOwnsNotificationHandle )
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Encryption::CPolicyWizard_Encryption");
|
|
_ASSERTE(pWizData);
|
|
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Function: CPolicyWizard_Encryption
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
//
|
|
//+---------------------------------------------------------------------------
|
|
CPolicyWizard_Encryption::~CPolicyWizard_Encryption()
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Encryption::~CPolicyWizard_Encryption");
|
|
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Encryption::OnInitDialog
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Encryption::OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
|
|
{
|
|
TRACE_FUNCTION("CPolicyWizard_Encryption::OnInitDialog");
|
|
|
|
// don't show No encryption with VPN IDC_NEWRAPWIZ_ENCRY_NO_STATIC
|
|
if (m_spWizData->GetScenario()->m_bAllowClear)
|
|
{
|
|
::ShowWindow(GetDlgItem(IDC_NEWRAPWIZ_ENCRY_NO), SW_SHOW);
|
|
}
|
|
else
|
|
{
|
|
::ShowWindow(GetDlgItem(IDC_NEWRAPWIZ_ENCRY_NO), SW_HIDE);
|
|
}
|
|
|
|
// check the default values ...
|
|
if (m_spWizData->m_bEncrypt_No)
|
|
CheckDlgButton(IDC_NEWRAPWIZ_ENCRY_NO, BST_CHECKED);
|
|
|
|
if (m_spWizData->m_bEncrypt_Basic)
|
|
CheckDlgButton(IDC_NEWRAPWIZ_ENCRY_BASIC, BST_CHECKED);
|
|
|
|
if (m_spWizData->m_bEncrypt_Strong)
|
|
CheckDlgButton(IDC_NEWRAPWIZ_ENCRY_STRONG, BST_CHECKED);
|
|
|
|
if (m_spWizData->m_bEncrypt_Strongest)
|
|
CheckDlgButton(IDC_NEWRAPWIZ_ENCRY_STRONGEST, BST_CHECKED);
|
|
|
|
// clean dirty bit
|
|
SetModified(FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Encryption::OnEncryptionSelect
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
LRESULT CPolicyWizard_Encryption::OnEncryptionSelect(UINT uMsg, WPARAM wParam, HWND hWnd, BOOL& bHandled)
|
|
{
|
|
m_spWizData->m_bEncrypt_No = IsDlgButtonChecked(IDC_NEWRAPWIZ_ENCRY_NO);
|
|
m_spWizData->m_bEncrypt_Basic = IsDlgButtonChecked(IDC_NEWRAPWIZ_ENCRY_BASIC);
|
|
m_spWizData->m_bEncrypt_Strong = IsDlgButtonChecked(IDC_NEWRAPWIZ_ENCRY_STRONG);
|
|
m_spWizData->m_bEncrypt_Strongest = IsDlgButtonChecked(IDC_NEWRAPWIZ_ENCRY_STRONGEST);
|
|
|
|
// reset the dirty bit
|
|
SetModified(TRUE);
|
|
|
|
if (m_spWizData->m_bEncrypt_No || m_spWizData->m_bEncrypt_Basic || m_spWizData->m_bEncrypt_Strong || m_spWizData->m_bEncrypt_Strongest)
|
|
// MSDN docs say you need to use PostMessage here rather than SendMessage.
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK | PSWIZB_NEXT );
|
|
else
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK);
|
|
|
|
|
|
return 0;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Encryption::OnWizardNext
|
|
|
|
// History: Created Header 05/04/00 4:31:52 PM
|
|
|
|
--*/
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
BOOL CPolicyWizard_Encryption::OnWizardNext()
|
|
{
|
|
m_spWizData->m_bEncrypt_No = IsDlgButtonChecked(IDC_NEWRAPWIZ_ENCRY_NO);
|
|
m_spWizData->m_bEncrypt_Basic = IsDlgButtonChecked(IDC_NEWRAPWIZ_ENCRY_BASIC);
|
|
m_spWizData->m_bEncrypt_Strong = IsDlgButtonChecked(IDC_NEWRAPWIZ_ENCRY_STRONG);
|
|
m_spWizData->m_bEncrypt_Strongest = IsDlgButtonChecked(IDC_NEWRAPWIZ_ENCRY_STRONGEST);
|
|
|
|
// reset the dirty bit
|
|
SetModified(FALSE);
|
|
|
|
return m_spWizData->GetNextPageId(((PROPSHEETPAGE*)(*this))->pszTemplate);
|
|
}
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
/*++
|
|
|
|
CPolicyWizard_Encryption::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 CPolicyWizard_Encryption::OnSetActive()
|
|
{
|
|
// MSDN docs say you need to use PostMessage here rather than SendMessage.
|
|
if (m_spWizData->m_bEncrypt_No || m_spWizData->m_bEncrypt_Basic || m_spWizData->m_bEncrypt_Strong || m_spWizData->m_bEncrypt_Strongest)
|
|
// MSDN docs say you need to use PostMessage here rather than SendMessage.
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK | PSWIZB_NEXT );
|
|
else
|
|
::PropSheet_SetWizButtons(GetParent(), PSWIZB_BACK);
|
|
|
|
|
|
// don't show No encryption with VPN IDC_NEWRAPWIZ_ENCRY_NO_STATIC
|
|
if (m_spWizData->GetScenario()->m_bAllowClear)
|
|
{
|
|
::ShowWindow(GetDlgItem(IDC_NEWRAPWIZ_ENCRY_NO), SW_SHOW);
|
|
}
|
|
else
|
|
{
|
|
::ShowWindow(GetDlgItem(IDC_NEWRAPWIZ_ENCRY_NO), SW_HIDE);
|
|
}
|
|
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
void SetWizardLargeFont(HWND hWnd, int controlId)
|
|
{
|
|
static CFont largeFont;
|
|
AFX_MANAGE_STATE(AfxGetStaticModuleState());
|
|
|
|
CWnd wnd;
|
|
wnd.Attach(::GetDlgItem(hWnd, controlId));
|
|
if (wnd.m_hWnd)
|
|
{
|
|
::CString FontSize;
|
|
::CString FontName;
|
|
|
|
FontSize.LoadString(IDS_LARGE_FONT_SIZE);
|
|
FontName.LoadString(IDS_LARGE_FONT_NAME);
|
|
// If we don't have the large font yet, ...
|
|
if (!(HFONT)largeFont)
|
|
{
|
|
// ... create it.
|
|
largeFont.CreatePointFont(
|
|
10 * _wtoi((LPCTSTR)FontSize),
|
|
FontName
|
|
);
|
|
}
|
|
|
|
wnd.SetFont(&largeFont);
|
|
wnd.Detach();
|
|
}
|
|
}
|
|
|
|
|
|
HRESULT InternalGetEapProviders(
|
|
LPCWSTR machineName,
|
|
AuthProviderArray *pProvList
|
|
)
|
|
{
|
|
typedef HRESULT (GET_EAP_PROVIDERS)(
|
|
LPCWSTR machineName,
|
|
AuthProviderArray *pProvList
|
|
);
|
|
|
|
GET_EAP_PROVIDERS* pGetEapProviders = NULL;
|
|
|
|
HRESULT hr = S_OK;
|
|
HMODULE rasUserDll = LoadLibraryW(L"rasuser.dll");
|
|
if (rasUserDll == NULL)
|
|
{
|
|
hr = HRESULT_FROM_WIN32(GetLastError());
|
|
IASTracePrintf("ERROR InternalGetEapProviders LoadLibrary(rasuser.dll)"
|
|
"failed. hr = %x ", hr);
|
|
|
|
ShowErrorDialog(NULL, IDS_ERROR_CANT_FIND_PROFILEDLL, NULL, hr);
|
|
return hr;
|
|
}
|
|
|
|
pGetEapProviders = (GET_EAP_PROVIDERS*) GetProcAddress(
|
|
rasUserDll,
|
|
"GetEapProviders");
|
|
if (pGetEapProviders == NULL)
|
|
{
|
|
hr = HRESULT_FROM_WIN32(GetLastError());
|
|
ErrorTrace(ERROR_NAPMMC_POLICYPAGE1, "GetProcAddress() failed, err = %x", hr);
|
|
|
|
ShowErrorDialog(NULL, IDS_ERROR_CANT_FIND_PROFILEAPI, NULL, hr);
|
|
}
|
|
else
|
|
{
|
|
hr = pGetEapProviders(machineName, pProvList);
|
|
}
|
|
FreeLibrary(rasUserDll);
|
|
return hr;
|
|
}
|