分享免费的编程资源和教程

网站首页 > 技术教程 正文

编写NDIS类驱动时如何在LWF、NDIS协议和WFP Callouts中做选择

goqiw 2024-10-03 23:38:09 技术教程 21 ℃ 0 评论

编写NDIS方面的驱动时的常面临选择,到底用那种,有篇文章,对这个问题讲的比较清晰,特录在此。

LWF仍然得到微软支持。不常谈论到它因其应用相对较少。大多数人是想在3层或4层工作,对于他们来说,使用WFP比使用LWF更好。但是,低级数据包捕获是LWF所擅长的。

比较LWF、NDIS协议和WFP Callouts:

LWF可以做几乎任何NDIS协议驱动程序可以做的事情。除了一些小的特殊情况,通常你会发现LWF非常强大。

WFP调用在不同的层上运行,因此其优缺点与NDIS协议或LWF有所不同。例如,WFP调用无法与媒体连接状态、硬件卸载或电源管理进行交互。但与NDIS LWF不同的是,WFP调用可以查看IPsec保护数据包的明文、查询最初发送数据包的用户/应用程序的身份、拦截环回IP流量并授权创建套接字本身(在发送任何流量之前)。

你应该坐下来问问自己:“我真正感兴趣的是网络栈的哪一层?”如果答案是2层,那么就使用NDIS驱动程序。如果是IPv4/6堆栈的3层或4层,那么你需要一个WFP Callouts。(有些人往往因熟悉NDIS驱动而从NDIS驱动程序开始做起,但随后遇到困难,因为他们实际上正在尝试解决TCP层的问题。)

在NDIS或WFP中使用WDF:

WDF与NDIS或WFP大部分是相容的。你可以选择在NDIS驱动程序或WFP调用中使用WDF、WDM或两者混合使用。微软、NDIS团队鼓励你尽可能多地使用WDF,因为它会节省你的时间并使你的驱动程序质量更高。

通常,如果你的LWF或NDIS协议只是一个基本的“hello world”驱动程序,WDF会很好地工作,但不会特别有用。WDF在与NDIS交互的部分并没有太大的帮助。但是,一旦你添加了一个到用户模式的IOCTL(或任何其他非NDIS的技巧),WDF就可以帮你节省很多时间和错误。

LWF和WFP调用的难度:

你会发现,NDIS LWF和WFP Callouts是最容易编写的网络驱动程序。编写LWF比编写NDIS协议驱动程序更容易,比NDIS IM驱动程序更是容易得多。一个完全没有作用的LWF驱动程序只有大约20行代码。编写WFP Callouts与编写LWF差不多一样容易。

最后,附上NDIS接口中各模块之间的层级调用关系图:

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表