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

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

?? ev_recv.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: ev_recv.c,v 1.4 2005/09/06 12:25:42 vlad Exp $

/*
* This file contains TDI_EVENT_RECEIVE and TDI_EVENT_CHAINED_RECEIVE handlers
*/

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

#include "events.h"
#include "memtrack.h"
#include "obj_tbl.h"
#include "tdi_fw.h"

struct tdi_client_irp_ctx
{
	PIO_COMPLETION_ROUTINE	completion;
	PVOID					context;
	UCHAR					old_control;
	PFILE_OBJECT            connobj;
};

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

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

/*
* TDI_EVENT_RECEIVE handler
*/

NTSTATUS	tdi_event_receive(
			    IN PVOID TdiEventContext,
			    IN CONNECTION_CONTEXT ConnectionContext,
			    IN ULONG ReceiveFlags,
			    IN ULONG BytesIndicated,
			    IN ULONG BytesAvailable,
			    OUT ULONG *BytesTaken,
			    IN PVOID Tsdu,
			    OUT PIRP *IoRequestPacket)
{
	TDI_EVENT_CONTEXT *ctx = (TDI_EVENT_CONTEXT *)TdiEventContext;
	PFILE_OBJECT connobj = ot_find_conn_ctx(ctx->fileobj, ConnectionContext);
	NTSTATUS status;
	
	KdPrint(("[tdi_fw] tdi_event_receive: addrobj 0x%x; connobj: 0x%x; %u/%u; flags: 0x%x\n",
		ctx->fileobj, connobj, BytesIndicated, BytesAvailable, ReceiveFlags));
	
	status = ((PTDI_IND_RECEIVE)(ctx->old_handler))
		 (ctx->old_context, ConnectionContext, ReceiveFlags, BytesIndicated,
		  BytesAvailable, BytesTaken, Tsdu, IoRequestPacket);
	
	KdPrint(("[tdi_fw] tdi_event_receive: status 0x%x; BytesTaken: %u; Irp: 0x%x\n",
		status, *BytesTaken, *IoRequestPacket));
	
	if (*BytesTaken != 0)
		{
		struct ot_entry *ote_conn;
		KIRQL irql;
		
		ote_conn = ot_find_fileobj(connobj, &irql);
		if (ote_conn != NULL)
			{
			ULONG bytes = *BytesTaken;
			
			ote_conn->bytes_in += bytes;
			
			// traffic stats
			KeAcquireSpinLockAtDpcLevel(&g_traffic_guard);
			
			g_traffic[TRAFFIC_TOTAL_IN] += bytes;
			
			if (ote_conn->log_disconnect)
				g_traffic[TRAFFIC_COUNTED_IN] += bytes;
			
			KeReleaseSpinLockFromDpcLevel(&g_traffic_guard);
			
			KeReleaseSpinLock(&g_ot_hash_guard, irql);
			}
		}
	
	if (*IoRequestPacket != NULL)
		{
		// got IRP. replace completion.
		struct tdi_client_irp_ctx *new_ctx;
		PIO_STACK_LOCATION irps = IoGetCurrentIrpStackLocation(*IoRequestPacket);
		
		new_ctx = (struct tdi_client_irp_ctx *)malloc_np(sizeof(*new_ctx));
		if (new_ctx != NULL)
			{
			
			new_ctx->connobj = connobj;
			
			if (irps->CompletionRoutine != NULL)
				{
				new_ctx->completion = irps->CompletionRoutine;
				new_ctx->context = irps->Context;
				new_ctx->old_control = irps->Control;
				
				}
			else	{
				
				// we don't use IoSetCompletionRoutine because it uses next not current location
				
				new_ctx->completion = NULL;
				new_ctx->context = NULL;
				
				}
			
			irps->CompletionRoutine = tdi_client_irp_complete;
			irps->Context = new_ctx;
			irps->Control = SL_INVOKE_ON_SUCCESS | SL_INVOKE_ON_ERROR | SL_INVOKE_ON_CANCEL;
			}
		}
	
	return status;
}

