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.
382 lines
11 KiB
382 lines
11 KiB
//----------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 2001.
|
|
//
|
|
// File: Genpage.cpp
|
|
//
|
|
// Contents: Wireless Network Policy Management Snapin WIFI Policy General Properties
|
|
//
|
|
//
|
|
// History: TaroonM
|
|
// 10/30/01
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
#include "stdafx.h"
|
|
#include "sprpage.h"
|
|
#include "GenPage.h"
|
|
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CGenPage property page
|
|
|
|
IMPLEMENT_DYNCREATE(CGenPage, CSnapinPropPage)
|
|
|
|
//CGenPage::CGenPage() : CSnapinPropPage(CGenPage::IDD)
|
|
CGenPage::CGenPage(UINT nIDTemplate) : CSnapinPropPage(nIDTemplate)
|
|
{
|
|
//{{AFX_DATA_INIT(CGenPage)
|
|
// NOTE: the ClassWizard will add member initialization here
|
|
//}}AFX_DATA_INIT
|
|
|
|
m_dlgIDD = nIDTemplate;
|
|
m_bNameChanged = FALSE;
|
|
m_bPageInitialized = FALSE;
|
|
m_dwEnableZeroConf = FALSE;
|
|
m_dwConnectToNonPreferredNtwks = FALSE;
|
|
m_dwPollingInterval = 90;
|
|
m_MMCthreadID = ::GetCurrentThreadId();
|
|
m_bReadOnly = FALSE;
|
|
}
|
|
|
|
CGenPage::~CGenPage()
|
|
{
|
|
}
|
|
|
|
void CGenPage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CSnapinPropPage::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CGenPage)
|
|
DDX_Control(pDX, IDC_EDNAME, m_edName);
|
|
DDX_Control(pDX, IDC_EDDESCRIPTION, m_edDescription);
|
|
DDX_Check(pDX,IDC_DISABLE_ZERO_CONF,m_dwEnableZeroConf);
|
|
DDX_Check(pDX,IDC_AUTOMATICALLY_CONNECT_TO_NON_PREFERRED_NTWKS,m_dwConnectToNonPreferredNtwks);
|
|
DDX_Control(pDX,IDC_COMBO_NETWORKS_TO_ACCESS, m_cbdwNetworksToAccess);
|
|
DDX_Text(pDX, IDC_POLLING_INTERVAL, m_dwPollingInterval);
|
|
// Limit polling interval to 30 days
|
|
DDV_MinMaxDWord(pDX, m_dwPollingInterval, 0, 43200);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CGenPage, CSnapinPropPage)
|
|
//{{AFX_MSG_MAP(CGenPage)
|
|
ON_WM_HELPINFO()
|
|
ON_EN_CHANGE(IDC_EDNAME, OnChangedName)
|
|
ON_EN_CHANGE(IDC_EDDESCRIPTION, OnChangedDescription)
|
|
ON_EN_CHANGE(IDC_POLLING_INTERVAL, OnChangedOtherParams)
|
|
ON_BN_CLICKED(IDC_AUTOMATICALLY_CONNECT_TO_NON_PREFERRED_NTWKS, OnChangedOtherParams)
|
|
ON_BN_CLICKED(IDC_DISABLE_ZERO_CONF, OnChangedOtherParams)
|
|
ON_CBN_SELENDOK(IDC_COMBO_NETWORKS_TO_ACCESS, OnChangedOtherParams)
|
|
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CGenPage message handlers
|
|
BOOL CGenPage::OnInitDialog()
|
|
{
|
|
PWIRELESS_POLICY_DATA pWirelessPolicyData = NULL;
|
|
CString pszTemp;
|
|
DWORD dwNetworksToAccessIndex = 0;
|
|
DWORD dwPollingInterval = 0;
|
|
|
|
// call base class init
|
|
CSnapinPropPage::OnInitDialog();
|
|
|
|
m_bPageInitialized = TRUE;
|
|
|
|
// show the wait cursor in case there is a huge description being accessed
|
|
CWaitCursor waitCursor;
|
|
|
|
|
|
pWirelessPolicyData = GetResultObject()->GetWirelessPolicy();
|
|
|
|
|
|
m_edName.SetLimitText(c_nMaxName);
|
|
m_edDescription.SetLimitText(c_nMaxName);
|
|
|
|
// initialize our edit controls
|
|
|
|
|
|
ASSERT(pWirelessPolicyData);
|
|
if (pWirelessPolicyData->pszWirelessName) {
|
|
|
|
m_edName.SetWindowText (pWirelessPolicyData->pszWirelessName);
|
|
|
|
m_strOldName = pWirelessPolicyData->pszWirelessName;
|
|
}
|
|
|
|
if (pWirelessPolicyData->pszDescription) {
|
|
|
|
m_edDescription.SetWindowText (pWirelessPolicyData->pszDescription);
|
|
|
|
}
|
|
|
|
m_dwEnableZeroConf = pWirelessPolicyData->dwDisableZeroConf ? FALSE : TRUE;
|
|
|
|
m_dwConnectToNonPreferredNtwks =
|
|
pWirelessPolicyData->dwConnectToNonPreferredNtwks ? TRUE : FALSE;
|
|
|
|
pszTemp.LoadString(IDS_WIRELESS_ACCESS_NETWORK_ANY);
|
|
m_cbdwNetworksToAccess.AddString(pszTemp);
|
|
|
|
pszTemp.LoadString(IDS_WIRELESS_ACCESS_NETWORK_AP);
|
|
m_cbdwNetworksToAccess.AddString(pszTemp);
|
|
|
|
pszTemp.LoadString(IDS_WIRELESS_ACCESS_NETWORK_ADHOC);
|
|
m_cbdwNetworksToAccess.AddString(pszTemp);
|
|
|
|
switch (pWirelessPolicyData->dwNetworkToAccess) {
|
|
|
|
case WIRELESS_ACCESS_NETWORK_ANY:
|
|
dwNetworksToAccessIndex = 0;
|
|
break;
|
|
|
|
case WIRELESS_ACCESS_NETWORK_AP:
|
|
dwNetworksToAccessIndex = 1;
|
|
break;
|
|
|
|
case WIRELESS_ACCESS_NETWORK_ADHOC:
|
|
dwNetworksToAccessIndex = 2;
|
|
break;
|
|
|
|
default:
|
|
dwNetworksToAccessIndex = 0;
|
|
break;
|
|
}
|
|
|
|
m_cbdwNetworksToAccess.SetCurSel(dwNetworksToAccessIndex);
|
|
|
|
m_dwPollingInterval = pWirelessPolicyData->dwPollingInterval / 60;
|
|
|
|
if (pWirelessPolicyData->dwFlags & WLSTORE_READONLY) {
|
|
m_bReadOnly = TRUE;
|
|
}
|
|
|
|
if (m_bReadOnly) {
|
|
DisableControls();
|
|
}
|
|
|
|
// add context help to the style bits
|
|
if (GetParent())
|
|
{
|
|
GetParent()->ModifyStyleEx (0, WS_EX_CONTEXTHELP, 0);
|
|
}
|
|
UpdateData (FALSE);
|
|
|
|
// OK, we can start paying attention to modifications made via dlg controls now.
|
|
// This should be the last call before returning from OnInitDialog.
|
|
OnFinishInitDialog();
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
BOOL CGenPage::OnApply()
|
|
{
|
|
CString strName;
|
|
CString strDescription;
|
|
LPWSTR pszDescription = NULL;
|
|
PWIRELESS_POLICY_DATA pWirelessPolicyData = NULL;
|
|
DWORD dwNetworksToAccesssIndex = 0;
|
|
DWORD dwDisableZeroConf = 0;
|
|
DWORD dwAutomaticallyConnectToNonPreferredNtwks = 0;
|
|
DWORD dwNetworksToAccess = 0;
|
|
|
|
|
|
pWirelessPolicyData = GetResultObject()->GetWirelessPolicy();
|
|
|
|
|
|
// pull our data out of the controls and into the object
|
|
|
|
if (!UpdateData (TRUE))
|
|
// Data was not valid, return for user to correct it.
|
|
return CancelApply();
|
|
|
|
m_edName.GetWindowText (strName);
|
|
m_edDescription.GetWindowText (strDescription);
|
|
|
|
if (strName.IsEmpty()) {
|
|
|
|
ReportError(IDS_OPERATION_FAILED_NULL_POLICY, 0);
|
|
m_edName.SetWindowText (pWirelessPolicyData->pszWirelessName);
|
|
return CancelApply();
|
|
}
|
|
|
|
ASSERT(pWirelessPolicyData);
|
|
if (pWirelessPolicyData->pszOldWirelessName) {
|
|
FreePolStr(pWirelessPolicyData->pszOldWirelessName);
|
|
}
|
|
|
|
pWirelessPolicyData->pszOldWirelessName = pWirelessPolicyData->pszWirelessName;
|
|
pWirelessPolicyData->pszWirelessName = AllocPolStr(strName);
|
|
FreeAndThenDupString(&pWirelessPolicyData->pszDescription, strDescription);
|
|
|
|
|
|
pWirelessPolicyData->dwPollingInterval = (m_dwPollingInterval*60);
|
|
|
|
dwNetworksToAccesssIndex = m_cbdwNetworksToAccess.GetCurSel();
|
|
|
|
switch (dwNetworksToAccesssIndex) {
|
|
case 0 :
|
|
dwNetworksToAccess = WIRELESS_ACCESS_NETWORK_ANY;
|
|
break;
|
|
|
|
case 1 :
|
|
dwNetworksToAccess = WIRELESS_ACCESS_NETWORK_AP;
|
|
break;
|
|
|
|
case 2 :
|
|
dwNetworksToAccess = WIRELESS_ACCESS_NETWORK_ADHOC;
|
|
break;
|
|
}
|
|
|
|
pWirelessPolicyData->dwNetworkToAccess = dwNetworksToAccess;
|
|
|
|
dwDisableZeroConf = m_dwEnableZeroConf ? 0 : 1;
|
|
|
|
pWirelessPolicyData->dwDisableZeroConf = dwDisableZeroConf;
|
|
|
|
dwAutomaticallyConnectToNonPreferredNtwks =
|
|
m_dwConnectToNonPreferredNtwks ? 1 : 0;
|
|
|
|
pWirelessPolicyData->dwConnectToNonPreferredNtwks =
|
|
dwAutomaticallyConnectToNonPreferredNtwks;
|
|
|
|
|
|
return CSnapinPropPage::OnApply();
|
|
}
|
|
|
|
void CGenPage::OnCancel()
|
|
{
|
|
//This is a workaround to fix 343052. When there is sub dialog open and the user
|
|
//click the corresponding result pane node, this function can get called when press
|
|
//"ESC" or ALT_F4 although the policy property sheet is disabled.
|
|
//We post a WM_CLOSE to the sub dialog to force them to close.
|
|
|
|
//if there is any sub dialog active, force them to close
|
|
//m_pDlgIKE may be set to NULL by the child thread during the mean time (although
|
|
//the chance is very slim). Add a lock there to avoid potential AV
|
|
//CSingleLock cLock(&m_csDlg);
|
|
|
|
/* taroonm
|
|
cLock.Lock();
|
|
|
|
if (m_pDlgIKE)
|
|
{
|
|
HWND hwndDlg = m_pDlgIKE->GetSafeHwnd();
|
|
|
|
if (hwndDlg)
|
|
{
|
|
::PostMessage(hwndDlg, WM_CLOSE, 0, 0);
|
|
}
|
|
}
|
|
|
|
cLock.Unlock();
|
|
*/
|
|
CSnapinPropPage::OnCancel();
|
|
}
|
|
|
|
|
|
BOOL CGenPage::OnHelpInfo(HELPINFO* pHelpInfo)
|
|
{
|
|
if (pHelpInfo->iContextType == HELPINFO_WINDOW)
|
|
{
|
|
DWORD* pdwHelp = (DWORD*) &g_aHelpIDs_IDD_WIRELESSGENPROP[0];
|
|
::WinHelp ((HWND)pHelpInfo->hItemHandle,
|
|
c_szWlsnpHelpFile,
|
|
HELP_WM_HELP,
|
|
(DWORD_PTR)(LPVOID)pdwHelp);
|
|
}
|
|
|
|
return CSnapinPropPage::OnHelpInfo(pHelpInfo);
|
|
}
|
|
|
|
void CGenPage::OnChangedName()
|
|
{
|
|
m_bNameChanged = TRUE;
|
|
SetModified();
|
|
}
|
|
|
|
void CGenPage::OnChangedDescription()
|
|
{
|
|
SetModified();
|
|
}
|
|
|
|
void CGenPage::OnChangedOtherParams()
|
|
{
|
|
SetModified();
|
|
|
|
}
|
|
void CGenPage::SetNewSheetTitle()
|
|
{
|
|
//dont set new tile if page is not initialized or no result object associated
|
|
if (NULL == GetResultObject() || !m_bPageInitialized)
|
|
return;
|
|
|
|
PWIRELESS_POLICY_DATA pWirelessPolicyData = GetResultObject()->GetWirelessPolicy();
|
|
|
|
if (NULL == pWirelessPolicyData->pszWirelessName)
|
|
return;
|
|
|
|
if (0 == m_strOldName.Compare(pWirelessPolicyData->pszWirelessName))
|
|
return;
|
|
|
|
CPropertySheet *psht = (CPropertySheet*)GetParent();
|
|
|
|
//sometimes the psh can be NULL, for example if the page is never initialized
|
|
if (NULL == psht)
|
|
{
|
|
return;
|
|
}
|
|
|
|
CString strTitle;
|
|
psht->GetWindowText( strTitle );
|
|
|
|
|
|
CString strAppendage;
|
|
int nIndex;
|
|
|
|
// Get the name from the DS, this is the original policy name used to
|
|
// generate the prop sheet's title.
|
|
|
|
// Assume the sheet title is of the form "<policy name> Properties",
|
|
// and that the DSObject name is the one used to create the title.
|
|
// This would not be true if there has been >1 rename in the General
|
|
// page during this invocation of the owning prop sheet.
|
|
if (-1 != (nIndex = strTitle.Find( (LPCTSTR)m_strOldName )))
|
|
{
|
|
CString strNewTitle;
|
|
strNewTitle = strTitle.Left(nIndex);
|
|
strAppendage = strTitle.Right( strTitle.GetLength() - m_strOldName.GetLength() );
|
|
strNewTitle += pWirelessPolicyData->pszWirelessName;
|
|
strNewTitle += strAppendage;
|
|
psht->SetTitle( (LPCTSTR)strNewTitle );
|
|
|
|
m_strOldName = pWirelessPolicyData->pszWirelessName;
|
|
}
|
|
}
|
|
|
|
void CGenPage::OnManagerApplied()
|
|
{
|
|
SetNewSheetTitle();
|
|
}
|
|
|
|
void CGenPage::DisableControls()
|
|
{
|
|
SAFE_ENABLEWINDOW (IDC_EDNAME, FALSE);
|
|
SAFE_ENABLEWINDOW (IDC_EDDESCRIPTION, FALSE);
|
|
SAFE_ENABLEWINDOW (IDC_POLLING_INTERVAL, FALSE);
|
|
SAFE_ENABLEWINDOW(IDC_COMBO_NETWORKS_TO_ACCESS, FALSE);
|
|
SAFE_ENABLEWINDOW(IDC_DISABLE_ZERO_CONF, FALSE);
|
|
SAFE_ENABLEWINDOW(IDC_AUTOMATICALLY_CONNECT_TO_NON_PREFERRED_NTWKS, FALSE);
|
|
return;
|
|
}
|