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

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

?? iphookglobal.cpp

?? WMD驅動編程,本人收集整理的10多個例子和編程環境配置文檔,特別是8139驅動,加了許多說明,并測試通過.
?? CPP
字號:
///////////////////////////////////////////////////////////////////////////////
//
//	(C) Copyright 1999 - 2000 Mark Roddy
//	All Rights Reserved
//
//	Hollis Technology Solutions
//	94 Dow Road
//	Hollis, NH 03049
//	info@hollistech.com
//
//	Synopsis: 
// 
//
//	Version Information:
//
//	$Header: /iphook/sys/driver/IpHookGlobal.cpp 4     1/27/00 10:35p Markr $ 
//
///////////////////////////////////////////////////////////////////////////////
#include "IpHookKrnl.h"

HTS_DEBUG_THIS_FILE

void IP_HOOK_GLOBAL_DATA::queueRequest(PIRP Irp)
{
	PVOID context;

	lock(context);
	IoSetCancelRoutine(Irp, GlobalCancel);
	InsertTailList(&queue, &Irp->Tail.Overlay.ListEntry);
	unlock(context);
}

PIRP IP_HOOK_GLOBAL_DATA::popQueue(BOOLEAN locked)
{
	PIRP Irp = NULL;

	PVOID context;

	if (!locked) {
	
		lock(context);
	}

	if (!IsListEmpty(&queue)) {

		PLIST_ENTRY el = RemoveHeadList(&queue);
		Irp = CONTAINING_RECORD(el, IRP, Tail.Overlay.ListEntry);
		PDRIVER_CANCEL state = IoSetCancelRoutine(Irp, NULL);

		if (state == NULL) {
			//
			// we have hit the race condition where our
			// cancel routine is runnning just before it acquires
			// the lock and dequeues the irp
			//
			InsertHeadList(&cancelQueue, &Irp->Tail.Overlay.ListEntry);
			
			Irp = NULL;
		}

    }
	
	if (!locked) {

		unlock(context);

	}

	return Irp;
}

PIPHOOK_DATA IP_HOOK_GLOBAL_DATA::getBuffer()
{
	PIPHOOK_DATA data = NULL;

	HtsDebugPrint(HTS_DEBUG_LOW, "getBuffer()\n");

	PVOID context;

	lock(context);

	bool keepTrying = true;

	do {

		if (currentBuffer == NULL) {

			HtsAssert(currentIrp == NULL);

			currentIrp = popQueue(TRUE);
			
			if (currentIrp) {

				currentBuffer = 
					(PIPHOOK_BUFFER) MmGetSystemAddressForMdl(currentIrp->MdlAddress);
			}

			if (currentBuffer) {

				currentBuffer->valid = 0;

			}  else {

				keepTrying =false;

			}
		}

		if (currentBuffer) {

			HtsDebugPrint(HTS_DEBUG_LOW, "currentBuffer %x valid %x entries %x\n",
					currentBuffer,
					currentBuffer->valid, currentBuffer->entries);

			if (currentBuffer->valid < currentBuffer->entries) {

				data = &currentBuffer->buffer[currentBuffer->valid];

				currentBuffer->valid++;

			} else {

				flushBuffer(TRUE);

				HtsAssert(currentBuffer == NULL);
				//
				// Im tempted to recurse here
				//
				HtsDebugPrint(HTS_DEBUG_LOW, "getBuffer continue\n");

			}
		}

	} while ((!currentBuffer) && keepTrying);

	unlock(context);

	HtsDebugPrint(HTS_DEBUG_LOW, "returning data %x\n", data);

	return data;
}

IP_HOOK_GLOBAL_DATA::IP_HOOK_GLOBAL_DATA() 
{
	owningContext = NULL;
	IpfDeviceObject = NULL;
	IpfFileObject = NULL;
	IpHookSequence = 0;
	InitializeListHead(&queue);
	InitializeListHead(&cancelQueue);
	currentIrp = NULL;
	currentBuffer = NULL;
	KeInitializeEvent(&stopEvent, NotificationEvent, FALSE);

}

