• 大小: 13.79MB
    文件类型: .7z
    金币: 1
    下载: 0 次
    发布日期: 2023-08-04
  • 语言: 其他
  • 标签: Delphi  

资源简介

NetFilter SDK 1.4.0.0 + ProtocolFilters 1.0.8.1 - Full Sources.7z

资源截图

代码片段和文件信息

//
//  NetFilterSDK 
//  Copyright (C) 2009 Vitaly Sidorov
// All rights reserved.
//
// This file is a part of the NetFilter SDK.
// The code and information is provided “as-is“ without
// warranty of any kind either expressed or implied.
//


#include “stdinc.h“
#include “addr.h“
#include “gvars.h“
#include “mempools.h“
#include “tcpconn.h“
#include “tcprecv.h“
#include “tcpsend.h“
#include “udprecv.h“
#include “udpsend.h“
#include “packet.h“
#include “ctrlio.h“

#ifdef _WPPTRACE
#include “addr.tmh“
#endif

#define MAX_ADDR_POOL_SIZE 0

static NTSTATUS addr_setConnInfo(PNF_UDP_CONN_INFO pci PADDROBJ pAddr)
{
memset(pci 0 sizeof(NF_UDP_CONN_INFO));

pci->processId = (ULONG)pAddr->processId;
pci->ip_family = *(short*)pAddr->localAddr;

RtlCopyMemory(pci->localAddress pAddr->localAddr sizeof(pci->localAddress));

return STATUS_SUCCESS;
}


static PADDROBJ addr_alloc(PIO_STACK_LOCATION irpSp void * context int protocol PDEVICE_object pLowerDevice)
{
PADDROBJ pAddr;

pAddr = (PADDROBJ)mp_alloc(sizeof(ADDROBJ));

if (!pAddr)
{
return NULL;
}

#if DBG
g_vars.nAddr++;
KdPrint((“[counter] nAddr=%d\n“ g_vars.nAddr));
#endif

RtlZeroMemory(pAddr sizeof(ADDROBJ));

pAddr->lowerDevice = pLowerDevice;

pAddr->fileobject = (HASH_ID)irpSp->Fileobject;
pAddr->protocol = protocol;

// Assign next unique identifier

g_vars.nextAddrId++;

while ((g_vars.nextAddrId == 0) || 
ht_find_entry(g_vars.phtAddrById g_vars.nextAddrId))
{
g_vars.nextAddrId++;
}

pAddr->id = g_vars.nextAddrId;

pAddr->processId = *(ULONG*)&context;

sl_init(&pAddr->lock);

if (protocol == IPPROTO_UDP)
{
InitializeListHead(&pAddr->pendedReceivedPackets);
InitializeListHead(&pAddr->receivedPackets);
InitializeListHead(&pAddr->pendedReceiveRequests);

InitializeListHead(&pAddr->pendedSendPackets);
InitializeListHead(&pAddr->sendPackets);
InitializeListHead(&pAddr->pendedSendRequests);

InitializeListHead(&pAddr->pendedConnectRequest);
}

return pAddr;
}

void addr_free_queues(PADDROBJ pAddr)
{
PNF_PACKET pPacket;
PLIST_ENTRY pListEntry;
PIRP irp;
KIRQL irqld;

if (!pAddr)
return;

KdPrint((DPREFIX“addr_free_queues[%I64d]\n“ pAddr->id));

if (pAddr->protocol == IPPROTO_UDP)
{
sl_lock(&pAddr->lock &irqld);

while (!IsListEmpty(&pAddr->receivedPackets))
{
pPacket = (PNF_PACKET)RemoveHeadList(&pAddr->receivedPackets);
        
KdPrint((DPREFIX“addr_free[%I64d]: Orphan receivedPackets NF_PACKET - status=0x%8.8x bytes=%d\n“
pAddr->id pPacket->ioStatus pPacket->dataSize ));
        
nf_packet_free(pPacket);
}

while (!IsListEmpty(&pAddr->pendedReceivedPackets))
{
pPacket = (PNF_PACKET)RemoveHeadList(&pAddr->pendedReceivedPackets);
        
KdPrint((DPREFIX“addr_free[%I64d]: Orphan pendedReceivedPackets NF_PACKET - status=0x%8.8x bytes=%d\n“

评论

共有 条评论