NTSTATUS	tdi_client_irp_complete(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
{
	struct tdi_client_irp_ctx *ctx = (struct tdi_client_irp_ctx *)Context;
	NTSTATUS status;
	
	KdPrint(("[tdi_fw] tdi_client_irp_complete: status: 0x%x; len: %u\n",
		Irp->IoStatus.Status, Irp->IoStatus.Information));
	
	if (Irp->IoStatus.Status == STATUS_SUCCESS)
		{
		
		struct ot_entry *ote_conn;
		KIRQL irql;
		
		ote_conn = ot_find_fileobj(ctx->connobj, &irql);
		if (ote_conn != NULL)
			{
			ULONG bytes = Irp->IoStatus.Information;
			
			ote_conn->bytes_in += bytes;
			
			// traffic stats
			KeAcquireSpinLockAtDpcLevel(&g_traffic_guard);
			
			g_traffic[TRAFFIC_TOTAL_IN] += bytes;
			
			if (ote_conn->log_disconnect)
				g_traffic[TRAFFIC_COUNTED_IN] += bytes;
			
			KeReleaseSpinLockFromDpcLevel(&g_traffic_guard);
			
			KeReleaseSpinLock(&g_ot_hash_guard, irql);
			}
		}
	
	// call original completion
	if (ctx->completion != NULL)
		{
		// call old completion (see the old control)
		BOOLEAN b_call = FALSE;
		
		if (Irp->Cancel)
			{
			// cancel
			if (ctx->old_control & SL_INVOKE_ON_CANCEL)
				b_call = TRUE;
			}
		else	{
			if (Irp->IoStatus.Status >= STATUS_SUCCESS)
				{
				// success
				if (ctx->old_control & SL_INVOKE_ON_SUCCESS)
					b_call = TRUE;
				}
			else	{
				// error
				if (ctx->old_control & SL_INVOKE_ON_ERROR)
					b_call = TRUE;
				}
			}
		
		if (b_call)
			{
			status = (ctx->completion)(DeviceObject, Irp, ctx->context);
			
			KdPrint(("[tdi_flt] tdi_client_irp_complete: original handler: 0x%x; status: 0x%x\n",
				ctx->completion, status));
			
			}
		else
			status = STATUS_SUCCESS;
		
		}
	
	free(ctx);
	return status;
}

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

/*
* TDI_EVENT_CHAINED_RECEIVE handler
*/

NTSTATUS	tdi_event_chained_receive(
				    IN PVOID TdiEventContext,
				    IN CONNECTION_CONTEXT ConnectionContext,
				    IN ULONG ReceiveFlags,
				    IN ULONG ReceiveLength,
				    IN ULONG StartingOffset,
				    IN PMDL  Tsdu,
				    IN PVOID TsduDescriptor)
{
	TDI_EVENT_CONTEXT *ctx = (TDI_EVENT_CONTEXT *)TdiEventContext;
	PFILE_OBJECT connobj = ot_find_conn_ctx(ctx->fileobj, ConnectionContext);
	NTSTATUS status;
	
	KdPrint(("[tdi_fw] tdi_event_chained_receive: addrobj 0x%x; connobj: 0x%x; %u; flags: 0x%x\n",
		ctx->fileobj, connobj, ReceiveLength, ReceiveFlags));
	
	status = ((PTDI_IND_CHAINED_RECEIVE)(ctx->old_handler))
		 (ctx->old_context, ConnectionContext, ReceiveFlags,ReceiveLength ,
		  StartingOffset, Tsdu, TsduDescriptor);
	
	KdPrint(("[tdi_fw] tdi_event_chained_receive: status 0x%x\n", status));
	
	if (status == STATUS_SUCCESS || status == STATUS_PENDING)
		{
		struct ot_entry *ote_conn;
		KIRQL irql;
		
		ote_conn = ot_find_fileobj(connobj, &irql);
		if (ote_conn != NULL)
			{
			ULONG bytes = ReceiveLength;
			
			ote_conn->bytes_in += bytes;
			
			// traffic stats
			KeAcquireSpinLockAtDpcLevel(&g_traffic_guard);
			
			g_traffic[TRAFFIC_TOTAL_IN] += bytes;
			
			if (ote_conn->log_disconnect)
				g_traffic[TRAFFIC_COUNTED_IN] += bytes;
			
			KeReleaseSpinLockFromDpcLevel(&g_traffic_guard);
			
			KeReleaseSpinLock(&g_ot_hash_guard, irql);
			}
		}
	
	return status;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色爱区综合激月婷婷| 亚洲国产精华液网站w| www成人在线观看| 亚洲欧洲成人自拍| 青青草成人在线观看| 99精品国产热久久91蜜凸| 91精品国产乱码| 亚洲黄色片在线观看| 国产成人啪午夜精品网站男同| 欧美久久久久久久久| 国产精品另类一区| 激情欧美日韩一区二区| 欧美精品777| 亚洲国产视频直播| 色综合久久88色综合天天| 久久久99精品久久| 黄网站免费久久| 欧美一级欧美三级在线观看| 午夜精品福利一区二区三区蜜桃| 99re热这里只有精品视频| 国产嫩草影院久久久久| 国产一区二区不卡| 欧美电影免费观看高清完整版在线观看| 亚洲成人资源在线| 欧美日韩一级大片网址| 一区二区三区中文字幕在线观看| 色婷婷综合久久久久中文| 亚洲国产精品成人久久综合一区| 国产高清在线精品| 国产视频一区二区三区在线观看| 精品一区二区三区蜜桃| 日韩美女主播在线视频一区二区三区| 天天综合网天天综合色| 91精品国产色综合久久不卡电影 | 欧美视频一区二区三区四区| 日韩理论片在线| 96av麻豆蜜桃一区二区| 亚洲欧洲精品成人久久奇米网| 99久久国产综合精品色伊| 国产精品天天看| 99国产精品视频免费观看| 亚洲日韩欧美一区二区在线| 色悠久久久久综合欧美99| 伊人开心综合网| 欧美影院一区二区三区| 天堂影院一区二区| 精品对白一区国产伦| 国产精品一卡二| 亚洲视频在线观看一区| 色婷婷综合久久久中文字幕| 亚洲电影中文字幕在线观看| 日韩欧美一区电影| 成人综合婷婷国产精品久久免费| 国产精品夫妻自拍| 欧美精品自拍偷拍| 国产精品18久久久久久vr| 国产精品美女www爽爽爽| 91精彩视频在线观看| 日韩av中文字幕一区二区| 久久免费的精品国产v∧| 91在线精品一区二区| 婷婷综合另类小说色区| 久久久久久97三级| 欧美午夜寂寞影院| 另类综合日韩欧美亚洲| 国产精品久久久久影院色老大| 欧美综合视频在线观看| 九九在线精品视频| 一级中文字幕一区二区| 精品粉嫩超白一线天av| 91精品福利视频| 国产激情一区二区三区| 亚洲综合一区二区精品导航| 日韩三级电影网址| 色老综合老女人久久久| 精品一区中文字幕| 亚洲黄色在线视频| 欧美国产亚洲另类动漫| 欧美日韩综合一区| 成人一级片网址| 久久国产福利国产秒拍| 一级中文字幕一区二区| 欧美高清在线一区二区| 日韩视频在线一区二区| 一本久道久久综合中文字幕| 国产精品正在播放| 日韩精品一二三四| 一区二区三区中文在线| 国产精品视频线看| 精品久久久久99| 欧美麻豆精品久久久久久| 不卡欧美aaaaa| 国产在线精品一区二区| 日韩在线观看一区二区| 一区二区三区日韩欧美精品| 国产精品网站在线播放| 国产性色一区二区| 欧美成人性战久久| 欧美一区二区不卡视频| 欧美日韩综合在线| 欧美亚洲愉拍一区二区| 91蜜桃在线观看| av在线不卡电影| 国产高清亚洲一区| 国产一区二区三区四区五区美女| 奇米影视一区二区三区小说| 视频在线观看一区| 香蕉av福利精品导航| 亚洲一区二区av电影| 亚洲男人天堂av网| 1024亚洲合集| 亚洲欧美自拍偷拍色图| 一区在线观看免费| 日韩一区在线播放| 亚洲图片你懂的| 亚洲人成7777| 亚洲激情自拍偷拍| 亚洲综合色成人| 午夜在线电影亚洲一区| 视频一区欧美日韩| 麻豆精品久久久| 精品夜夜嗨av一区二区三区| 卡一卡二国产精品| 国产精品一区二区无线| 成人久久久精品乱码一区二区三区| 国产成人亚洲综合a∨婷婷图片 | 亚洲影视在线观看| 亚洲国产日韩a在线播放性色| 亚洲一区二区三区美女| 男女性色大片免费观看一区二区| 日韩精品国产欧美| 激情综合色播激情啊| 国产a精品视频| av在线免费不卡| 欧美色老头old∨ideo| 日韩精品一区二区三区老鸭窝| 精品国产电影一区二区| 国产精品国产三级国产普通话三级 | 亚洲一区二区三区中文字幕| 五月婷婷激情综合网| 久久99精品久久久| 北条麻妃国产九九精品视频| 在线免费观看一区| 欧美一区二区私人影院日本| 久久精品在线免费观看| 亚洲欧美日韩久久精品| 免费的国产精品| 成人99免费视频| 欧美精品v国产精品v日韩精品| 国产婷婷色一区二区三区 | 亚洲国产成人精品视频| 青青草原综合久久大伊人精品 | 久久嫩草精品久久久精品| 国产精品久久毛片| 免费一级欧美片在线观看| av在线不卡免费看| 日韩精品一区二区三区蜜臀| 亚洲美女免费在线| 韩国成人精品a∨在线观看| 色悠悠亚洲一区二区| 2014亚洲片线观看视频免费| 亚洲国产精品久久不卡毛片| 国产白丝网站精品污在线入口| 欧美午夜片在线观看| 国产亚洲欧美在线| 免费看黄色91| 在线一区二区三区| 国产欧美视频一区二区| 日韩国产精品久久| 91丨九色丨黑人外教| 久久午夜免费电影| 偷拍一区二区三区| 色综合久久九月婷婷色综合| 久久精品欧美日韩| 青椒成人免费视频| 欧美揉bbbbb揉bbbbb| 最新久久zyz资源站| 国产精品一区三区| 91精品国产高清一区二区三区| 亚洲色图19p| av亚洲精华国产精华| 久久―日本道色综合久久| 日本成人在线网站| 欧美日韩亚洲综合一区二区三区| 亚洲色图19p| 91影视在线播放| 国产精品成人网| 成人在线综合网| 26uuuu精品一区二区| 韩国女主播成人在线观看| 欧美不卡在线视频| 日本成人中文字幕在线视频| 91精品久久久久久久91蜜桃| 亚洲午夜电影在线| 欧美在线啊v一区| 亚洲一区二区精品3399| 欧美亚洲一区二区三区四区| 亚洲一区二区三区四区五区中文 | 欧美亚洲国产一区在线观看网站| 亚洲欧洲精品天堂一级|