Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

523 lines
18 KiB

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: L A N U I . H
//
// Contents: Lan connection UI object.
//
// Notes:
//
// Author: danielwe 16 Oct 1997
//
//----------------------------------------------------------------------------
#pragma once
#include "nsbase.h" // must be first to include atl
#include "chklist.h"
#include "ncatlps.h"
#include "netcfgp.h"
#include "netcfgx.h"
#include "netcon.h"
#include "netconp.h"
#include "ncras.h"
#include "nsres.h"
#include "resource.h"
#include "netshell.h"
#include "util.h"
#include "HNetCfg.h"
struct ADVANCED_ITEM_DATA
{
PWSTR szwName;
INetCfgComponent * pncc;
};
//
// CLanConnectionUiDlg
//
class CLanConnectionUiDlg :
public CDialogImpl<CLanConnectionUiDlg>
{
BEGIN_MSG_MAP(CLanConnectionUiDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
END_MSG_MAP()
enum { IDD = IDD_LAN_CONNECT};
CLanConnectionUiDlg() { m_pconn = NULL; };
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam,
LPARAM lParam, BOOL& bHandled);
VOID SetConnection(INetConnection *pconn) {m_pconn = pconn;}
private:
INetConnection * m_pconn;
};
static const UINT WM_DEFERREDINIT = WM_USER + 100;
//
// LAN Connection Networking Property Page
//
class CLanNetPage: public CPropSheetPage
{
public:
CLanNetPage(
IUnknown* punk,
INetCfg* pnc,
INetConnection* pconn,
BOOLEAN fReadOnly,
BOOLEAN fNeedReboot,
BOOLEAN fAccessDenied,
const DWORD * adwHelpIDs = NULL);
~CLanNetPage();
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam,
LPARAM lParam, BOOL& bHandled);
LRESULT OnPaint(UINT uMsg, WPARAM wParam,
LPARAM lParam, BOOL& bHandled);
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnDestroy(UINT uMsg, WPARAM wParam,
LPARAM lParam, BOOL& bHandled);
LRESULT OnSetCursor(UINT uMsg, WPARAM wParam,
LPARAM lParam, BOOL& bHandled);
LRESULT OnAddHelper(HWND hwndLV);
LRESULT OnRemoveHelper(HWND hwndLV);
LRESULT OnPropertiesHelper(HWND hwndLV);
LRESULT OnConfigure(WORD wNotifyCode, WORD wID, HWND hWndCtl,
BOOL& bHandled);
LRESULT OnKillActiveHelper(HWND hwndLV);
LRESULT OnApply(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnCancel(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnDeferredInit(UINT uMsg, WPARAM wParam,
LPARAM lParam, BOOL& bHandled);
HRESULT HrRequestReboot();
protected:
INetConnection * m_pconn;
INetCfg * m_pnc;
IUnknown * m_punk;
INetCfgComponent * m_pnccAdapter;
HIMAGELIST m_hil;
PSP_CLASSIMAGELIST_DATA m_pcild;
HIMAGELIST m_hilCheckIcons;
HCURSOR m_hPrevCurs;
// The collection of BindingPathObj
// This is for handling the checklist state stuff
ListBPObj m_listBindingPaths;
// Handles (add\remove\property buttons and description text)
HANDLES m_handles;
BOOLEAN m_fReadOnly;
BOOLEAN m_fDirty;
HRESULT static RaiseDeviceConfiguration(HWND hWndParent, INetCfgComponent* pAdapterConfigComponent);
LRESULT OnChange(WORD wNotifyCode, WORD wID, HWND hWndCtl,
BOOL& bHandled);
private:
const DWORD * m_adwHelpIDs;
INetLanConnection * m_plan;
BOOLEAN m_fRebootAlreadyRequested;
BOOLEAN m_fNeedReboot;
BOOLEAN m_fAccessDenied;
BOOLEAN m_fInitComplete;
BOOLEAN m_fNetcfgInUse;
BOOLEAN m_fNoCancel;
BOOLEAN m_fLockDown;
virtual HRESULT InitializeExtendedUI(void) = 0;
virtual HRESULT UninitializeExtendedUI(void) = 0;
};
class CLanNetNormalPage : public CLanNetPage
{
public:
BEGIN_MSG_MAP(CLanNetPage)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_DEFERREDINIT, OnDeferredInit)
MESSAGE_HANDLER(WM_SETCURSOR, OnSetCursor)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu);
MESSAGE_HANDLER(WM_HELP, OnHelp);
COMMAND_ID_HANDLER(IDC_PSB_Configure, OnConfigure)
COMMAND_ID_HANDLER(IDC_CHK_ShowIcon, OnChange);
NOTIFY_CODE_HANDLER(PSN_QUERYCANCEL, OnCancel)
NOTIFY_CODE_HANDLER(PSN_APPLY, OnApply)
COMMAND_ID_HANDLER(IDC_PSB_Add, OnAdd)
COMMAND_ID_HANDLER(IDC_PSB_Remove, OnRemove)
COMMAND_ID_HANDLER(IDC_PSB_Properties, OnProperties)
NOTIFY_CODE_HANDLER(PSN_KILLACTIVE, OnKillActive)
// Listview handlers
NOTIFY_CODE_HANDLER(LVN_DELETEITEM, OnDeleteItem)
NOTIFY_CODE_HANDLER(NM_CLICK, OnClick)
NOTIFY_CODE_HANDLER(NM_DBLCLK, OnDbClick)
NOTIFY_CODE_HANDLER(LVN_KEYDOWN, OnKeyDown)
NOTIFY_CODE_HANDLER(LVN_ITEMCHANGED, OnItemChanged)
END_MSG_MAP()
CLanNetNormalPage(
IUnknown* punk,
INetCfg* pnc,
INetConnection* pconn,
BOOLEAN fReadOnly,
BOOLEAN fNeedReboot,
BOOLEAN fAccessDenied,
const DWORD * adwHelpIDs = NULL);
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam,
LPARAM lParam, BOOL& bHandled);
LRESULT OnAdd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
LRESULT OnRemove(WORD wNotifyCode, WORD wID, HWND hWndCtl,
BOOL& bHandled);
LRESULT OnProperties(WORD wNotifyCode, WORD wID, HWND hWndCtl,
BOOL& bHandled);
LRESULT OnKillActive(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
// listview handlers
LRESULT OnDeleteItem(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnClick(int idCtrl, LPNMHDR pnmh, BOOL& fHandled);
LRESULT OnDbClick(int idCtrl, LPNMHDR pnmh, BOOL& fHandled);
LRESULT OnKeyDown(int idCtrl, LPNMHDR pnmh, BOOL& fHandled);
LRESULT OnItemChanged(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
private:
HWND m_hwndLV;
virtual HRESULT InitializeExtendedUI(void);
virtual HRESULT UninitializeExtendedUI(void);
};
class CLanNetBridgedPage : public CLanNetPage
{
public:
BEGIN_MSG_MAP(CLanNetPage)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_DEFERREDINIT, OnDeferredInit)
MESSAGE_HANDLER(WM_SETCURSOR, OnSetCursor)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu);
MESSAGE_HANDLER(WM_HELP, OnHelp);
COMMAND_ID_HANDLER(IDC_CHK_ShowIcon, OnChange);
COMMAND_ID_HANDLER(IDC_PSB_Configure, OnConfigure)
NOTIFY_CODE_HANDLER(PSN_QUERYCANCEL, OnCancel)
NOTIFY_CODE_HANDLER(PSN_APPLY, OnApply)
END_MSG_MAP()
CLanNetBridgedPage(
IUnknown* punk,
INetCfg* pnc,
INetConnection* pconn,
BOOLEAN fReadOnly,
BOOLEAN fNeedReboot,
BOOLEAN fAccessDenied,
const DWORD * adwHelpIDs = NULL);
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam,
LPARAM lParam, BOOL& bHandled);
private:
virtual HRESULT InitializeExtendedUI(void){return S_OK;};
virtual HRESULT UninitializeExtendedUI(void){return S_OK;};
};
class CLanNetNetworkBridgePage : public CLanNetPage
{
public:
BEGIN_MSG_MAP(CLanNetPage)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
MESSAGE_HANDLER(WM_PAINT, OnPaint)
MESSAGE_HANDLER(WM_DEFERREDINIT, OnDeferredInit)
MESSAGE_HANDLER(WM_SETCURSOR, OnSetCursor)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu);
MESSAGE_HANDLER(WM_HELP, OnHelp);
COMMAND_ID_HANDLER(IDC_PSB_Configure, OnConfigure)
NOTIFY_CODE_HANDLER(PSN_QUERYCANCEL, OnCancel)
NOTIFY_CODE_HANDLER(PSN_APPLY, OnApply)
COMMAND_ID_HANDLER(IDC_PSB_Add, OnAdd)
COMMAND_ID_HANDLER(IDC_PSB_Remove, OnRemove)
COMMAND_ID_HANDLER(IDC_PSB_Properties, OnProperties)
NOTIFY_CODE_HANDLER(PSN_KILLACTIVE, OnKillActive)
// Listview handlers
NOTIFY_CODE_HANDLER(LVN_DELETEITEM, OnDeleteItem)
NOTIFY_CODE_HANDLER(NM_CLICK, OnClick)
NOTIFY_CODE_HANDLER(NM_DBLCLK, OnDbClick)
NOTIFY_CODE_HANDLER(LVN_KEYDOWN, OnKeyDown)
NOTIFY_CODE_HANDLER(LVN_ITEMCHANGED, OnItemChanged)
END_MSG_MAP()
CLanNetNetworkBridgePage(
IUnknown* punk,
INetCfg* pnc,
INetConnection* pconn,
BOOLEAN fReadOnly,
BOOLEAN fNeedReboot,
BOOLEAN fAccessDenied,
const DWORD * adwHelpIDs = NULL);
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam,
LPARAM lParam, BOOL& bHandled);
LRESULT OnAdd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
LRESULT OnRemove(WORD wNotifyCode, WORD wID, HWND hWndCtl,
BOOL& bHandled);
LRESULT OnProperties(WORD wNotifyCode, WORD wID, HWND hWndCtl,
BOOL& bHandled);
LRESULT OnKillActive(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
// listview handlers
LRESULT OnDeleteItem(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnClick(int idCtrl, LPNMHDR pnmh, BOOL& fHandled);
LRESULT OnDbClick(int idCtrl, LPNMHDR pnmh, BOOL& fHandled);
LRESULT OnKeyDown(int idCtrl, LPNMHDR pnmh, BOOL& fHandled);
LRESULT OnItemChanged(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnApply(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnConfigure(WORD wNotifyCode, WORD wID, HWND hWndCtl,
BOOL& bHandled);
private:
HWND m_hwndLV;
HWND m_hAdaptersListView;
HIMAGELIST m_hAdaptersListImageList;
virtual HRESULT InitializeExtendedUI(void);
virtual HRESULT UninitializeExtendedUI(void);
HRESULT FillListViewWithConnections(HWND ListView);
};
//
// LAN Connection 'Advanced' property page
//
class CLanAdvancedPage: public CPropSheetPage
{
public:
BEGIN_MSG_MAP(CLanAdvancedPage)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu);
MESSAGE_HANDLER(WM_HELP, OnHelp);
COMMAND_ID_HANDLER(IDC_CHK_Shared, OnShared)
COMMAND_ID_HANDLER(IDC_CHK_Firewall, OnFirewall)
COMMAND_ID_HANDLER(IDC_PSB_Settings, OnSettings)
NOTIFY_CODE_HANDLER(PSN_KILLACTIVE, OnKillActive)
NOTIFY_CODE_HANDLER(PSN_QUERYCANCEL, OnCancel)
NOTIFY_CODE_HANDLER(PSN_APPLY, OnApply)
NOTIFY_CODE_HANDLER(NM_CLICK, OnClick)
NOTIFY_CODE_HANDLER(NM_RETURN, OnClick)
END_MSG_MAP()
CLanAdvancedPage(IUnknown *punk, INetConnection *pconn,
BOOL fShared, BOOL fICSPrivate, BOOL fFirewalled, IHNetConnection *rgPrivateCons[],
ULONG cPrivate, LONG lxCurrentPrivate,
const DWORD * adwHelpIDs, IHNetConnection *pHNConn,
IHNetCfgMgr *pHNetCfgMgr, IHNetIcsSettings *pHNetIcsSettings);
~CLanAdvancedPage();
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam,
LPARAM lParam, BOOL& bHandled);
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnApply(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnKillActive(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnCancel(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnShared(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
LRESULT OnFirewall(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
LRESULT OnSettings(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
LRESULT OnClick(int idCtrl, LPNMHDR pnmh, BOOL& fHandled);
private:
INetConnection * m_pconn;
IUnknown * m_punk;
BOOL m_fShared;
BOOL m_fICSPrivate;
BOOL m_fFirewalled;
BOOL m_fOtherShared;
IHNetIcsPublicConnection * m_pOldSharedConnection;
BOOL m_fResetPrivateAdapter;
IHNetConnection ** m_rgPrivateCons;
LONG m_lxCurrentPrivate;
ULONG m_cPrivate;
const DWORD * m_adwHelpIDs;
IHNetCfgMgr * m_pHNetCfgMgr;
IHNetIcsSettings * m_pHNetIcsSettings;
IHNetConnection * m_pHNetConn;
BOOL m_fShowDisableFirewallWarning;
static INT_PTR CALLBACK DisableFirewallWarningDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
BOOL IsAdapterDHCPEnabled(IHNetConnection* pConnection);
};
//
// CLanAddComponentDlg
//
class CLanAddComponentDlg:
public CDialogImpl<CLanAddComponentDlg>
{
BEGIN_MSG_MAP(CLanAddComponentDlg)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu);
MESSAGE_HANDLER(WM_HELP, OnHelp);
COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
COMMAND_ID_HANDLER(IDC_PSB_Component_Add, OnAdd)
NOTIFY_CODE_HANDLER(NM_DBLCLK, OnDblClick)
NOTIFY_CODE_HANDLER(LVN_ITEMCHANGED, OnItemChanged)
END_MSG_MAP()
enum {IDD = IDD_LAN_COMPONENT_ADD};
CLanAddComponentDlg(INetCfg *pnc, CI_FILTER_INFO* pcfi,
const DWORD * adwHelpIDs = NULL)
{
m_pnc = pnc;
m_pcfi = pcfi;
m_adwHelpIDs = adwHelpIDs;
}
private:
INetCfg * m_pnc;
CI_FILTER_INFO* m_pcfi;
HWND m_hwndLV;
const DWORD * m_adwHelpIDs;
LRESULT OnInitDialog (UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam,LPARAM lParam, BOOL& bHandled);
LRESULT OnHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnItemChanged(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnDblClick(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnAdd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
LRESULT OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
};
//
// LAN Connection Security Property Page
//
class CLanSecurityPage: public CPropSheetPage
{
public:
BEGIN_MSG_MAP(CLanSecurityPage)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
MESSAGE_HANDLER(WM_CONTEXTMENU, OnContextMenu);
MESSAGE_HANDLER(WM_HELP, OnHelp);
COMMAND_ID_HANDLER(CID_CA_PB_Properties, OnProperties)
COMMAND_ID_HANDLER(CID_CA_LB_EapPackages, OnEapPackages)
COMMAND_ID_HANDLER(CID_CA_RB_Eap, OnEapSelection)
NOTIFY_CODE_HANDLER(PSN_QUERYCANCEL, OnCancel)
NOTIFY_CODE_HANDLER(PSN_APPLY, OnApply)
NOTIFY_CODE_HANDLER(PSN_KILLACTIVE, OnKillActive)
END_MSG_MAP()
CLanSecurityPage(
IUnknown* punk,
INetCfg* pnc,
INetConnection* pconn,
const DWORD * adwHelpIDs = NULL);
~CLanSecurityPage();
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam,
LPARAM lParam, BOOL& bHandled);
LRESULT OnContextMenu(UINT uMsg, WPARAM wParam, LPARAM lParam,
BOOL& bHandled);
LRESULT OnHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnDestroy(UINT uMsg, WPARAM wParam,
LPARAM lParam, BOOL& bHandled);
LRESULT OnProperties(WORD wNotifyCode, WORD wID, HWND hWndCtl,
BOOL& bHandled);
LRESULT OnEapPackages(WORD wNotifyCode, WORD wID, HWND hWndCtl,
BOOL& bHandled);
LRESULT OnEapSelection(WORD wNotifyCode, WORD wID, HWND hWndCtl,
BOOL& bHandled);
LRESULT OnKillActive(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnApply(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnCancel(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
private:
INetConnection * m_pconn;
INetCfg * m_pnc;
IUnknown * m_punk;
const DWORD * m_adwHelpIDs;
// Config information of the EAP Dlls
DTLLIST * pListEapcfgs;
BOOLEAN m_fNetcfgInUse;
};
//
// Global functions
//
HRESULT HrGetDeviceIcon(HICON *phicon);
HRESULT HrQueryLanAdvancedPage(INetConnection* pconn, IUnknown* punk,
CPropSheetPage*& pspAdvanced, IHNetCfgMgr *pHNetCfgMgr,
IHNetIcsSettings *pHNetIcsSettings, IHNetConnection *pHNetConn);
HRESULT HrQueryLanFirewallPage(INetConnection* pconn, IUnknown* punk,
CPropSheetPage*& pspFirewall, IHNetCfgMgr *pHNetCfgMgr,
IHNetConnection *pHNetConn);
HRESULT HrQueryUserAndRemoveComponent (HWND hwndParent, INetCfg* pnc,
INetCfgComponent* pncc);
HRESULT HrDisplayAddComponentDialog (HWND hwndParent, INetCfg* pnc,
CI_FILTER_INFO* pcfi);
//
// Exported Interfaces
//
class ATL_NO_VTABLE CNetConnectionUiUtilities :
public CComObjectRootEx <CComObjectThreadModel>,
public CComCoClass <CNetConnectionUiUtilities, &CLSID_NetConnectionUiUtilities>,
public INetConnectionUiUtilities
{
public:
DECLARE_REGISTRY_RESOURCEID(IDR_COMMUIUTILITIES)
BEGIN_COM_MAP(CNetConnectionUiUtilities)
COM_INTERFACE_ENTRY(INetConnectionUiUtilities)
END_COM_MAP()
CNetConnectionUiUtilities() {};
~CNetConnectionUiUtilities() {};
STDMETHODIMP QueryUserAndRemoveComponent(
HWND hwndParent,
INetCfg* pnc,
INetCfgComponent* pncc);
STDMETHODIMP QueryUserForReboot(
HWND hwndParent,
PCWSTR pszCaption,
DWORD dwFlags);
STDMETHODIMP DisplayAddComponentDialog (
HWND hwndParent,
INetCfg* pnc,
CI_FILTER_INFO* pcfi);
STDMETHODIMP_(BOOL) UserHasPermission(DWORD dwPerm);
};