📄 cpgpnetfilterdriver.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 + -