亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? checkacl.cpp

?? 費爾防火墻源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//=============================================================================================
/*
	文件:		CheckAcl.cpp

	說明:
	---------------------------------------------------
		控管規則訪問控制,通過控管規則的檢查認證,確定
	Socket 連接是否允許通過。
	---------------------------------------------------

	工程:		Xfilter 個人防火墻
	作者:		朱雁輝,朱雁冰
	創建日期:	2001/08/21
	網址:		http://www.xfilt.com
	電子郵件:	xstudio@xfilt.com
	版權所有 (c) 2001-2002 X 工作室

	警告:
	---------------------------------------------------
		本電腦程序受著作權法的保護。未經授權,不能使用
	和修改本軟件全部或部分源代碼。凡擅自復制、盜用或散
	布此程序或部分程序或者有其它任何越權行為,將遭到民
	事賠償及刑事的處罰,并將依法以最高刑罰進行追訴。
	
		凡通過合法途徑購買本軟件源代碼的用戶被默認授權
	可以在自己的程序中使用本軟件的部分代碼,但作者不對
	代碼產生的任何后果負責。
	
		使用了本軟件代碼的程序只能以可執行文件形式發布,
	未經特別許可,不能將含有本軟件源代碼的源程序以任何
	形式發布。
	---------------------------------------------------	
*/
//=============================================================================================

#include "stdafx.h"
#include "CheckAcl.h"
#include "TcpIpDog.h"

//=============================================================================================
// share data

#pragma data_seg(".inidata")
	int			m_iWorkMode		= XF_PASS_ALL;
	BOOL		m_bAclIsChange	= FALSE;
	HWND		m_GuiHwnd		= NULL;
	BOOL		m_bIsWin9x		= FALSE;
#pragma data_seg()

#pragma bss_seg(".uinidata")
	XACL_FILE	m_AclFile;
	SESSION		m_SessionBuf[MAX_SESSION_BUFFER];
	TCHAR		m_sGuiPathName[MAX_PATH];
	TCHAR		m_sSystemPath[MAX_PATH];
	TCHAR		m_sWin9xSys1[MAX_PATH];
	TCHAR		m_sWin2kSys1[MAX_PATH];
	TCHAR		m_sWin2kSys2[MAX_PATH];	// v1.0.2 add 2001-12-22
#pragma bss_seg()

CRITICAL_SECTION	m_csWorkMode;
CRITICAL_SECTION	m_csAclChangeMode;
CRITICAL_SECTION	m_csSetProcessName;
CRITICAL_SECTION	m_csSystemVersion;
CRITICAL_SECTION	m_csSetAcl;

//=============================================================================================
// extern globals variable
extern TCHAR	m_sProcessName[MAX_PATH];

//=============================================================================================
// initialize class function and pre-destroy class function.

CCheckAcl::CCheckAcl()
{
	InitializeCriticalSection(&m_csWorkMode);
	InitializeCriticalSection(&m_csSetAcl);
	InitializeCriticalSection(&m_csAclChangeMode);
	InitializeCriticalSection(&m_csSetProcessName);
	InitializeCriticalSection(&m_csSystemVersion);

	InitializeCriticalSection(&m_csSession);

	m_SessionCount = 0;
}

CCheckAcl::~CCheckAcl()
{
	FinallySession();
	delete[](m_Session);
}

