NDIS 版本和 Windows 版本之间的兼容性问题

The compatibility issue between NDIS version and Windows version

本文关键字:版本 兼容性 问题 Windows NDIS 之间      更新时间:2023-10-16

everyone.我正在对WinPcap进行一些修改,WinPcap是一个数据包捕获库。我的老板希望我将 WinPcap 的 NDIS 版本从 NDIS 4 转移到 NDIS 6。兼容性要求是Windows XP/Vista/7/8(32位和64位(。我发现最新版本的NDIS是6.3,但我担心NDIS6.3不再支持XP,这是真的吗?我还在WinPcap网站上发现,当前的WinPcap 4.1.3已经支持Windows XP/2003/Vista/2008/Win7/2008R2/Win8(x86和x64(。对吗?我应该更新哪个版本的 NDIS 以保持最广泛的兼容性?

恐怕NDIS 6.3不再支持XP,这是真的吗?

如果你的意思是"使用NDIS 6.3的驱动程序可以在Windows XP上运行吗",答案是"否",并且一直是"否";这不是"不再"的情况。

给定版本的 Windows 支持给定版本的 NDIS(而不是相反(。 "NT 5.x",即Windows 2000,Windows XP及其服务器等效产品,支持NDIS 5;NDIS 6 驱动程序(甚至 NDIS 6.0(不适用于这些版本的 Windows。 NDIS 6 驱动程序需要"NT 6.x",即 Windows Vista 及更高版本。

如果您查看Microsoft关于网络驱动程序的 MSDN 文档,您会注意到它有一个部分是"从 Windows Vista 开始的网络驱动程序"和一个"Windows Vista 之前的网络驱动程序"部分;第一部分是 NDIS 6,第二部分是 NDIS 5。 (我猜,NDIS 4 被认为太旧了,懒得再记录了;我不知道 NDIS 4 和 NDIS 5 之间的区别是什么,或者 WinPcap 是否仍然支持 NDIS 4。

如果要在 WinPcap 中支持 NDIS 6(例如,在 Wi-Fi 设备上支持 Monitor 模式(,可以选择:

  • 制作不支持 Windows 2000 或 Windows XP 或其服务器版本的 WinPcap 版本,并且仅支持 NDIS 6;
  • 为"NT 5"(W2K/WXP 及其服务器版本(和"NT 6"(Vista、7、8 及其服务器版本(制作不同版本的 WinPcap 驱动程序和数据包.dll库,为两个版本的数据包.dll提供相同的 API(例如,使用"NT 5"版本,返回尝试将接口置于监控模式的失败指示(, 并使用该 API .dll wpcap(即 WinPcap 的"libpcap"部分(,并让安装程序确定要安装哪个(这意味着您必须重新安装 WinPcap 才能获得 NDIS 6 功能,如果您将"NT 5"系统升级到"NT 6",例如将 Windows XP 升级到 Windows Vista、7 或 8(,或者在加载驱动程序时以某种方式运行正确的驱动程序代码, 如果可能的话。

请注意,顺便说一下,如果您的目标是在 NDIS 设备上支持监视模式,强烈建议您实现 libpcap 中已经存在的用于监视模式的 API,即用于打开设备的 pcap_create()/pcap_activate() API,用于请求监视模式的pcap_set_rfmon() API,以及用于检查是否可以打开监视模式的pcap_can_set_rfmon() API, 因为这些API是tcpdump和Wireshark等程序所期望的。

另请注意,pcap_create()/pcap_activate() API 当前不处理远程数据包捕获,因此您要么必须摆脱该功能,要么等待我(或某人(将这些功能添加到这些 API。

另请注意,据报道,虽然 NDIS 6 具有支持监视模式的 API,但并非所有 Wi-Fi 设备都有 NDIS 6 驱动程序,并非所有具有 NDIS 6 驱动程序的设备都具有支持本机 Wi-Fi 的 NDIS 6 驱动程序

(因此没有支持监视模式的 NDIS 6 驱动程序(,甚至那些具有支持本机 802.11 的 NDIS 6 驱动程序也不一定具有免费的 NDIS 6 驱动程序使本机 802.11 内容运行良好的错误。

此外,还要注意,监视器模式下本机 802.11 驱动程序提供的"无线电信息"标头与 pcap 和 pcap-ng 支持的所有现有"无线电信息"标头不同,您需要从 tcpdump-workers@lists.tcpdump.org 请求该"无线电信息"标头的新 LINKTYPE_/DLT_值。 Wireshark已经有一个剖析器,因为它可以从网络监视器读取802.11捕获Microsoft;tcpdump 需要一个。

(如果出于其他原因执行此操作,例如添加对 PPP 设备的支持或修复代码以获取供应商的设备说明,则可能还需要使 NDIS 6 驱动程序成为轻型筛选器驱动程序或类似的东西,而不是传输驱动程序。

补充一下盖伊说的话... XP 不能也从未支持 NDIS 6,因此创建具有 XP 兼容性的 NDIS 6 驱动程序的要求是不可能的要求。 您必须更改要求;Guy 的任何一种选择都很好(放弃 XP 支持,或维护并行的 5.1 和 6.0 驱动程序(。

从体系结构上讲,数据包捕获应在 NDIS 6 LWF 中完成 (而不是使用带有环回数据包的协议驱动程序( 。 我建议从一个干净的、空的 LWF 开始(参见示例(,并添加来自 WinPcap 的数据包捕获功能。