NTSTATUS IP_HOOK_GLOBAL_DATA::initDevice()
{
	UNICODE_STRING nameString;

	RtlInitUnicodeString(&nameString, DD_IPFLTRDRVR_DEVICE_NAME);

	NTSTATUS Status = IoGetDeviceObjectPointer(&nameString,
									  STANDARD_RIGHTS_ALL,
									  &IpfFileObject,
									  &IpfDeviceObject);
	if (!NT_SUCCESS(Status)) {

		HtsDebugPrint(HTS_DEBUG_HIGH, "Can't open IpFilter (%S) Status %x\n",
					  DD_IPFLTRDRVR_DEVICE_NAME, Status);

	} else {

		HtsAssert( IpfFileObject );

		HtsAssert( IpfDeviceObject );
	}

	return Status;
}


IP_HOOK_GLOBAL_DATA::~IP_HOOK_GLOBAL_DATA()
{
	HtsDebugPrint(HTS_DEBUG_LOW, 
		"~IP_HOOK_GLOBAL_DATA IpfFileObject %x\n", IpfFileObject);

	if (workerThreadObject != NULL) {
		
		KeSetEvent(&stopEvent, 0, TRUE);

		(void) KeWaitForSingleObject(workerThreadObject, Executive, KernelMode, FALSE, NULL);

		ObDereferenceObject(workerThreadObject);
        
	}


	if (IpfFileObject) {

		HtsAssert(IpfDeviceObject);

		ObDereferenceObject(IpfFileObject);
		IpfFileObject = NULL;
		IpfDeviceObject = NULL;

	} else {

		HtsAssert(ipGlobal.IpfDeviceObject == NULL);

	}

	
}

void IP_HOOK_GLOBAL_DATA::flushBufferIfData()
{
	PVOID context;

	lock(context);

	if (currentIrp) {

		HtsAssert(currentBuffer);

		if (currentBuffer->valid) {

			flushBuffer(TRUE);
		}
	}

	unlock(context);
}

void IP_HOOK_GLOBAL_DATA::flushBuffer(BOOLEAN locked)
{
	//
	// complete the current buffer/irp
	//
	PIRP Irp = NULL;
	ULONG Information = 0;
	PVOID context;

	HtsDebugPrint(HTS_DEBUG_LOW, "flushBuffer(%x)\n", locked);

	if (!locked) {
	
		lock(context);
	}

	if (currentIrp) {

		HtsAssert(currentBuffer);

		Irp = currentIrp;

		currentIrp = NULL;

		ULONG valid = currentBuffer->valid;

		Information = sizeof(IPHOOK_BUFFER) - sizeof(IPHOOK_DATA)
			+ (valid * sizeof(IPHOOK_DATA));
		
		currentBuffer = NULL;

		HtsDebugPrint(HTS_DEBUG_LOW, "Flushing Irp %x valid %x size %x\n", Irp, valid, Information);

	}

	if (!locked) {

		unlock(context);

	}

	if (Irp) {

		HtsIrpReturn(Irp, STATUS_SUCCESS, Information);
	}
}

void IP_HOOK_GLOBAL_DATA::releaseAllBuffers(BOOLEAN locked)
{
	flushBuffer(locked);

	PIRP Irp = popQueue(locked);

	HtsDebugPrint(HTS_DEBUG_LOW, "releaseAllBuffers(%d)\n", locked);

	while (Irp) {

		HtsDebugPrint(HTS_DEBUG_LOW, "releasing Irp %x\n", Irp);

		HtsIrpReturn(Irp, STATUS_CANCELLED, 0);

		Irp = popQueue(locked);
	}
}

void workerThreadStart(PVOID context)
{
	//
	// this routine runs forever until it is signalled to die.
	// It waits on an event - the stopevent, the wait is timed.
	// If the timer expires then the function flushes the current buffer - 
	// delivering the contents to user space. Otherwise the routine terminates
	// its host thread by returning out of this function.
	//
	PRKEVENT stopEvent = (PRKEVENT) context;
	LARGE_INTEGER  Timeout;

	do {
		Timeout.QuadPart = -10000000L;

		NTSTATUS Status = KeWaitForSingleObject(stopEvent,
							  Executive,
							  KernelMode,
							  FALSE,
							  &Timeout);

		switch (Status) {

		case STATUS_TIMEOUT:
			//
			// flush the buffer
			//
			HtsDebugPrint(HTS_DEBUG_LOW, "workerThreadStart STATUS_TIMEOUT\n");
			ipGlobal.flushBufferIfData();

			break;
		
		default:

			HtsDebugPrint(HTS_DEBUG_HIGH,
				"workerThreadStart wait returned %x\n", Status);

		case STATUS_SUCCESS:
			//
			// for any value other than STATUS_TIMEOUT we bail!
			//
			HtsDebugPrint(HTS_DEBUG_LOW,
				"workerThreadStart exit\n");

			return;
		}

	} while(1);

}

