⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 setnet.cpp

📁 NDIS HOOK实例
💻 CPP
字号:
// SetNet.cpp : implementation file
//

#include "stdafx.h"
#include "Property.h"
#include "SetNet.h"

//onwer add
#include "GuiRes.h"
#include "NetIPAria.h"
#include "NetTimeSheet.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//=============================================================================================
// CSetNet property page

extern CAclFile		m_AclFile;
XACL_IP				m_tmpIP;
XACL_IP				*m_pIP;
CNetTimeSheet		*mNetTimeSheet;
CNetIPAria			*dlgNetIPAria	= NULL;

IMPLEMENT_DYNCREATE(CSetNet, CPropertyPage)

CSetNet::CSetNet() : CPropertyPage(CSetNet::IDD)
{
	iListIndex	= 0;
	iTreeIndex	= 0;
	m_TreeText	= GUI_SET_NET_TREE_0;
}

CSetNet::~CSetNet()
{
}

void CSetNet::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSetNet)
	DDX_Control(pDX, IDC_SET_NET_TREE, m_TreeSetNet);
	DDX_Control(pDX, IDC_SET_NET_LIST, m_ListSetNet);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CSetNet, CPropertyPage)
	//{{AFX_MSG_MAP(CSetNet)
	ON_BN_CLICKED(IDC_SET_NET_BUTTON_ADD,		OnSetNetButtonAdd)
	ON_NOTIFY(TVN_SELCHANGED, IDC_SET_NET_TREE, OnSelchangedSetNetTree)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_SET_NET_LIST,OnItemchangedSetNetList)
	ON_BN_CLICKED(IDC_SET_NET_BUTTON_EDIT,		OnSetNetButtonEdit)
	ON_NOTIFY(NM_DBLCLK, IDC_SET_NET_LIST,		OnDblclkSetNetList)
	ON_BN_CLICKED(IDC_SET_NET_BUTTON_DELETE,	OnSetNetButtonDelete)
	ON_NOTIFY(NM_CLICK, IDC_SET_NET_LIST,		OnClickSetNetList)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

//=============================================================================================
// CSetNet message handlers

BOOL CSetNet::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();
	
	InitDlgResource();
	mNetTimeSheet = (CNetTimeSheet*)this->GetOwner();
	
	return TRUE;  
}

//---------------------------------------------------------------------------------------------
//initialize dialog's resource

void CSetNet::InitDlgResource()
{
	SetDlgItemText(IDC_SET_NET_NET_LABLE	,GUI_SET_NET_NET_LABLE);
	SetDlgItemText(IDC_SET_NET_BUTTON_ADD	,GUI_SET_NET_BUTTON_ADD);
	SetDlgItemText(IDC_SET_NET_BUTTON_EDIT	,GUI_SET_NET_BUTTON_EDIT);
	SetDlgItemText(IDC_SET_NET_BUTTON_DELETE,GUI_SET_NET_BUTTON_DELETE);

	m_TreeSetNet.InsertItem(GUI_SET_NET_TREE_0);
	m_TreeSetNet.InsertItem(GUI_SET_NET_TREE_1);
	m_TreeSetNet.InsertItem(GUI_SET_NET_TREE_2);
	m_TreeSetNet.InsertItem(GUI_SET_NET_TREE_3);
	m_TreeSetNet.InsertItem(GUI_SET_NET_TREE_4);

	InitList(&m_ListSetNet);
	SelectTreeItem(m_TreeText);
}
void CSetNet::InitList(CListCtrl *mList)
{
	mList->SetExtendedStyle	(LVS_EX_GRIDLINES  | LVS_EX_FULLROWSELECT);
	mList->InsertColumn		(0, GUI_SET_NET_LIST_START_IP, LVCFMT_LEFT,143);
	mList->InsertColumn		(1, GUI_SET_NET_LIST_END_IP	, LVCFMT_LEFT,143);
}	

void CSetNet::OnSelchangedSetNetTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;

	SelectTreeItemOperate();

	*pResult = 0;
}

