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

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

?? disp_dg.c

?? 開源的防火墻代碼
?? C
字號:
/* Copyright (c) 2002-2005 Vladislav Goncharov.
*
* Redistribution and use in source forms, with and without modification,
* are permitted provided that this entire comment appears intact.
*
* Redistribution in binary form may occur without any restrictions.
*
* This software is provided ``AS IS'' without any warranties of any kind.
*/

// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil -*- (for GNU Emacs)
//
// $Id: disp_dg.c,v 1.12 2003/09/04 15:20:09 dev Exp $

/*
* This file contains TDI_SEND_DATAGRAM and TDI_RECEIVE_DATAGRAM handlers
*/

#include <ntddk.h>
#include <tdikrnl.h>
#include "sock.h"

#include "dispatch.h"
#include "filter.h"
#include "memtrack.h"
#include "obj_tbl.h"
#include "sids.h"
#include "tdi_fw.h"

static NTSTATUS tdi_receive_datagram_complete(
						IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context);


//----------------------------------------------------------------------------

/*
* TDI_SEND_DATAGRAM handler
*/

int
tdi_send_datagram(PIRP irp, PIO_STACK_LOCATION irps, struct completion *completion)
{
	TDI_REQUEST_KERNEL_SENDDG *param = (TDI_REQUEST_KERNEL_SENDDG *)(&irps->Parameters);
	TA_ADDRESS *local_addr, *remote_addr;
	NTSTATUS status;
	struct ot_entry *ote_addr = NULL;
	KIRQL irql;
	int result = FILTER_DENY, ipproto;
	struct flt_request request;
	struct flt_rule rule;
	
	memset(&request, 0, sizeof(request));
	
	// check device object: UDP or RawIP
	if (get_original_devobj(irps->DeviceObject, &ipproto) == NULL ||
		(ipproto != IPPROTO_UDP && ipproto != IPPROTO_IP))
		{
		// unknown device object!
		KdPrint(("[tdi_fw] tdi_send_datagram: unknown DeviceObject 0x%x!\n",
			irps->DeviceObject));
		goto done;
		}
	
	// get local address of address object
	
	ote_addr = ot_find_fileobj(irps->FileObject, &irql);
	if (ote_addr == NULL)
		{
		KdPrint(("[tdi_fw] tdi_send_datagram: ot_find_fileobj(0x%x)!\n", irps->FileObject));
#if DBG
		// address object was created before driver was started
		result = FILTER_ALLOW;
#endif
		goto done;
		}
	
	KdPrint(("[tdi_fw] tdi_send_datagram: addrobj 0x%x (size: %u)\n", irps->FileObject,
		param->SendLength));
	
	local_addr = (TA_ADDRESS *)(ote_addr->local_addr);
	remote_addr = ((TRANSPORT_ADDRESS *)(param->SendDatagramInformation->RemoteAddress))->Address;
	
	KdPrint(("[tdi_fw] tdi_send_datagram(pid:%u/%u): %x:%u -> %x:%u\n",
		ote_addr->pid, PsGetCurrentProcessId(),
		ntohl(((TDI_ADDRESS_IP *)(local_addr->Address))->in_addr),
	ntohs(((TDI_ADDRESS_IP *)(local_addr->Address))->sin_port),
	ntohl(((TDI_ADDRESS_IP *)(remote_addr->Address))->in_addr),
	ntohs(((TDI_ADDRESS_IP *)(remote_addr->Address))->sin_port)));
	
	request.struct_size = sizeof(request);
	
	request.type = TYPE_DATAGRAM;
	request.direction = DIRECTION_OUT;
	request.proto = ipproto;
	
	// don't use ote_addr->pid because one process can create address object
	// but another one can send datagram on it
	request.pid = (ULONG)PsGetCurrentProcessId();
	if (request.pid == 0)
		{
		// some NetBT datagrams are sent in context of idle process: avoid it
		request.pid = ote_addr->pid;
		}
	
	// get user SID & attributes (can't call get_current_sid_a at DISPATCH_LEVEL)
	if ((request.sid_a = copy_sid_a(ote_addr->sid_a, ote_addr->sid_a_size)) != NULL)
		request.sid_a_size = ote_addr->sid_a_size;
	
	memcpy(&request.addr.from, &local_addr->AddressType, sizeof(struct sockaddr));
	memcpy(&request.addr.to, &remote_addr->AddressType, sizeof(struct sockaddr));
	request.addr.len = sizeof(struct sockaddr_in);
	
	memset(&rule, 0, sizeof(rule));
	
	result = quick_filter(&request, &rule);
	
	memcpy(request.log_rule_id, rule.rule_id, RULE_ID_SIZE);
	
	if (rule.log >= RULE_LOG_LOG)
		{
		ULONG bytes = param->SendLength;
		
		// traffic stats
		KeAcquireSpinLockAtDpcLevel(&g_traffic_guard);
		
		g_traffic[TRAFFIC_TOTAL_OUT] += bytes;
		
		if (rule.log >= RULE_LOG_COUNT)
			{
			request.log_bytes_out = bytes;
			
			g_traffic[TRAFFIC_COUNTED_OUT] += bytes;
			
			}
		else
			request.log_bytes_out = (ULONG)-1;
		
		KeReleaseSpinLockFromDpcLevel(&g_traffic_guard);
		
		log_request(&request);
		}
	
	done:
	
	// cleanup
	if (ote_addr != NULL)
		KeReleaseSpinLock(&g_ot_hash_guard, irql);
	if (request.sid_a != NULL)
		free(request.sid_a);
	
	if (result == FILTER_DENY)
		irp->IoStatus.Status = STATUS_INVALID_ADDRESS;	// set fake status
	
	return result;
}

