【问题标题】:How can I check if TCP port is available from TDI filter driver?如何检查 TDI 过滤器驱动程序是否提供 TCP 端口?
【发布时间】:2014-03-17 13:35:43
【问题描述】:

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

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

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

【问题讨论】:

    标签: windows sockets windows-kernel


    【解决方案1】:

    通知没有被传递或处理一定是有原因的。我会先集中在那里。但是如果没有来源,那就很难确定了。

    否则,与 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

    希望这会有所帮助。

    【讨论】:

    • 谢谢。不幸的是,在这个阶段我不能转移到 WFP 或 WSK...关于 TDI_QUERY_ADDRESS_INFO,我可以使用它来查询有关 现有 地址对象的信息,这是我手头没有的东西。不幸的是,我不知道如何使用它来检查可用性。
    猜你喜欢
    • 2012-04-14
    • 2011-01-10
    • 2012-06-09
    • 1970-01-01
    • 2021-11-30
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多