⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpgpnetfilterdriver.cpp

📁 PGP8.0源码 请认真阅读您的文件包然后写出其具体功能
💻 CPP
字号:
/*____________________________________________________________________________
	Copyright (C) 2002 PGP Corporation
	All rights reserved.

	$Id: CPGPnetFilterDriver.cpp,v 1.3 2002/08/06 20:10:26 dallen Exp $
____________________________________________________________________________*/

#include "pgpnetBase.h"
#include "pgpnetPacket.h"

#include "pgpKernelTiming.h"
#include "pgpnetpackethelper.h"
#include "pgpnetIpHelper.h"
#include "pgpNetIPdef.h"

#include "pgpNetWin32.h"
#include "CPGPnetDriver.h"
#include "CPGPnetFilterDriver.h"

#include "CPGPnetAdapter.h"
#include "CPGPnetFilterAdapter.h"

#include "pgpnetComm.h"

#include "pgpnetDebug.h"

/* function declaration for CfgRegister function */
VOID 
PGPnetFilterCfgDriverRegister(NDIS_HANDLE				cfgAdapterHandle,
							  PGPnetCfgReceiveT			ReceiveHandler,
							  PGPnetCfgReceiveCompleteT	ReceiveCompleteHandler,
							  PGPnetCfgSendCompleteT	SendCompleteHandler);

extern "C" {
PGPBoolean
CPGPnetFilterDriver::PGPCheckIp(PGPUInt32 ipToCheck)
{
	PGPUInt32 i = 0;

	for (i = 0; i < PGPnetFilterDriver->PGPnetAdapterInstanceCount; i ++) {
		if (PGPnetFilterDriver->PGPnetAdapterInstance[i]->mIpAddress == ipToCheck) {
			return TRUE;
		}
	}
	return FALSE;
}
}

CPGPnetFilterDriver::CPGPnetFilterDriver()
{
	cfgAdapterHandle = NULL;
	activeFilterAdapter = NULL;

	unregisterred = TRUE;

//	PMRegister();
}

CPGPnetFilterDriver::~CPGPnetFilterDriver()
{
	PMUnRegister();
}

VOID CPGPnetFilterDriver::PMRegister()
{
	DBG_FUNC("CPGPnetFilterDriver::PMRegister");

	DBG_ENTER();

	if (unregisterred)
		PGPnetPMFilterDriverRegister(this,
				AllocatePGPnetPacket,
				PGPKernelRequest,
				FilterSend,
				NatSAKeepAlive,
				PGPnetFilterCfgDriverRegister,
				PGPCheckIp,
				PGPInjectPacket,
				FreePGPnetPacket,
				&(this->PolicyManagerHandle));

	unregisterred = FALSE;

	DBG_LEAVE(0);
}

VOID CPGPnetFilterDriver::PMUnRegister()
{
	PGPnetPMFilterDriverUnRegister();
	unregisterred = TRUE;
}

CPGPnetFilterAdapter* CPGPnetFilterDriver::GetActiveFilterAdapter(PGPUserValue userValue)
{
	UINT i;

	if (userValue != NULL)
	{
		for (i = 0; i < PGPnetAdapterInstanceCount; i++)
			if (PGPnetAdapterInstance[i] == userValue)
				return (CPGPnetFilterAdapter*)userValue;
	}

	if (activeFilterAdapter != NULL)
		return activeFilterAdapter;

	for (i = 0; i < PGPnetAdapterInstanceCount; i++)
	{
		if (!EmptyEthernetAddress(PGPnetAdapterInstance[i]->mHardwareAddress))
			return PGPnetAdapterInstance[i];
	}

	return NULL;


}

VOID CPGPnetFilterDriver::FreePGPnetAdapter(
	CPGPnetFilterAdapter*	adapter
	)
{
    DBG_FUNC("CPGPnetFilterDriverMac::FreePGPnetAdapter")
	
	UINT i;
	UINT j;

	DBG_ENTER();

	if (activeFilterAdapter == adapter)
		activeFilterAdapter = NULL;

	for (i = 0; i < PGPnetAdapterInstanceCount; i++)
		if (PGPnetAdapterInstance[i] == adapter)
		{
			PGPnetAdapterInstance[i]->FreePacketPool();
			delete PGPnetAdapterInstance[i];
			PGPnetAdapterInstance[i] = NULL;
			PGPnetAdapterInstanceCount--;
			for (j = i; j < PGPnetAdapterInstanceCount; j++)
				PGPnetAdapterInstance[j] = PGPnetAdapterInstance[j+1];
			
		}
	DBG_LEAVE(0);

}

VOID CPGPnetFilterDriver::FragmentCollection(
    PVOID SystemArg1,
    PVOID Context,
    PVOID SystemArg2,
    PVOID SystemArg3)
{
// Hard coded timeout, to be changed to an adaptive value.
#define FRAGMENTATION_TIMEOUT 15000

	DBG_FUNC("FragmentCollection")

	CPGPnetFilterAdapter* adapter;
	UINT i;

	DBG_ENTER();

	for (i = 0; i < PGPnetFilterDriver->PGPnetAdapterInstanceCount; i ++)
	{
		adapter = PGPnetFilterDriver->PGPnetAdapterInstance[i];

		adapter->FragmentCollection();
	}

	NdisSetTimer(&PGPnetFilterDriver->collection_timer, FRAGMENTATION_TIMEOUT);

	DBG_LEAVE(0);

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -