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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? checkacl.cpp

?? NDIS HOOK實(shí)例
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
	*session = m_SessionBuf[iIndex];
	m_SessionBuf[iIndex].s = 0;
	return XERR_SUCCESS;
}

BOOL CCheckAcl::InitializeSession(SESSION* session)
{
	ODS(_T("Initialize Session ..."));

	session->bDirection		= ACL_DIRECTION_IN_OUT;
	session->bProtocol 		= ACL_SERVICE_TYPE_ALL;
	session->bAction		= ACL_ACTION_PASS;
	session->tStartTime 	= 0;
	session->uiPort 		= 0;
	session->ulRemoteIP 	= 0;
	session->ulSendData		= 0;
	session->ulRecvData		= 0;
	session->sMemo[0]		= '\0';
	session->uiLocalPort	= 0;
	session->ulLocalIP		= 0;

	return TRUE;
}

int CCheckAcl::CreateSession(SOCKET s, int nProtocol)
{
	ODS("XFILTER.DLL: Create Session...");

	EnterCriticalSection(&m_csSession);
	{
		for(int i = 0; i < m_SessionCount; i++)
		{
			if(m_Session[i].s == s)
			{
				LeaveCriticalSection(&m_csSession);
				return XERR_SESSION_ALREDAY_EXISTS;
			}
		}

		SESSION *tmpSession = new SESSION[m_SessionCount];
		memcpy(tmpSession, m_Session, m_SessionCount * SESSION_LENTH);
		delete[](m_Session);

		m_Session = new SESSION[m_SessionCount + 1];
		memcpy(m_Session, tmpSession, m_SessionCount * SESSION_LENTH);
		delete[](tmpSession);

		InitializeSession(m_Session + m_SessionCount);
		m_Session[m_SessionCount].s			= s;
		m_Session[m_SessionCount].bProtocol = nProtocol;
		m_Session[m_SessionCount].tStartTime = CTime::GetCurrentTime();
		_tcscpy(m_Session[m_SessionCount].sPathName, m_sProcessName);

		m_SessionCount ++;
	}
	LeaveCriticalSection(&m_csSession);

	DP1("Session Count: %u\n", m_SessionCount);

	return m_SessionCount - 1;	// return m_SessionCount will have a bug, this value 
								// used in new session index. It must - 1 .
}

int CCheckAcl::DeleteSession(SOCKET s)
{
	ODS("XFILTER.DLL: Delete Session...");

	EnterCriticalSection(&m_csSession);
	{
		for(int i = 0; i < m_SessionCount; i++)
		{
			if(m_Session[i].s == s)
			{
				SendSessionToApp(m_Session + i);

				memcpy(m_Session + i, m_Session + i + 1, (m_SessionCount - i - 1) * SESSION_LENTH);

				break;
			}
		}

		if(i >= m_SessionCount)
		{
			LeaveCriticalSection(&m_csSession);
			return XERR_SESSION_NOT_EXISTS;
		}

		m_SessionCount -- ;
	}
	LeaveCriticalSection(&m_csSession);

	DP1("Session Count: %u\n", m_SessionCount);

	return XERR_SUCCESS;
}

int CCheckAcl::SetSession(SESSION *session, BYTE bDirection, UINT uiPort, DWORD ulRemoteIP)
{
	if(session->bProtocol == ACL_SERVICE_TYPE_TCP)
	{
		if(uiPort == ACL_SERVICE_PORT_FTP)
			session->bProtocol = ACL_SERVICE_TYPE_FTP;
		else if(uiPort == ACL_SERVICE_PORT_HTTP1 || uiPort == ACL_SERVICE_PORT_HTTP2)
			session->bProtocol = ACL_SERVICE_TYPE_HTTP;
		else if(uiPort == ACL_SERVICE_PORT_TELNET)
			session->bProtocol = ACL_SERVICE_TYPE_TELNET;
		else if(uiPort == ACL_SERVICE_PORT_NNTP)
			session->bProtocol = ACL_SERVICE_TYPE_NNTP;
		else if(uiPort == ACL_SERVICE_PORT_POP3)
			session->bProtocol = ACL_SERVICE_TYPE_POP3;
		else if(uiPort == ACL_SERVICE_PORT_SMTP)
			session->bProtocol = ACL_SERVICE_TYPE_SMTP;
	}

	session->bDirection		= bDirection;
	session->uiPort			= uiPort;
	session->ulRemoteIP		= htonl(ulRemoteIP);

#if _DEBUG
	CString sOut;
	sOut.Format(_T("SOCKET: %u, Process: %s, Direction: %s, Protocol: %s:%u, Start Time: %s, Port: %u, Remote IP Address: %s"), 
		session->s,
		session->sPathName,
		GUI_DIRECTION[session->bDirection],
		GUI_SERVICE_TYPE[session->bProtocol], session->bProtocol,
		session->tStartTime.Format(_T("%Y-%m-%d %H:%M:%S")),
		session->uiPort,
		CXCommon::DIPToSIP(&session->ulRemoteIP)
		);
	ODS(sOut);
#endif

	return XERR_SUCCESS;
}