NTSTATUS IP_HOOK_GLOBAL_DATA::createThread()
{

	NTSTATUS Status = PsCreateSystemThread(&workerThread,
								  THREAD_ALL_ACCESS,
								  NULL,
								  NULL,
								  NULL,
								  workerThreadStart,
								  (PVOID)&stopEvent);

	if (!NT_SUCCESS(Status)) {

		HtsDebugPrint(HTS_DEBUG_HIGH, "PsCreateSystemThread failed\n");

		workerThread = NULL;

	}
	
	Status = ObReferenceObjectByHandle(workerThread, THREAD_ALL_ACCESS, NULL, KernelMode,
		  &workerThreadObject, NULL );

	if (!NT_SUCCESS(Status)) {

		HtsDebugPrint(HTS_DEBUG_HIGH, "ObReferenceObjectByHandle failed\n");

		KeSetEvent(&stopEvent, 0, FALSE);

		workerThread = NULL;

		workerThreadObject = NULL;

	}
	
	return Status;

}
///////////////////////////////////////////////////////////////////////////////
// 
// Change History Log
//
// $Log: /iphook/sys/driver/IpHookGlobal.cpp $
// 
// 4     1/27/00 10:35p Markr
// Prepare to release!
//
///////////////////////////////////////////////////////////////////////////////



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产网站一区二区| 欧美美女视频在线观看| 日本亚洲欧美天堂免费| 亚洲午夜精品久久久久久久久| 1区2区3区欧美| 国产精品情趣视频| 中文字幕av一区 二区| 国产日韩精品久久久| 欧美日韩国产电影| 亚洲男人天堂av| 亚洲男女毛片无遮挡| 国产精品亲子伦对白| 国产精品成人网| 亚洲日本在线天堂| 亚洲成人动漫在线免费观看| 性久久久久久久| 麻豆91在线播放| 成人综合婷婷国产精品久久免费| 成人性生交大片免费看视频在线| 成人aa视频在线观看| 在线亚洲高清视频| 欧美一区二区三区色| 久久久久久久久久久黄色| 国产精品麻豆久久久| 曰韩精品一区二区| 精品一区二区三区免费观看| 国产成人激情av| 欧美三级在线看| 久久综合色鬼综合色| 亚洲欧美视频在线观看视频| 日韩av中文字幕一区二区三区| 国产精品一区专区| 在线视频你懂得一区| 欧美va亚洲va| 亚洲猫色日本管| 日韩电影在线免费看| 成人avav在线| 欧美成人官网二区| 18成人在线观看| 久久9热精品视频| 91免费看视频| 久久久久九九视频| 日韩电影在线一区二区| 99精品国产热久久91蜜凸| 欧美夫妻性生活| 亚洲视频资源在线| 国产在线观看免费一区| 欧美日韩在线观看一区二区| 国产天堂亚洲国产碰碰| 日韩电影在线一区二区三区| av激情综合网| 久久久精品日韩欧美| 日韩av中文字幕一区二区三区| 91在线视频免费91| 欧美精品一区二区三区蜜臀| 午夜成人免费视频| 一本一本大道香蕉久在线精品| 精品盗摄一区二区三区| 日韩精品亚洲专区| 91国产精品成人| 亚洲欧洲精品天堂一级| 国产精品一区二区在线观看不卡 | 亚洲www啪成人一区二区麻豆| 国产精品一区二区在线观看不卡 | 欧美一级生活片| 亚洲成人av资源| 欧美在线观看一二区| 综合久久国产九一剧情麻豆| 国产成人精品综合在线观看 | 国产乱子伦一区二区三区国色天香| 欧美日韩一区二区三区高清| 国产精品二三区| 91影院在线免费观看| 中文字幕五月欧美| 99在线视频精品| 亚洲青青青在线视频| 91在线小视频| 亚洲国产毛片aaaaa无费看| 一本大道av一区二区在线播放| 国产精品福利影院| 色综合天天综合网天天狠天天| 亚洲手机成人高清视频| 在线观看成人小视频| 亚洲一区免费视频| 在线不卡一区二区| 欧美a级一区二区| 久久久久高清精品| voyeur盗摄精品| 一区二区三区四区精品在线视频| 在线视频观看一区| 麻豆精品国产传媒mv男同 | 国产精品情趣视频| 91亚洲午夜精品久久久久久| 亚洲人成网站影音先锋播放| 欧美人体做爰大胆视频| 老鸭窝一区二区久久精品| 国产欧美日韩麻豆91| 色www精品视频在线观看| 天天综合日日夜夜精品| 2017欧美狠狠色| 色悠悠久久综合| 麻豆精品一区二区| 亚洲欧洲性图库| 在线不卡a资源高清| 国产suv精品一区二区883| 亚洲欧美偷拍卡通变态| 欧美一区二区私人影院日本| 国产精品一区二区x88av| 亚洲色图都市小说| 精品三级在线看| 91蜜桃婷婷狠狠久久综合9色| 日韩国产一二三区| 亚洲欧洲国产日本综合| 欧美一区二区在线免费观看| 成人av手机在线观看| 日本aⅴ精品一区二区三区| 国产精品国产三级国产aⅴ原创| 欧美日韩大陆在线| a级精品国产片在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品黄色在线观看| 日韩欧美www| 欧美在线你懂的| 成人久久视频在线观看| 六月婷婷色综合| 亚洲.国产.中文慕字在线| 国产精品麻豆久久久| 精品国产污污免费网站入口| 欧美综合一区二区三区| 成人一级片网址| 精品午夜久久福利影院| 五月天国产精品| 亚洲精选视频在线| 中文字幕一区不卡| 中文字幕欧美三区| 2023国产精品自拍| 日韩无一区二区| 欧美日韩亚洲国产综合| 色综合久久久网| 成人成人成人在线视频| 国产精品77777| 国产乱码精品一区二区三区五月婷 | 久久久久久久久久久电影| 日韩视频一区二区三区| 正在播放一区二区| 制服丝袜中文字幕亚洲| 欧美日本免费一区二区三区| 欧美亚一区二区| 欧美在线免费视屏| 欧美午夜精品一区二区三区| 欧美怡红院视频| 91成人在线免费观看| 欧美亚洲一区二区在线观看| 色老汉一区二区三区| 91黄色小视频| 欧美日韩日日摸| 欧美精品一卡二卡| 欧美一级久久久| 精品国产一区二区三区忘忧草| 日韩亚洲欧美高清| 久久久精品国产免费观看同学| 亚洲精品在线网站| 国产精品天天摸av网| 一区精品在线播放| 亚洲国产日日夜夜| 秋霞电影网一区二区| 韩国女主播一区| 成人毛片视频在线观看| 在线看国产一区二区| 欧美精品一级二级| 久久夜色精品一区| 国产精品午夜电影| 亚洲成精国产精品女| 日韩国产在线观看| 粉嫩13p一区二区三区| 日本精品裸体写真集在线观看 | 狠狠v欧美v日韩v亚洲ⅴ| 国产电影精品久久禁18| 成人av免费在线| 欧美精品视频www在线观看| 26uuu欧美| 亚洲欧美日韩在线播放| 日本女优在线视频一区二区 | 国产婷婷色一区二区三区四区| 成人免费一区二区三区在线观看| 亚洲成人激情自拍| 国产成人av电影在线| 欧洲视频一区二区| 久久综合九色综合97婷婷女人 | 视频精品一区二区| 国产成人丝袜美腿| 欧美人体做爰大胆视频| 久久久久九九视频| 视频在线观看91| 亚洲色图.com| 日本一区二区高清| 五月天网站亚洲| 成人久久视频在线观看| 日韩一区二区三区视频| 亚洲人成小说网站色在线|