//----------------------------------------------------------------------------

/*
* TDI_RECEIVE_DATAGRAM handler
*/

int	tdi_receive_datagram(PIRP irp, PIO_STACK_LOCATION irps, struct completion *completion)
{
	KdPrint(("[tdi_fw] tdi_receive_datagram: addrobj 0x%x\n", irps->FileObject));
	
	completion->routine = tdi_receive_datagram_complete;
	
	return FILTER_ALLOW;
}

NTSTATUS	tdi_receive_datagram_complete(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
{
	PIO_STACK_LOCATION irps = IoGetCurrentIrpStackLocation(Irp);
	TDI_REQUEST_KERNEL_RECEIVEDG *param = (TDI_REQUEST_KERNEL_RECEIVEDG *)(&irps->Parameters);
	PFILE_OBJECT addrobj = irps->FileObject;
	struct ot_entry *ote_addr = NULL;
	KIRQL irql;
	int result = FILTER_DENY, ipproto;
	NTSTATUS status = STATUS_SUCCESS;
	struct flt_request request;
	struct flt_rule rule;
	TA_ADDRESS *local_addr, *remote_addr;
	
	memset(&request, 0, sizeof(request));
	
	// check device object: UDP or RawIP
	if (get_original_devobj(DeviceObject, &ipproto) == NULL ||
		(ipproto != IPPROTO_UDP && ipproto != IPPROTO_IP))
		{
		// unknown device object!
		KdPrint(("[tdi_fw] tdi_receive_datagram_complete: unknown DeviceObject 0x%x!\n",
			DeviceObject));
		status = STATUS_UNSUCCESSFUL;
		goto done;
		}
	
	KdPrint(("[tdi_fw] tdi_receive_datagram_complete: addrobj 0x%x; status 0x%x; information %u\n",
		addrobj, Irp->IoStatus.Status, Irp->IoStatus.Information));
	
	if (Irp->IoStatus.Status != STATUS_SUCCESS)
		{
		KdPrint(("[tdi_fw] tdi_receive_datagram_complete: status 0x%x\n",
			Irp->IoStatus.Status));
		status = Irp->IoStatus.Status;
		goto done;
		}
	
	ote_addr = ot_find_fileobj(addrobj, &irql);
	if (ote_addr == NULL)
		{
		KdPrint(("[tdi_fw] tdi_receive_datagram_complete: ot_find_fileobj(0x%x)!\n",
			addrobj));
		status = STATUS_UNSUCCESSFUL;
		goto done;
		}
	
	request.struct_size = sizeof(request);
	
	request.type = TYPE_DATAGRAM;
	request.direction = DIRECTION_IN;
	request.proto = ipproto;
	request.pid = ote_addr->pid;
	
	// get user SID & attributes!
	if ((request.sid_a = copy_sid_a(ote_addr->sid_a, ote_addr->sid_a_size)) != NULL)
		request.sid_a_size = ote_addr->sid_a_size;
	
	local_addr = (TA_ADDRESS *)(ote_addr->local_addr);
	remote_addr = ((TRANSPORT_ADDRESS *)(param->ReceiveDatagramInformation->RemoteAddress))->Address;
	
	KdPrint(("[tdi_fw] tdi_receive_datagram_complete(pid:%u): %x:%u -> %x:%u\n",
		ote_addr->pid,
		ntohl(((TDI_ADDRESS_IP *)(remote_addr->Address))->in_addr),
	ntohs(((TDI_ADDRESS_IP *)(remote_addr->Address))->sin_port),
	ntohl(((TDI_ADDRESS_IP *)(local_addr->Address))->in_addr),
	ntohs(((TDI_ADDRESS_IP *)(local_addr->Address))->sin_port)));
	
	memcpy(&request.addr.from, &remote_addr->AddressType, sizeof(struct sockaddr));
	memcpy(&request.addr.to, &local_addr->AddressType, sizeof(struct sockaddr));
	request.addr.len = sizeof(struct sockaddr_in);
	
	memset(&rule, 0, sizeof(rule));
	
	result = quick_filter(&request, &rule);
	
	memcpy(request.log_rule_id, rule.rule_id, RULE_ID_SIZE);
	
	if (rule.log >= RULE_LOG_LOG)
		{
		ULONG bytes = Irp->IoStatus.Information;
		
		// traffic stats
		KeAcquireSpinLockAtDpcLevel(&g_traffic_guard);
		
		g_traffic[TRAFFIC_TOTAL_IN] += bytes;
		
		if (rule.log >= RULE_LOG_COUNT)
			{
			request.log_bytes_in = bytes;
			
			g_traffic[TRAFFIC_COUNTED_IN] += bytes;
			
			}
		else
			request.log_bytes_in = (ULONG)-1;
		
		KeReleaseSpinLockFromDpcLevel(&g_traffic_guard);
		
		log_request(&request);
		}
	
	done:
	// convert result to NTSTATUS
	if (result == FILTER_ALLOW)
		status = STATUS_SUCCESS;
	else	{		/* FILTER_DENY */
		
		if (status == STATUS_SUCCESS)
			status = Irp->IoStatus.Status = STATUS_ACCESS_DENIED;	// good status?
		
		}
	
	// cleanup
	if (ote_addr != NULL)
		KeReleaseSpinLock(&g_ot_hash_guard, irql);
	if (request.sid_a != NULL)
		free(request.sid_a);
	
	return tdi_generic_complete(DeviceObject, Irp, Context);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人tv网| 成人高清免费在线播放| 国产寡妇亲子伦一区二区| 一本色道亚洲精品aⅴ| 欧美成人精品3d动漫h| 一区二区三区**美女毛片| 国产麻豆精品一区二区| 91麻豆精品国产91久久久资源速度 | 日韩国产欧美在线观看| 成人精品视频网站| 久久婷婷成人综合色| 亚洲成人免费影院| 一本到三区不卡视频| 国产欧美精品一区| 麻豆免费精品视频| 欧美精品成人一区二区三区四区| 日韩伦理免费电影| 国产a区久久久| 久久精品一区二区三区四区| 精东粉嫩av免费一区二区三区| 欧美日韩一区二区不卡| 一区二区视频在线看| 99久久婷婷国产综合精品| 日本一区二区三区视频视频| 韩日精品视频一区| 久久久久国产精品厨房| 国产在线视频精品一区| 日韩亚洲欧美在线观看| 奇米色一区二区| 日韩丝袜情趣美女图片| 日本aⅴ亚洲精品中文乱码| 欧美精品精品一区| 青青草国产成人av片免费| 欧美一区二区三区的| 免费成人美女在线观看| 日韩美女在线视频| 国产麻豆成人精品| 中文字幕第一区| 99re这里都是精品| 亚洲一区二区免费视频| 欧美日韩在线直播| 美女爽到高潮91| 久久影院电视剧免费观看| 国产99精品视频| 亚洲色图欧洲色图婷婷| 在线免费观看一区| 日韩和的一区二区| 欧美成人猛片aaaaaaa| 国产不卡在线一区| 怡红院av一区二区三区| 欧美精品少妇一区二区三区| 久久99精品国产91久久来源| 国产视频一区二区在线观看| 91美女在线观看| 爽好久久久欧美精品| 久久久久久夜精品精品免费| 不卡视频一二三四| 午夜av一区二区| 精品国产污污免费网站入口 | 亚洲日本丝袜连裤袜办公室| 欧美日韩国产天堂| 国产乱子伦视频一区二区三区 | 7777精品久久久大香线蕉| 精品一区二区在线免费观看| 亚洲男人的天堂在线观看| 欧美日韩国产一区| 国产成+人+日韩+欧美+亚洲| 亚洲一区二区高清| 国产日韩欧美制服另类| 在线观看免费视频综合| 国产在线看一区| ...av二区三区久久精品| 欧美日韩国产色站一区二区三区| 精品亚洲成a人在线观看| 伊人色综合久久天天人手人婷| 日韩欧美中文字幕一区| 91同城在线观看| 日本色综合中文字幕| 国产精品高潮呻吟| 欧美一区二区免费| 色嗨嗨av一区二区三区| 麻豆精品新av中文字幕| 亚洲视频免费看| 2020国产成人综合网| 欧美视频完全免费看| 精品无码三级在线观看视频 | 亚洲高清中文字幕| 久久久综合精品| 7777精品伊人久久久大香线蕉超级流畅| 国产中文字幕精品| 亚洲午夜在线电影| 国产精品久久久久婷婷| 6080国产精品一区二区| 91丝袜国产在线播放| 韩国视频一区二区| 免费人成黄页网站在线一区二区| 亚洲一区二区三区四区在线免费观看| 亚洲国产精品二十页| 精品欧美黑人一区二区三区| 777久久久精品| 欧洲国内综合视频| 日本高清不卡aⅴ免费网站| 国产成人免费9x9x人网站视频| 日韩av不卡一区二区| 国产精品大尺度| 欧美国产日韩亚洲一区| 国产亚洲成年网址在线观看| 亚洲精品一区二区三区香蕉| 91精品在线免费| 欧美精品一二三四| 制服丝袜亚洲色图| 欧美一区二区女人| 欧美va在线播放| 精品国产免费视频| 久久综合九色综合97婷婷女人 | 亚洲国产婷婷综合在线精品| 亚洲精选视频免费看| 亚洲码国产岛国毛片在线| 亚洲人123区| 一二三四区精品视频| 亚洲国产中文字幕| 日本欧美大码aⅴ在线播放| 日本不卡123| 狠狠色2019综合网| 国产+成+人+亚洲欧洲自线| 成人福利在线看| 日本韩国欧美一区二区三区| 欧美色网站导航| 日韩欧美一卡二卡| 国产午夜精品一区二区| 国产精品国产三级国产aⅴ入口| 亚洲欧洲日韩综合一区二区| 亚洲最快最全在线视频| 亚洲一区二区在线观看视频| 日本美女视频一区二区| 国产精品影视天天线| 97久久超碰精品国产| 欧美日韩亚洲综合一区二区三区| 日韩欧美一二三四区| 国产婷婷色一区二区三区四区 | 亚洲免费伊人电影| 五月激情综合婷婷| 国产剧情一区二区| 91久久精品一区二区| 欧美大肚乱孕交hd孕妇| 中文字幕中文字幕在线一区| 午夜精品一区二区三区电影天堂| 蜜桃91丨九色丨蝌蚪91桃色| 成人免费视频一区| 欧美人与性动xxxx| 国产女主播视频一区二区| 亚洲最新视频在线观看| 国产美女精品在线| 欧美在线一二三| 国产欧美一区二区精品婷婷 | 99免费精品在线观看| 7777精品伊人久久久大香线蕉的| 国产欧美日韩三级| 日韩成人一级大片| 成人av集中营| 日韩一区二区免费电影| 亚洲精品视频在线看| 国产一区二区三区免费看| 欧美在线观看视频一区二区| 国产性天天综合网| 免费的国产精品| 欧美色成人综合| 亚洲欧美综合网| 国产一区二区免费在线| 欧美性生活久久| 国产日产欧美一区二区视频| 青青草91视频| 成人h动漫精品一区二| 欧美电影免费观看高清完整版在线 | 国产一区日韩二区欧美三区| 欧美日韩一区视频| 亚洲欧美一区二区三区国产精品| 国产精品一区二区91| 日韩欧美美女一区二区三区| 亚洲电影你懂得| 一本色道**综合亚洲精品蜜桃冫| 国产午夜精品久久久久久免费视 | 国产电影精品久久禁18| 日韩三级视频中文字幕| 午夜视频一区二区三区| 91同城在线观看| 中文字幕一区不卡| 国产成人精品一区二区三区四区 | 99国产精品99久久久久久| 久久精品一区二区三区四区 | 麻豆精品视频在线观看免费| 欧美日韩一区二区欧美激情| 亚洲无人区一区| 欧美三级欧美一级| 亚洲图片自拍偷拍| 欧美性欧美巨大黑白大战| 亚洲一区二区偷拍精品| 欧美日韩精品是欧美日韩精品| 最新热久久免费视频| 91丨porny丨最新|