int CCheckAcl::SetSessionEx(SESSION *session, BYTE bDirection, const TCHAR *pMemo, int ByteCount, BOOL isSend)
{
	if(session->ulLocalIP == 0)
	{
		SOCKADDR_IN			inetAddr;
		int					nNameLength	= sizeof(inetAddr);

		if(getsockname(session->s, (SOCKADDR*)&inetAddr, &nNameLength) == 0)
		{
			session->uiLocalPort = ntohs(inetAddr.sin_port);

			memcpy(&session->ulLocalIP, &inetAddr.sin_addr, 4);
			session->ulLocalIP	= htonl(session->ulLocalIP);
		}
	}

	if(bDirection != ACL_DIRECTION_NOT_SET && session->bDirection != bDirection)
		session->bDirection		= bDirection;

	if(pMemo != NULL && session->sMemo[0] == '\0' )
		_tcscpy(session->sMemo, pMemo);

	if(ByteCount > 0)
	{
		if(isSend)
			session->ulSendData += ByteCount;
		else
			session->ulRecvData += ByteCount;
	}

	return XERR_SUCCESS;
}

int CCheckAcl::FindSession(SOCKET s)
{
	int		i;

	for(i = 0; i < m_SessionCount; i++)
		if(m_Session[i].s == s)
			break;

	return i;
}

int CCheckAcl::FinallySession()
{
	ODS(_T("XFILTER.DLL: FinallySession ..."));

	for(int i = 0; i < m_SessionCount; i ++)
		SendSessionToApp(m_Session + i);

	return XERR_SUCCESS;
}

int CCheckAcl::SendSessionToApp(SESSION *session)
{
#if !defined(_DEBUG)

	if(IsLocalIP(&session->ulRemoteIP))
		return XERR_SUCCESS;

#endif

	if(m_GuiHwnd != NULL && m_AclFile.mAclHeader.sSignature[0] != 0)
	{
		int		iIndex;

		for(iIndex = 0; iIndex < MAX_SESSION_BUFFER; iIndex++)
		{
			if(m_SessionBuf[iIndex].s == 0)
			{
				session->tEndTime = CTime::GetCurrentTime();
				m_SessionBuf[iIndex] = *session;
				break;
			}
		}

		//
		// 2001-12-24 修改,增加對(duì)PostMessage的錯(cuò)誤判斷,如果發(fā)送失敗
		// 直接設(shè)置緩沖區(qū)標(biāo)志為無(wú)效,丟棄封包往應(yīng)用程序的發(fā)送
		//
		if(iIndex < MAX_SESSION_BUFFER
			&& !::PostMessage(m_GuiHwnd, WM_SESSION_NOTIFY, iIndex, NULL))
			m_SessionBuf[iIndex].s = 0;
	}

#if _DEBUG
	
	CString  tmpStr;

	tmpStr.Format(
		_T("SOCKET: %u, Action: %s, Direction: %s, Protocol: %s, Start Time: %s, End Time: %s,\
		Local Port: %u, Remotoe Port: %u, Local IP Address: %s, Remote IP Address: %s,\
		In amount data: %u, Out amout Data: %u, \nMemo: %s, sProcess: %s"), 
		session->s,
		GUI_ACTION[session->bAction],
		GUI_DIRECTION[session->bDirection],
		GUI_SERVICE_TYPE[session->bProtocol],
		session->tStartTime.Format(_T("%Y-%m-%d %H:%M:%S")),
		CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S")),
		session->uiLocalPort,
		session->uiPort,
		CXCommon::DIPToSIP(&session->ulLocalIP),
		CXCommon::DIPToSIP(&session->ulRemoteIP),
		session->ulSendData,
		session->ulRecvData,
		session->sMemo,
		session->sPathName
		);

	ODS(tmpStr);

#endif
	
	session->sMemo[0]		= '\0';
	session->ulRecvData		= 0;
	session->ulSendData		= 0;

	return XERR_SUCCESS;
}

//=============================================================================================
// check the hook function, set session value and return access info.

int CCheckAcl::CheckStartup()
{
	if(m_iWorkMode != XF_QUERY_ALL 
		|| _tcscmp(m_sGuiPathName, m_sProcessName) == 0
		|| m_AclFile.mAclHeader.sSignature[0] == 0
		)
		return XF_PASS;

	if(m_sProcessName[0] == 0)
		return XERR_ACCESS_INVALID_PROCESS;

 	DWORD iIndex = FindAcl(m_sProcessName, 0);

	if(iIndex >= m_AclFile.mAclHeader.ulAclCount)
		return XF_QUERY;

	return XF_PASS;
}

void CCheckAcl::CheckSocket(SOCKET s, int af, int type, int protocol)
{
	if (af != AF_INET)
		return;

	WORD			wProtocol	= ACL_SERVICE_TYPE_ALL;	

	if (protocol == IPPROTO_IP)
	{
		if (type == SOCK_STREAM)
			wProtocol = ACL_SERVICE_TYPE_TCP;
		else if (type == SOCK_DGRAM)
			wProtocol = ACL_SERVICE_TYPE_UDP;
	}
	else if (protocol == IPPROTO_TCP)
		wProtocol	= ACL_SERVICE_TYPE_TCP;
	else if (protocol == IPPROTO_UDP)
		wProtocol	= ACL_SERVICE_TYPE_UDP;

	CreateSession(s, wProtocol);
}

void CCheckAcl::CheckCloseSocket(SOCKET s)
{
	DeleteSession(s);
}

int CCheckAcl::CheckConnect(SOCKET s, const struct sockaddr FAR *name, int namelen)
{
	int		iIndex;

	if((iIndex = FindSession(s)) >= m_SessionCount)
		return XF_PASS;
	
	SOCKADDR_IN	*pInetAddr	= (SOCKADDR_IN*)name;
	WORD		wPort		= ntohs(pInetAddr->sin_port);
	DWORD		*pRemoteIp	= (DWORD*)&pInetAddr->sin_addr;

	SetSession(m_Session + iIndex, ACL_DIRECTION_OUT, wPort, *pRemoteIp);

	return GetAccessInfo(m_Session + iIndex);
}

int  CCheckAcl::CheckAccept(SOCKET s, SOCKET news)
{
	int		iIndex;

	if((iIndex = FindSession(s)) >= m_SessionCount)
		return XF_PASS;

	if((iIndex = CreateSession(news, ACL_SERVICE_TYPE_TCP)) == XERR_SESSION_ALREDAY_EXISTS)
		return XF_PASS;
	
	SOCKADDR_IN		addr;
	int				addrlen	= sizeof(addr);
	DWORD			ulRemoteIp;

	getpeername(news, (SOCKADDR*)&addr, &addrlen);
	memcpy(&ulRemoteIp, &addr.sin_addr, 4);
	getsockname(news, (SOCKADDR*)&addr, &addrlen);

	if (SetSession(m_Session + iIndex, ACL_DIRECTION_IN, ntohs(addr.sin_port), ulRemoteIp) != XERR_SUCCESS)
		return XF_PASS;

	return GetAccessInfo(m_Session + iIndex);
}

int CCheckAcl::CheckSend(SOCKET s, TCHAR *buf, int len, LPDWORD lpNumberOfBytesSent)
{
	int		iIndex;

	if((iIndex = FindSession(s)) >= m_SessionCount)
		return XF_PASS;

	SetSessionEx(m_Session + iIndex, ACL_DIRECTION_NOT_SET, NULL, *lpNumberOfBytesSent, TRUE);

	m_ProtocolInfo.GetProtocolInfo(m_Session + iIndex, buf, len, TRUE);

	return GetAccessInfo(m_Session + iIndex);
}

int	CCheckAcl::CheckSendTo(SOCKET s, const SOCKADDR *pTo, TCHAR *buf, int len, LPDWORD lpNumberOfBytesSent)
{
	int		iIndex;

	if((iIndex = FindSession(s)) >= m_SessionCount)
		return XF_PASS;

	if (pTo != NULL && m_Session[iIndex].bProtocol == ACL_SERVICE_TYPE_UDP )
	{
		SOCKADDR_IN	*pAddr			= (SOCKADDR_IN*)pTo;
		DWORD		*pRemoteIp		= (DWORD*)&pAddr->sin_addr;

		SetSession(m_Session + iIndex, ACL_DIRECTION_OUT, ntohs(pAddr->sin_port), *pRemoteIp);
	}

	SetSessionEx(m_Session + iIndex, ACL_DIRECTION_NOT_SET, NULL, *lpNumberOfBytesSent, TRUE);

	m_ProtocolInfo.GetProtocolInfo(m_Session + iIndex, buf, len, TRUE);

	return GetAccessInfo(m_Session + iIndex);
}

int CCheckAcl::CheckRecv(SOCKET s, TCHAR *buf, int len, LPDWORD lpNumberOfBytesRecvd)
{
	int		iIndex;

	if((iIndex = FindSession(s)) >= m_SessionCount)
		return XF_PASS;

	SetSessionEx(m_Session + iIndex, ACL_DIRECTION_NOT_SET, NULL, *lpNumberOfBytesRecvd, FALSE);

	m_ProtocolInfo.GetProtocolInfo(m_Session + iIndex, buf, len, FALSE);

	return GetAccessInfo(m_Session + iIndex);
}

int CCheckAcl::CheckRecvFrom(SOCKET s, SOCKADDR *pFrom, TCHAR *buf, int len, LPDWORD lpNumberOfBytesRecvd)
{
	int		iIndex;

	if((iIndex = FindSession(s)) >= m_SessionCount)
		return XF_PASS;

	if (pFrom != NULL && m_Session[iIndex].bProtocol == ACL_SERVICE_TYPE_UDP)
	{
		SOCKADDR_IN			*pInetAddr	= (SOCKADDR_IN*)pFrom;
		DWORD				*pRemoteIp	= (DWORD*)&pInetAddr->sin_addr;

		SetSession(m_Session + iIndex, ACL_DIRECTION_IN, ntohs(pInetAddr->sin_port), *pRemoteIp); 
	}

	SetSessionEx(m_Session + iIndex, ACL_DIRECTION_NOT_SET, NULL, *lpNumberOfBytesRecvd, FALSE);

	m_ProtocolInfo.GetProtocolInfo(m_Session + iIndex, buf, len, FALSE);

	return GetAccessInfo(m_Session + iIndex);
}


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久伊人网影院| 亚洲无线码一区二区三区| 欧美丰满少妇xxxxx高潮对白| 97久久超碰精品国产| 成人av资源在线观看| 成人蜜臀av电影| 成人性生交大片免费看在线播放| 首页综合国产亚洲丝袜| 免费久久精品视频| 久久精品国产网站| 国产高清不卡二三区| 成人爱爱电影网址| 欧美日韩小视频| 日韩午夜激情视频| 久久精品视频一区二区三区| 国产婷婷一区二区| 亚洲三级免费电影| 亚洲欧美日韩国产成人精品影院 | 成人a免费在线看| 91在线精品秘密一区二区| 色婷婷av一区| 日韩欧美一级二级三级久久久| 精品欧美黑人一区二区三区| 欧美激情中文字幕| 亚洲成在线观看| 老司机免费视频一区二区三区| 成人永久免费视频| 欧美亚洲综合色| 26uuu久久天堂性欧美| 国产精品国产三级国产| 日韩专区一卡二卡| 成人一区二区三区| 678五月天丁香亚洲综合网| 精品福利二区三区| 自拍偷拍亚洲综合| 日韩高清中文字幕一区| 丰满少妇久久久久久久| 欧美日韩www| 国产精品国产三级国产aⅴ原创 | 亚洲午夜激情av| 精品一二三四区| 在线免费一区三区| 国产欧美精品日韩区二区麻豆天美| 亚洲国产欧美在线| 国产成人精品亚洲午夜麻豆| 欧美老肥妇做.爰bbww视频| 日本一二三不卡| 免费观看成人av| 在线欧美日韩精品| 亚洲人成伊人成综合网小说| 国内精品嫩模私拍在线| 欧美精选一区二区| 亚洲人成精品久久久久| 国产ts人妖一区二区| 欧美一级淫片007| 亚洲国产欧美日韩另类综合| 成人高清视频在线观看| 久久这里只有精品首页| 首页国产欧美久久| 欧美日韩夫妻久久| 亚洲精品成人少妇| 色综合一个色综合亚洲| 国产欧美视频一区二区三区| 国产一区二区在线视频| 精品美女一区二区| 毛片av一区二区| 欧美一区二区视频免费观看| 五月天中文字幕一区二区| 91麻豆蜜桃一区二区三区| 国产精品久久久一本精品| 国产成人自拍在线| 国产欧美一区二区精品婷婷 | 成人性生交大片免费看中文网站 | k8久久久一区二区三区| 久久精品夜色噜噜亚洲a∨| 久久99精品网久久| 精品三级在线观看| 精品中文字幕一区二区| 久久亚洲综合av| 国产成人精品一区二区三区四区| 国产片一区二区| 国产福利视频一区二区三区| 久久亚洲一级片| 成人a级免费电影| 亚洲激情网站免费观看| 欧美日韩精品一区视频| 视频一区视频二区在线观看| 欧美一区二区三区精品| 看电视剧不卡顿的网站| 亚洲国产岛国毛片在线| 99国产精品国产精品毛片| 亚洲一区二区美女| 91精品国产福利| 国产成人综合在线播放| 1024国产精品| 欧美伦理视频网站| 国产在线精品视频| 亚洲激情在线播放| 在线不卡免费欧美| 国产在线精品一区二区夜色| 国产精品美日韩| 欧美日韩精品高清| 国产河南妇女毛片精品久久久| 综合色中文字幕| 这里只有精品视频在线观看| 国产精品 欧美精品| 亚洲制服欧美中文字幕中文字幕| 精品国内片67194| 不卡大黄网站免费看| 奇米影视在线99精品| 国产精品日日摸夜夜摸av| 欧美日韩精品一区二区三区| 国产精品69毛片高清亚洲| 亚洲一二三专区| 久久精品夜色噜噜亚洲aⅴ| 欧美性色欧美a在线播放| 国产毛片精品视频| 五月天激情综合网| 国产精品卡一卡二| 日韩欧美专区在线| 色噜噜狠狠一区二区三区果冻| 国产制服丝袜一区| 五月天丁香久久| 亚洲精品综合在线| 国产精品久久影院| 欧美大片免费久久精品三p| 欧美三级日韩三级| 91麻豆产精品久久久久久| 国产在线精品一区二区三区不卡 | 国产一本一道久久香蕉| 亚洲国产你懂的| 亚洲三级在线看| 国产欧美精品一区二区色综合| 日韩精品专区在线| 欧美日韩免费观看一区二区三区| 99精品国产视频| 国产白丝精品91爽爽久久| 亚洲不卡一区二区三区| 亚洲激情中文1区| 最新国产成人在线观看| 国产日韩欧美麻豆| 国产亚洲午夜高清国产拍精品| 7777精品伊人久久久大香线蕉超级流畅 | 国产日产欧美精品一区二区三区| 日韩一区二区三区电影在线观看| 91在线精品一区二区三区| 99久久精品情趣| av电影在线观看完整版一区二区| 成人免费不卡视频| 成人av资源在线观看| 91一区二区三区在线观看| av中文字幕亚洲| 色综合激情久久| 91亚洲国产成人精品一区二三| 97精品超碰一区二区三区| 99久久久国产精品| 欧美性一区二区| 欧美日韩国产系列| 日韩亚洲欧美在线| 精品av久久707| 国产亚洲欧美日韩日本| 国产精品久久久久婷婷二区次 | 91麻豆产精品久久久久久| 99久久婷婷国产综合精品| 92精品国产成人观看免费| 91国模大尺度私拍在线视频| 欧美乱妇15p| 精品久久久久久综合日本欧美| 欧美www视频| 中文字幕av一区二区三区免费看| 国产精品美女久久久久久久网站| 亚洲日本va午夜在线电影| 日韩在线播放一区二区| 久久99国产精品成人| 成人av电影免费观看| 91福利在线播放| 精品国产91亚洲一区二区三区婷婷| 欧美激情一区二区三区全黄| 一区二区理论电影在线观看| 日日摸夜夜添夜夜添精品视频 | 成人丝袜视频网| 欧美日韩在线一区二区| 欧美α欧美αv大片| 国产精品美女一区二区三区| 水蜜桃久久夜色精品一区的特点| 国产毛片精品一区| 欧美日韩三级一区二区| 日韩一区二区免费在线电影| 国产精品色噜噜| 日韩电影在线看| 成人黄色av电影| 日韩你懂的在线观看| 亚洲视频免费在线观看| 久久99精品国产.久久久久| 91影院在线观看| 2017欧美狠狠色| 亚洲成av人综合在线观看| 国产精品1区2区| 7777精品伊人久久久大香线蕉超级流畅| 久久精品人人做人人综合|