int CSetNet::SelectTreeItemOperate()
{
	DWORD	i		= 0;
	CString sNetText= m_TreeSetNet.GetItemText(m_TreeSetNet.GetSelectedItem());
	iTreeIndex		= NetTextToIndex(sNetText);

	m_ListSetNet.DeleteAllItems();

	switch(iTreeIndex)
	{
	case 0:
		EnableButton(FALSE);
		m_ListSetNet.InsertItem(0,GUI_NET_IP_ARIA_ALL);
		m_ListSetNet.SetItemText(0,1,GUI_NET_IP_ARIA_ALL);
		break;

	case 1:
		EnableButton(FALSE);
		ListAddIP(&m_AclFile.mAclIntranetIP,	m_AclFile.mAclHeader.ulIntranetIPCount);
		break;

	case 2:
		EnableButton(TRUE);
		ListAddIP(m_AclFile.mpAclDistrustIP,	m_AclFile.mAclHeader.ulDistrustIPCount);
		break;

	case 3:
		EnableButton(TRUE);
		ListAddIP(m_AclFile.mpAclTrustIP,		m_AclFile.mAclHeader.ulTrustIPCount);
		break;

	case 4:
		EnableButton(TRUE);
		ListAddIP(m_AclFile.mpAclCustomIP,		m_AclFile.mAclHeader.ulCustomIPCount);
		break;

	default:
		break;
	}

	m_ListSetNet.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED);

	return 0;
}

int CSetNet::ListAddIP(void* mpAclIP,DWORD mCount)
{
	DWORD	i = 0;

	for(i = 0; i < mCount; i++)	
		ListAddOneIP(i, mpAclIP);

	return 0;
}

int CSetNet::ListAddOneIP(DWORD iIndex, void* mpAclIP, BOOL isSelected)
{
	XACL_IP		*mAclIP = (XACL_IP*)mpAclIP;

	if(isSelected)
	{
		m_ListSetNet.InsertItem(iIndex,		m_AclFile.DIPToSIP(&mAclIP->ulStartIP));
		m_ListSetNet.SetItemText(iIndex, 1,	m_AclFile.DIPToSIP(&mAclIP->ulEndIP));
		m_ListSetNet.EnsureVisible(iIndex,	TRUE);
		m_ListSetNet.SetItemState(iIndex,	LVIS_SELECTED,LVIS_SELECTED);
	}
	else
	{
		m_ListSetNet.InsertItem(iIndex,		m_AclFile.DIPToSIP(&mAclIP[iIndex].ulStartIP));
		m_ListSetNet.SetItemText(iIndex, 1, m_AclFile.DIPToSIP(&mAclIP[iIndex].ulEndIP));
	}

	return 0;
}

int CSetNet::EnableButton(BOOL bEnable,BOOL bEnableEx)
{
	GetDlgItem(IDC_SET_NET_BUTTON_ADD)		->EnableWindow(bEnable);
	GetDlgItem(IDC_SET_NET_BUTTON_EDIT)		->EnableWindow(bEnableEx);
	GetDlgItem(IDC_SET_NET_BUTTON_DELETE)	->EnableWindow(bEnableEx);

	return 0;
}

int CSetNet::NetTextToIndex(CString sNetText)
{
	if(sNetText.Compare(GUI_SET_NET_TREE_0) == 0)		return 0;
	if(sNetText.Compare(GUI_SET_NET_TREE_1) == 0)		return 1;
	if(sNetText.Compare(GUI_SET_NET_TREE_2) == 0)		return 2;
	if(sNetText.Compare(GUI_SET_NET_TREE_3) == 0)		return 3;
	if(sNetText.Compare(GUI_SET_NET_TREE_4) == 0)		return 4;

	return -1;
}

int CSetNet::SelectTreeItem(CString sNetText)
{
	int i = 0 , iItemCount	= m_TreeSetNet.GetCount();
	HTREEITEM	mItem		= m_TreeSetNet.GetFirstVisibleItem();

	if(sNetText.Compare(m_TreeSetNet.GetItemText(mItem)) == 0)	
		return i;

	for(i = 1; i < iItemCount; i++)
	{
		mItem = m_TreeSetNet.GetNextSiblingItem(mItem);

		if(sNetText.Compare(m_TreeSetNet.GetItemText(mItem)) == 0)
		{
			m_TreeSetNet.SelectItem(mItem);
			return i;
		}
	}

	return -1;
}