BOOL CCheckAcl::SetWindowsVersion()
{
	EnterCriticalSection(&m_csSystemVersion);
	{
		OSVERSIONINFO VerInfo;  
		VerInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
		GetVersionEx(&VerInfo);

		if (VerInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
		{
			m_bIsWin9x = TRUE;
		}
		else if(VerInfo.dwPlatformId == VER_PLATFORM_WIN32_NT &&
			(VerInfo.dwMajorVersion == 4 || VerInfo.dwMajorVersion == 5))
		{
			m_bIsWin9x = FALSE;
		}

		GetSystemDirectory(m_sSystemPath, MAX_PATH);

		_tcscpy(m_sWin9xSys1, m_sSystemPath);
		_tcscat(m_sWin9xSys1, _T("\\icsmgr.exe"));
		_tcscpy(m_sWin2kSys1, m_sSystemPath);
		_tcscat(m_sWin2kSys1, _T("\\services.exe"));

		// v1.0.2 add 2001-12-22
		_tcscpy(m_sWin2kSys2, m_sSystemPath);
		_tcscat(m_sWin2kSys2, _T("\\INETSRV\\INETINFO.EXE"));
	}
	LeaveCriticalSection(&m_csSystemVersion);
	
	return TRUE; 
}

//=============================================================================================
// Static function, XFILTER.EXE to change the work mode and ACL information, 
// it's operate by XfIoControl.

int CCheckAcl::IsWin9x()
{
	return m_bIsWin9x;
}

int CCheckAcl::SetGuiProcessName(const TCHAR *sPathName)
{
	EnterCriticalSection(&m_csSetProcessName);
	{
		_tcscpy(m_sGuiPathName, sPathName);
	}
	LeaveCriticalSection(&m_csSetProcessName);
	return XERR_SUCCESS;
}

int CCheckAcl::SetGuiWnd(HWND hwnd)
{
	EnterCriticalSection(&m_csWorkMode);
	{
		m_GuiHwnd = hwnd;
	}
	LeaveCriticalSection(&m_csWorkMode);
	return XERR_SUCCESS;
}

HWND CCheckAcl::GetGuiWnd()
{
	return m_GuiHwnd;
}

int CCheckAcl::SetWorkMode(int iWorkMode)
{
	EnterCriticalSection(&m_csWorkMode);
	{
		m_iWorkMode = iWorkMode;
	}
	LeaveCriticalSection(&m_csWorkMode);

	return XERR_SUCCESS;
}

int CCheckAcl::GetWorkMode()
{
	return m_iWorkMode;
}

int CCheckAcl::SetAcl(XACL_FILE AclFile)
{
	EnterCriticalSection(&m_csSetAcl);
	{
		m_bAclIsChange = TRUE;

		SetWorkMode(CXCommon::GetBit(AclFile.mAclHeader.bSet, 4, 2));
		m_AclFile	= AclFile;

		m_bAclIsChange = FALSE;
	}
	LeaveCriticalSection(&m_csSetAcl);
	return XERR_SUCCESS;
}

BOOL CCheckAcl::SetAclToChangedMode(BOOL IsChange)
{
	EnterCriticalSection(&m_csAclChangeMode);
	{
		m_bAclIsChange = IsChange;
	}
	LeaveCriticalSection(&m_csAclChangeMode);
	
	return TRUE;
}

//=============================================================================================
// Check rule operation. it's return access value with the ACL.

BOOL CCheckAcl::IsLocalIP(DWORD *ip)
{
	BYTE IsLocalIP[4];
	memcpy(IsLocalIP, ip, sizeof(DWORD));

	if(*ip == 0 || IsLocalIP[3] == 127)
		return TRUE;

	ODS(m_sWin9xSys1);
	ODS(m_sWin2kSys1);

	static CString Win9xSys1 = m_sWin9xSys1;
	static CString Win2kSys1 = m_sWin2kSys1;
	static CString Win2kSys2 = m_sWin2kSys2; // v1.0.2 add 2001-12-22

	if(m_bIsWin9x)
	{
		if(Win9xSys1.CompareNoCase(m_sProcessName) == 0)
			return TRUE;
	}
	else
	{
		if(Win2kSys1.CompareNoCase(m_sProcessName) == 0
			|| Win2kSys2.CompareNoCase(m_sProcessName) == 0) // v1.0.2 add 2001-12-22
		{
			ODS(_T("Is Win2000 System Process ..."));
			return TRUE;
		}
	}

	ODS(_T("Not Is Win2000 System Process ..."));
	return FALSE;
}

int CCheckAcl::GetAccessInfo(SESSION *session)
{
	int		iRet;

	iRet = GetAccessFromAcl(session);

	if(iRet != XF_PASS)
		session->bAction = ACL_ACTION_DENY;
	else
		session->bAction = ACL_ACTION_PASS;

	return iRet;
}

int CCheckAcl::GetAccessFromWorkMode()
{
	if(m_bAclIsChange)
		return XF_UNKNOWN;

	if(m_iWorkMode == XF_PASS_ALL)
		return XF_PASS;

	if(m_iWorkMode == XF_DENY_ALL)
		return XF_DENY;

	if(m_iWorkMode != XF_QUERY_ALL)
		return XF_UNKNOWN;

	return XF_FILTER;
}

int CCheckAcl::GetAccessFromAcl(SESSION *mSession)
{
	if(m_AclFile.mAclHeader.sSignature[0] == 0
		|| _tcscmp(m_sGuiPathName, m_sProcessName) == 0
		|| IsLocalIP(&mSession->ulRemoteIP)
		)
		return XF_PASS;

	int		iRet;

	if((iRet = GetAccessFromWorkMode()) != XF_FILTER)
		return iRet;

	BOOL	IsOne	= TRUE;
	DWORD	iIndex	= 0;
	BYTE	bAction = ACL_ACTION_PASS;
	
COMPARE:

	if(!IsOne) iIndex ++;

	iIndex = FindAcl(m_sProcessName, iIndex);

	if(iIndex >= m_AclFile.mAclHeader.ulAclCount)
	{
		if(IsOne)
		{
			if(m_bIsWin9x)
			{
				if(!QueryAccess())
					return XF_DENY;
				else
					return XF_PASS;
			}
			else 
			{
				//
				// 2001-12-25 modify
				// return XF_QUERY;
				// chage to
				//
				if(!QueryAccess())
					return XF_DENY;
				else
					return XF_PASS;
			}
		}
		else
		{
			if(bAction == ACL_ACTION_DENY)
				return XF_PASS;
			else
				return XF_DENY;
		}
	}

	if(IsOne) IsOne = FALSE;
	bAction = m_AclFile.mpAcl[iIndex].bAction;

	if(m_AclFile.mpAcl[iIndex].bDirection != ACL_DIRECTION_IN_OUT
		&& mSession->bDirection	!= m_AclFile.mpAcl[iIndex].bDirection)
			goto COMPARE;

	if(m_AclFile.mpAcl[iIndex].bServiceType != ACL_SERVICE_TYPE_ALL
		&& mSession->bProtocol != m_AclFile.mpAcl[iIndex].bServiceType)
			goto COMPARE;

	if(m_AclFile.mpAcl[iIndex].bAccessTimeType != ACL_TIME_TYPE_ALL
		&& FindTime(mSession->tStartTime) != m_AclFile.mpAcl[iIndex].bAccessTimeType)
			goto COMPARE;

	if(m_AclFile.mpAcl[iIndex].bRemoteNetType != ACL_NET_TYPE_ALL
		&& FindIP(mSession->ulRemoteIP) != m_AclFile.mpAcl[iIndex].bRemoteNetType)
			goto COMPARE;

	if(m_AclFile.mpAcl[iIndex].uiServicePort != ACL_SERVICE_PORT_ALL
		&& mSession->uiPort != m_AclFile.mpAcl[iIndex].uiServicePort)
			goto COMPARE;
	
	if(m_AclFile.mpAcl[iIndex].bAction == ACL_ACTION_DENY)
		return XF_DENY;

	return XF_PASS;
}

DWORD CCheckAcl::FindAcl(CString sApplication, DWORD iStart)
{
	DWORD		iIndex = 0;

	for(iIndex = iStart; iIndex < m_AclFile.mAclHeader.ulAclCount; iIndex ++)
		if(sApplication.CompareNoCase(m_AclFile.mpAcl[iIndex].sApplication) == 0)
			break;

	return iIndex;
}

int CCheckAcl::FindTime(CTime time)
{
	for(DWORD i = 0; i < m_AclFile.mAclHeader.ulTimeCount; i ++)
	{
		if(CXCommon::GetBit(m_AclFile.mAclTime[i].bWeekDay,time.GetDayOfWeek() - 1) != 1)
			continue;

		if(m_AclFile.mAclTime[i].tStartTime == m_AclFile.mAclTime[i].tEndTime)
			return i + 1;

		CTime t = time.GetHour() * 3600 + time.GetMinute() * 60 + time.GetSecond();

		if(m_AclFile.mAclTime[i].tStartTime < m_AclFile.mAclTime[i].tEndTime)
		{
			if(t >= m_AclFile.mAclTime[i].tStartTime && t <= m_AclFile.mAclTime[i].tEndTime)
				return i + 1;
		}
		else
		{
			if(t >= m_AclFile.mAclTime[i].tStartTime || t <= m_AclFile.mAclTime[i].tEndTime)
				return i + 1;
		}
	}

	return ACL_TIME_TYPE_ALL;
}

int CCheckAcl::FindIP(DWORD IP)
{
	DWORD i = 0;

	if(IP >= m_AclFile.mAclIntranetIP.ulStartIP && IP <= m_AclFile.mAclIntranetIP.ulEndIP)
		return ACL_NET_TYPE_INTRANET;

	for(i = 0; i< m_AclFile.mAclHeader.ulDistrustIPCount; i++)
		if(IP >= m_AclFile.mpAclDistrustIP[i].ulStartIP && IP <= m_AclFile.mpAclDistrustIP[i].ulEndIP)
			return ACL_NET_TYPE_DISTRUST;

	for(i = 0; i< m_AclFile.mAclHeader.ulTrustIPCount; i++)
		if(IP >= m_AclFile.mpAclTrustIP[i].ulStartIP && IP <= m_AclFile.mpAclTrustIP[i].ulEndIP)
			return ACL_NET_TYPE_TRUST;

	for(i = 0; i< m_AclFile.mAclHeader.ulCustomIPCount; i++)
		if(IP >= m_AclFile.mpAclCustomIP[i].ulStartIP && IP <= m_AclFile.mpAclCustomIP[i].ulEndIP)
			return ACL_NET_TYPE_CUSTOM;

	return ACL_NET_TYPE_ALL;
}

//=============================================================================================
// session operation. session include the socket connection info.

int CCheckAcl::GetSessionAndSetSessionNull(SESSION *session, int iIndex)
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91一区二区在线| 日韩欧美国产三级| 欧美精品一二三| 日韩免费福利电影在线观看| 欧美精品一区二区三区很污很色的 | 久久久久久久综合狠狠综合| 亚洲国产精品成人综合| 亚洲第一久久影院| 麻豆国产欧美一区二区三区| 成人高清在线视频| 91麻豆精品国产无毒不卡在线观看 | 亚洲高清不卡在线观看| 国产综合成人久久大片91| 日本道精品一区二区三区 | 日韩一区二区三区视频在线观看| 欧美一卡2卡三卡4卡5免费| 亚洲成人免费电影| 欧美人与z0zoxxxx视频| 亚洲国产一区二区视频| 亚洲精品在线免费播放| 久久精品亚洲一区二区三区浴池 | 亚洲三级电影网站| av激情亚洲男人天堂| 亚洲视频资源在线| 欧美日韩不卡在线| 蜜臀a∨国产成人精品| 欧美日韩精品系列| 看电影不卡的网站| 欧美激情一区二区在线| 欧美性大战xxxxx久久久| 久久99国产精品免费网站| 国产精品成人免费在线| 欧美日韩亚洲另类| 大桥未久av一区二区三区中文| 亚洲一区二区三区在线播放| 精品三级在线观看| 欧美日韩三级一区| 国产乱子伦视频一区二区三区| 亚洲精品乱码久久久久久黑人 | 国产日韩在线不卡| 欧美日韩一区二区欧美激情| 国产在线播精品第三| 亚洲成人久久影院| 国产精品成人一区二区艾草| 日韩午夜三级在线| 欧美中文字幕一二三区视频| 岛国精品一区二区| 精品一区二区在线视频| 午夜日韩在线观看| 亚洲美女电影在线| 中文字幕欧美三区| 26uuu久久天堂性欧美| 欧美视频在线观看一区二区| 成人国产一区二区三区精品| 国内精品国产三级国产a久久| 亚洲v精品v日韩v欧美v专区| 亚洲欧美偷拍卡通变态| 国产精品久久久爽爽爽麻豆色哟哟| 日韩亚洲欧美一区| 欧美美女bb生活片| 在线观看91精品国产入口| 成人午夜看片网址| 国产精品亚洲一区二区三区在线 | 久久av资源站| 青青草原综合久久大伊人精品| 亚洲午夜久久久久久久久电影院| 中文字幕在线观看不卡| 亚洲国产sm捆绑调教视频| 17c精品麻豆一区二区免费| 欧美激情中文不卡| 国产亚洲精品aa午夜观看| 久久人人97超碰com| 日韩情涩欧美日韩视频| 欧美一级欧美三级在线观看| 欧美日韩国产首页| 欧美色偷偷大香| 欧美日韩久久不卡| 色哟哟日韩精品| 色综合天天在线| 色婷婷综合激情| 欧美日韩性生活| 欧美伦理视频网站| 在线播放91灌醉迷j高跟美女 | 日韩精品一区二区三区中文不卡 | 国产传媒日韩欧美成人| 国产二区国产一区在线观看| 国产成人三级在线观看| 丁香网亚洲国际| 不卡一区在线观看| 色婷婷综合久久久久中文一区二区 | 欧美一区二区视频免费观看| 91精品国模一区二区三区| 91精品欧美综合在线观看最新| 在线播放91灌醉迷j高跟美女| 欧美一区二区三区免费观看视频| 91麻豆精品国产91久久久使用方法 | 日韩欧美国产系列| 精品久久久久一区| 国产精品美女久久久久久| 亚洲丝袜自拍清纯另类| 午夜激情一区二区三区| 久热成人在线视频| 粉嫩aⅴ一区二区三区四区五区| 不卡视频免费播放| 欧美影视一区在线| 欧美mv日韩mv国产| 亚洲视频一区二区免费在线观看| 亚洲综合视频网| 久久国产三级精品| 成人国产精品免费网站| 欧美色视频一区| 亚洲精品一区二区三区蜜桃下载 | 久久久蜜臀国产一区二区| 中文字幕亚洲一区二区va在线| 亚洲一二三区在线观看| 免费观看成人av| www.亚洲色图.com| 日韩一区二区在线观看| 日本一区二区三区免费乱视频| 一区二区三区在线观看国产| 捆绑调教一区二区三区| 97国产精品videossex| 7777精品伊人久久久大香线蕉| 国产免费观看久久| 日韩在线一二三区| 99精品视频在线观看| 日韩精品一区国产麻豆| 亚洲视频资源在线| 国产麻豆精品95视频| 欧美军同video69gay| 中文欧美字幕免费| 免费观看30秒视频久久| 色综合天天综合网天天看片| 久久久精品黄色| 美女精品一区二区| 欧美自拍偷拍午夜视频| 国产欧美精品一区二区色综合 | 日本视频中文字幕一区二区三区| 国产999精品久久| 日韩三级高清在线| 午夜视频一区二区三区| 一本色道久久加勒比精品| 久久嫩草精品久久久久| 日产国产高清一区二区三区| 一道本成人在线| 国产精品国产三级国产aⅴ中文| 激情综合色播激情啊| 欧美日韩国产大片| 亚洲综合久久久久| 99久久免费精品| 中文字幕日本不卡| 国产丶欧美丶日本不卡视频| 欧美成人r级一区二区三区| 亚洲va国产天堂va久久en| 91片在线免费观看| 国产精品无圣光一区二区| 国产精品一区不卡| 欧美精品一区二区三区蜜桃视频| 奇米在线7777在线精品| 欧美精品日韩一本| 五月激情综合色| 欧美日韩精品专区| 午夜电影一区二区三区| 欧美视频日韩视频在线观看| 亚洲制服丝袜av| 欧美情侣在线播放| 三级影片在线观看欧美日韩一区二区 | 国产精品人妖ts系列视频| 国产精品夜夜嗨| 中文字幕成人在线观看| av亚洲精华国产精华精| 一区在线观看视频| 91在线视频免费观看| 亚洲精品伦理在线| 欧美性色综合网| 天堂av在线一区| 日韩欧美成人午夜| 久久 天天综合| 国产日韩综合av| 91视频91自| 亚洲成人手机在线| 91精品免费在线观看| 久久不见久久见免费视频7| 久久久青草青青国产亚洲免观| 国产成人精品一区二区三区四区 | 亚洲一区日韩精品中文字幕| 欧美日韩综合色| 美国三级日本三级久久99| 欧美精品一区二| a级精品国产片在线观看| 亚洲自拍偷拍图区| 欧美成人午夜电影| 成人动漫一区二区三区| 一区二区三区色| 日韩手机在线导航| 成人av在线观| 丝袜美腿亚洲综合| 国产亚洲欧美日韩日本| 欧美在线观看一区二区| 国内精品在线播放|