gpt4 book ai didi

windows - 如何检查 TDI 过滤器驱动程序是否提供 TCP 端口?

转载 作者:可可西里 更新时间:2023-11-01 13:13:48 32 4
gpt4 key购买 nike

我的 TDI 过滤器驱动程序正在拦截 IRP_MJ_CREATE 请求,并根据我的需要分配每个打开的 TCP/UDP 连接的源端口。驱动程序在内部维护一个连接表(包括套接字打开/关闭和 TCP 宽限期),但我仍然看到驱动程序没有收到特定事件通知的罕见情况,导致错误地假设特定 TCP 源端口是在使用期间免费。

我正在研究在分配此端口之前发送 TDI_QUERY_INFORMATION 请求的选项,但我没有看到查询任何地址的选项 - 我只能查询开放地址对象,但不能查询一般地址。

是否有任何(有效的)选项来查询特定的源端口并查看它是否在使用中?

最佳答案

通知未被传送或处理肯定有原因。我会先关注那里。然而,没有来源,这很难确定。

否则,关于 TDI_QUERY_INFORMATION:

使用传入 QType TDI_QUERY_ADDRESS_INFO 的 TdiBuildQueryInformation 宏。 TDI_ADDRESS_INFO 定义传输返回所请求信息的格式。

TDI_ADDRESS_INFO 包含一个 TRANSPORT_ADDRESS,其中包含 1 个或多个 TA_ADDRESS 结构。

每个 TA_ADDRESS 结构指定特定 TDI_ADDRESS_TYPE_XXX 的传输地址。传入一个TA_IP_ADDRESS结构体,类型指定为TDI_ADDRESS_TYPE_IP。

// From Tdi.h or TdiKrnl.h
#define TDI_ADDRESS_TYPE_IP ((USHORT)2) // internetwork: UDP, TCP, etc.

在TA_IP_ADDRESS结构中,有一个TDI_ADDRESS_IP,里面包含了端口。

typedef struct _TA_ADDRESS_IP {
LONG TAAddressCount;
struct _AddrIp {
USHORT AddressLength;
USHORT AddressType;
TDI_ADDRESS_IP Address[1];
} Address[1];
} TA_IP_ADDRESS, *PTA_IP_ADDRESS;

// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

typedef struct _TDI_ADDRESS_IP {
USHORT sin_port;
ULONG in_addr;
UCHAR sin_zero[8];
} TDI_ADDRESS_IP, *PTDI_ADDRESS_IP;

看起来大多数 TDI 功能都已弃用,并将在未来的 Windows 版本中删除。因此,它们会将您指向 Winsock 内核 (WSK) 或 Windows 过滤平台 (WFP)。

Winsock 内核

http://msdn.microsoft.com/en-us/library/windows/hardware/ff571083(v=vs.85).aspx

Windows 过滤平台

http://msdn.microsoft.com/en-us/library/windows/hardware/ff571068(v=vs.85).aspx

希望这对您有所帮助。

关于windows - 如何检查 TDI 过滤器驱动程序是否提供 TCP 端口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22455807/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com