void CSetNet::OnItemchangedSetNetList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView	= (NM_LISTVIEW*)pNMHDR;
	*pResult					= 0;

	if((iListIndex = pNMListView->iItem) == -1)		
		return;

	if(iTreeIndex != 0 && iTreeIndex != 1)			
		EnableButton(TRUE,TRUE);

	if(iTreeIndex == 2)				
		m_pIP = &m_AclFile.mpAclDistrustIP[iListIndex];
	else if(iTreeIndex == 3)		
		m_pIP = &m_AclFile.mpAclTrustIP[iListIndex];
	else if(iTreeIndex == 4)
		m_pIP = &m_AclFile.mpAclCustomIP[iListIndex];

	return;
}

void CSetNet::OnSetNetButtonAdd() 
{
	if(!GetDlgItem(IDC_SET_NET_BUTTON_ADD)->IsWindowEnabled())		
		return;

	if(MAX_IP_ARIA != 0 && m_ListSetNet.GetItemCount() >= MAX_IP_ARIA)
	{
		AfxMessageBox(GUI_ACL_MESSAGE_MAX_IP_ARIA);
		return;
	}

	dlgNetIPAria		= new CNetIPAria;
	dlgNetIPAria->iState= 0;	//add
	int iRet			= dlgNetIPAria->DoModal();
	m_tmpIP.ulStartIP	= dlgNetIPAria->ulStartIP;
	m_tmpIP.ulEndIP		= dlgNetIPAria->ulEndIP;

	delete				dlgNetIPAria;
	dlgNetIPAria		= NULL;

	if(iRet == IDCANCEL)
		return;

	if(m_AclFile.AddAcl(&m_tmpIP,1,iTreeIndex) != XERR_SUCCESS)
	{
		AfxMessageBox(GUI_ACL_MESSAGE_ADD_ACL_IP_ERROR);
		return;
	}

	ListAddOneIP(m_ListSetNet.GetItemCount(),&m_tmpIP,TRUE);
	mNetTimeSheet->EnableButton(TRUE);
}

void CSetNet::OnSetNetButtonEdit() 
{
	if(!GetDlgItem(IDC_SET_NET_BUTTON_EDIT)->IsWindowEnabled())		
		return;

	if(iListIndex < 0)		
		return;

	dlgNetIPAria			= new CNetIPAria;
	dlgNetIPAria->iState	= 1;	//edit
	dlgNetIPAria->ulStartIP	= m_pIP->ulStartIP ;
	dlgNetIPAria->ulEndIP	= m_pIP->ulEndIP ;

	int iRet		= dlgNetIPAria->DoModal();
	m_pIP->ulStartIP= dlgNetIPAria->ulStartIP;
	m_pIP->ulEndIP	= dlgNetIPAria->ulEndIP;
	delete			dlgNetIPAria;
	dlgNetIPAria	= NULL;

	if(iRet == IDCANCEL)		
		return;

	m_ListSetNet.SetItemText(iListIndex, 0, m_AclFile.DIPToSIP(&m_pIP->ulStartIP));
	m_ListSetNet.SetItemText(iListIndex, 1, m_AclFile.DIPToSIP(&m_pIP->ulEndIP));
	mNetTimeSheet->EnableButton(TRUE);
}

void CSetNet::OnDblclkSetNetList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

	if((iListIndex = pNMListView->iItem) != -1)
		OnSetNetButtonEdit();

	*pResult = 0;
}

void CSetNet::OnSetNetButtonDelete() 
{
	if(iListIndex < 0)	
		return;

	int tmpIndex = iListIndex;

	m_AclFile	.DelAcl(iListIndex, iTreeIndex);
	m_ListSetNet.DeleteItem(iListIndex);
	mNetTimeSheet->EnableButton(TRUE);

	if(m_ListSetNet.GetItemCount() <= 0)
	{
		EnableButton(TRUE,FALSE);
		return;
	}

	if(tmpIndex == m_ListSetNet.GetItemCount())
		tmpIndex -- ;

	m_ListSetNet.SetItemState(tmpIndex,LVIS_SELECTED,LVIS_SELECTED);
}

void CSetNet::OnClickSetNetList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

	if((iListIndex = pNMListView->iItem) == -1)
		EnableButton(iTreeIndex > 1 ? TRUE : FALSE, FALSE);

	*pResult = 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -