大家。我正在为WinPcap做一些改进。现在我已将npf.sys驱动程序从NDIS5.0移植到NDIS6.0。这个驱动程序是否仍有改进空间,例如将其移植到LWF(轻量级过滤器)或WFP(Windows过滤器平台)?我们只是想确保使用更新更好的框架。
以下是其他一些问题:
似乎LWF是Vista时代的产品,现在微软并未提及它,这是真的吗?
LWF或WFP驱动程序可以执行NDIS协议驱动程序可以执行的操作吗?
LWF或WFP是否与WDF(Windows驱动程序框架)有关系,或与WDF和WDM框架兼容?
如果这对端口来说是可行的,那么难度如何,我之前开发了一些NDIS中级驱动程序,LWF或WFP是否比那更难或更容易?
谢谢!
答案 0 :(得分:7)
恭喜您将WinPcap移植到NDIS 6.x.我印象深刻。我希望你能说服上游接受你的改变: - )
微软仍然支持LWF。我们不会谈论它们太多,只是因为对它们的兴趣有限。大多数人真的想在第3层或第4层工作,在那里,世界粮食计划署比LWF更好地服务。但是,低级数据包捕获工具包是LWF有用的完美示例。
我们很高兴看到人们编写新的LWF,WFP标注,NDIS微型端口或NDIS协议。这些都是支持和当前的技术。 (假设NDIS 6.x用于微型端口和协议)。
LWF可以几乎 NDIS协议驱动程序可以执行的任何操作。有一些小角落的情况,但通常你会发现LWF很强大。
WFP标注在不同的层运行,因此具有与NDIS协议或LWF相比不同的优点和缺点。例如,WFP标注无法与媒体连接状态,硬件卸载或电源管理进行交互。但与NDIS LWF不同,WFP标注可以查看受IPsec保护的数据包的明文,查询最初发送数据包的用户/应用程序的身份,拦截环回IP流量,并授权创建套接字本身(在任何之前)交通已发送。)
你应该坐下来问问自己:“我真正感兴趣的网络堆栈的哪一层?”如果答案是第2层,那么继续使用NDIS驱动程序。如果它是IPv4 / 6堆栈的第3层或第4层,那么您将需要WFP标注。 (有些人从NDIS驱动程序开始,因为他们最熟悉NDIS,但后来遇到了困难,因为他们实际上是在尝试解决TCP层的问题。)
通常,如果您的LWF或NDIS协议只是一个基本的“hello world”驱动程序,WDF将正常工作,但不会非常有用。 WDF对与NDIS交互的驱动程序部分没有多大帮助。但是只要将IOCTL添加到用户模式(或任何其他非NDIS技巧),WDF就可以为您节省大量时间和错误。
我认为您会发现NDIS LWF和WFP标注是最容易编写的网络驱动程序。 LWF比NDIS协议驱动程序更容易,并且很多比NDIS IM驱动程序更容易。一个完整的do-nothing LWF驱动程序只有大约20行代码。与LWF相比,WFP标注并不难写。