背景:我需要创建一个NDIS过滤器中间驱动程序。此驱动程序将在收集元数据(主要是计时信息)时传递所有流量。驱动程序将通过插入包含元数据的自己的数据包并将它们向上传递到堆栈来将此信息导出到用户应用程序。
我的问题是关于NDIS版本。最终,我将不得不为Windows XP和Windows 7编写一个驱动程序。然而,目前,我将只实现其中一个作为概念/原型的证明。我知道在NDIS6中,为了简化筛选器驱动程序的创建,他们将筛选器功能从通用中间驱动程序中分离出来,并将其划分为单独的驱动程序类型(轻量级筛选器)。Microsoft在DDK中提供了用于NDIS 5和NDIS 6的直通筛选器驱动程序的示例。我一直在研究这些示例,NDIS 6 LWF看起来只是稍微简单一些(尽管不可否认,我仍然是Windows驱动程序开发的新手)。
在其他条件相同的情况下,最好先支持Win XP (更大的安装基数,更容易访问测试计算机等)。但是,如果NDIS 6轻量级筛选器有助于更快/更容易地进行开发,那么我最好先实现Win 7驱动程序。
简而言之:在您的经验中,与NDIS 5相比,NDIS 6是否显著简化了筛选器驱动程序的开发?
感谢您的任何意见。
发布于 2012-01-12 18:57:54
是的,从实现的角度来看,NDIS 6.0过滤驱动比NDIS 5.x IM驱动更容易,但并不多。
主要区别在于钩子接口和数据封装: NDIS_PACKET与NET_BUFFER_LIST。但将它们转换为您的内网数据描述符并不困难。您可以为钩子部分使用WDK示例代码(passthru和filter),然后设计您的内部公共接口来处理IM和LWF驱动程序的私有网络数据描述符。
发布于 2012-01-06 13:47:37
如果您只想修改WDK示例驱动程序,那么NDIS5IM可能不是太多的工作。我不熟悉NDIS 6 LWF驱动程序,所以无可奉告。
或者,使用诸如WinDivert或WinPktFilter之类的用户模式包来创建概念验证原型。这可能比驱动程序开发更容易。披露:我写了WinDivert
https://stackoverflow.com/questions/8732996
复制相似问题