每个人。我正在为 WinPcap 做一些改进。现在我已经将 npf.sys 驱动程序从 NDIS5.0 移植到 NDIS6.0。此驱动程序是否还有改进空间,例如将其移植到 LWF(轻量级过滤器)或 WFP(Windows 过滤器平台)?我们只是想确保使用更新更好的框架。

这里有一些其他问题:

好像LWF是Vista时代的产品,现在微软也没有太多提及,是真的吗?

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

LWF 或 WFP 与 WDF(Windows 驱动程序框架)有关系,还是同时兼容 WDF 和 WDM 框架?

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

谢谢!

最佳答案

恭喜您将 WinPcap 移植到 NDIS 6.x。我很感动。我希望你能说服上游采取你的改变:-)

关于 LWF

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

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

比较 LWF、NDIS 协议(protocol)和 WFP 标注

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

WFP 标注在不同的层运行,因此与 NDIS 协议(protocol)或 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 协议(protocol)只是一个基本的“hello world”驱动程序,则 WDF 可以正常工作,但不会非常有用。 WDF 对与 NDIS 交互的驱动程序部分没有多大帮助。但是一旦您将 IOCTL 添加到用户模式(或任何其他非 NDIS 技巧),WDF 就可以为您节省大量时间和错误。

LWF 和 WFP 标注的难度

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

关于windows - NDIS 协议(protocol)驱动程序(WinPcap 的 npf.sys)可以移植到 LWF 或 WFP 吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18073119/

10-10 17:43