NDIS 5/6中间过滤器驱动程序

时间:2012-01-04 19:44:39

标签: windows driver ndis

背景:我需要创建一个NDIS过滤器中间驱动程序。此驱动程序将在收集元数据(主要是计时信息)时传递所有流量。驱动程序将通过插入包含元数据的自己的数据包并将它们传递到堆栈中,将此信息导出到用户应用程序。

我的问题是关于NDIS版本。最终,我将不得不为Windows XP和7编写驱动程序。但是目前,我将只实现其中一个作为概念/原型的证明。我知道在NDIS 6中,他们将过滤器功能从通用中间驱动程序拆分为单独的驱动程序类型(轻量级过滤器),以简化过滤器驱动程序的创建。 Microsoft在NDK中为NDIS 5和6提供了直通过滤器驱动程序的示例。我一直在查看这些示例,NDIS 6 LWF看起来有点简单(尽管我还是Windows驱动程序开发的新手)。 / p>

所有其他条件相同,最好先支持Win XP(更大的安装基础,更容易访问测试机器等)。但是,如果NDIS 6轻量级过滤器可以实现更快/更容易的开发,我可能最好先实现Win 7驱动程序。

简而言之:根据您的经验,与NDIS 5相比,NDIS 6显着简化了过滤器驱动程序的开发?

感谢您的任何意见。

2 个答案:

答案 0 :(得分:3)

如果您只想修改WDK示例驱动程序,那么NDIS 5 IM可能不是太多工作。我不熟悉NDIS 6 LWF驱动程序,因此无法发表评论。

或者使用用户模式包(例如WinDivertWinPktFilter)来创建概念验证原型。这可能比驱动程序开发更容易。 披露:我撰写了WinDivert

答案 1 :(得分:1)

是的,从实施方面来说,NDIS 6.0过滤器驱动程序比NDIS 5.x IM驱动程序更容易,但并不多。

主要区别在于钩子接口和数据封装:NDIS_PACKET与NET_BUFFER_LIST。但是将它们转换为您的专用网络数据描述符并不困难。您可以使用WDK示例代码(passthru和filter)作为挂钩部分,然后设计内部通用接口来处理IM和LWF驱动程序的专用网络数据描述符。