【问题标题】:Can a NDIS protocol driver (npf.sys of WinPcap) be ported to LWF or WFP?NDIS 协议驱动程序(WinPcap 的 npf.sys)能否移植到 LWF 或 WFP?
【发布时间】:2013-08-07 01:01:55
【问题描述】:

每个人。我正在为 WinPcap 做一些改进。现在我已将 npf.sys 驱动程序从 NDIS5.0 移植到 NDIS6.0。这个驱动是否还有改进空间,比如移植到 LWF(Light-Weight Filter)或 WFP(Windows Filter Platform)?我们只是想确保使用更新更好的框架。

还有一些其他问题:

LWF好像是Vista时代的产品,现在微软很少提及,是真的吗?

LWF 或 WFP 驱动程序可以做 NDIS 协议驱动程序可以做的事情吗?

LWF 或 WFP 是否与 WDF(Windows 驱动程序框架)相关,或者与 WDF 和 WDM 框架兼容?

如果移植可行,难度如何,我之前开发了一些 NDIS 中级驱动程序,LWF 或 WFP 比那更难还是更容易?

谢谢!

【问题讨论】:

    标签: windows driver ndis wfp


    【解决方案1】:

    祝贺您将 WinPcap 移植到 NDIS 6.x。我印象深刻。我希望你能说服上游接受你的改变:-)

    关于 LWF

    微软仍然非常支持 LWF。我们很少谈论它们,仅仅是因为对它们的兴趣有限。大多数人真的想在第 3 层或第 4 层工作,在那里他们得到 WFP 的服务比 LWF 更好。但是,低级别的数据包捕获工具包是 LWF 的优点的完美示例。

    我们很高兴看到人们编写新的 LWF、WFP 标注、NDIS 微型端口或 NDIS 协议。这些都是受支持的当前技术。 (假设微型端口和协议使用 NDIS 6.x)。

    比较 LWF、NDIS 协议和 WFP 标注

    LWF几乎可以做任何 NDIS 协议驱动程序可以做的事情。有一些小的极端情况,但通常你会发现 LWF 很强大。

    WFP 标注在不同的层上运行,因此与 NDIS 协议或 LWF 相比,它们的优势和劣势截然不同。例如,WFP 标注不能与媒体连接状态、硬件卸载或电源管理交互。但与 NDIS LWF 不同的是,WFP 标注可以查看受 IPsec 保护的数据包的明文,查询最初发送数据包的用户/应用程序的身份,拦截环回 IP 流量,并授权创建套接字本身(在任何流量已发送)。

    您应该坐下来问自己:“我真正对网络堆栈的哪一层感兴趣?”如果答案是第 2 层,那么继续使用 NDIS 驱动程序。如果它是 IPv4/6 堆栈的第 3 层或第 4 层,那么您将需要 WFP 标注。 (有些人从 NDIS 驱动程序开始,因为他们最熟悉 NDIS,但后来遇到困难,因为他们实际上是在尝试解决 TCP 层的问题。)

    将 WDF 与 NDIS 或 WFP 结合使用

    WDF 在很大程度上与 NDIS 或 WFP 正交。您可以选择在 NDIS 驱动程序或 WFP 标注中使用 WDF 或 WDM 或两者的混合。 Microsoft、NDIS 团队和我正式鼓励您尽可能多地使用 WDF,因为它可以节省您的时间并使您的驱动程序质量更高。

    通常,如果您的 LWF 或 NDIS 协议只是一个基本的“hello world”驱动程序,WDF 可以正常工作,但不会非常有用。 WDF 对与 NDIS 交互的驱动程序部分没有多大帮助。但是,只要您将 IOCTL 添加到用户模式(或任何其他非 NDIS 技巧),WDF 就可以为您节省大量时间和错误。

    LWF 和 WFP 标注的难度

    我想您会发现 NDIS LWF 和 WFP 标注是一些最容易编写的网络驱动程序。 LWF 比 NDIS 协议驱动程序更容易,并且比 NDIS IM 驱动程序容易很多。一个完整的无操作 LWF 驱动程序只有大约 20 行代码。 WFP 标注并不比 LWF 更难编写。

    【讨论】:

    • 再次感谢您的回复,Jeffrey:) WinPcap主要是一个二层抓包软件,所以我认为可以排除WFP callout(callback)。所以也许 1) NDIS6 协议和 2) NDIS LWF 是我们可以选择的两种替代设计。哪个更好?
    • 我自己的一些疑问:1)虽然LWF驱动比NDIS协议简单一点,但是在我们已经有一个现成的NDIS协议驱动的情况下,一个向 LWF 迁移需要付出更多努力。 2)功能怎么样,我知道LWF可以拒绝NDIS协议不能做的数据包,但这也不是WinPcap关注的,如果有其他功能,如处理LWF可以拥有的环回数据包(ping 127.0.0.1) ? 3)性能怎么样。有人告诉我,NDIS 协议比 NDIS LWF 甚至 NDIS IM 驱动程序效率低?
    • 好吧,如果你有一个有效的 NDIS 协议,那是 100 分支持 NDIS 协议。不过,在架构上,我更喜欢 NDIS LWF。 NDIS LWF 将轻松赢得性能,因为它不会强制使用慢速环回路径来捕获 TX 数据包。 LWF 还可以看到原始的 802.11 数据包(包括探测响应、身份验证帧等),这些是协议无法看到的。
    • “强制使用慢速环回路径捕获 TX 数据包”是什么意思?什么是 TX 数据包?我没有很好地理解它。另外据我所知目前使用的WinPcap可以捕获无线数据包,那么NDIS协议可以看到802.11数据包吗?谢谢
    • TX 是发送路径,也就是出口。 RX 是接收路径,也就是入口。如果一个协议发送一个数据包(TX 路径),NDIS 需要做很多额外的工作才能将该数据包传送到另一个协议的接收路径(RX 路径)。这是慢速环回路径。 (我希望我有一块白板来画这个……)
    猜你喜欢
    • 2021-12-01
    • 2015-09-30
    • 2019-11-24
    • 2011-10-20
    • 2018-11-29
    • 2014-05-25
    • 2016-03-10
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多