4

每个人。我正在为 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 比那更难还是更容易?

谢谢!

4

1 回答 1

8

恭喜您将 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 或两者的混合。微软、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 更难编写。

于 2013-08-06T22:07:43.037 回答