【问题标题】:The compatibility issue between NDIS version and Windows versionNDIS版本与Windows版本的兼容性问题
【发布时间】:2013-06-06 22:28:54
【问题描述】:

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

【问题讨论】:

    标签: c++ driver compatibility winpcap ndis


    【解决方案1】:

    补充一下 Guy 所说的... XP 不能也从未支持 NDIS 6,因此您创建与 XP 兼容的 NDIS 6 驱动程序的要求是不可能的。您必须更改要求; Guy 的任何一个选项都不错(放弃 XP 支持,或维护并行 5.1 和 6.0 驱动程序)。

    在架构上,数据包捕获应该在 NDIS 6 LWF 中完成(而不是使用带有环回数据包的协议驱动程序)。我建议从一个干净、空的 LWF(请参阅sample)开始,然后添加来自 WinPcap 的数据包捕获功能。

    【讨论】:

    • 是否有一个 NDIS 版本支持从 XP 到 8 的所有平台?我知道与WDK7.1.0一起发布的NDIS同时支持XP和Win7。我不知道它的 NDIS 版本,也许是 5.1? Win8 是否支持 NDIS 5.1 驱动程序?这是来自 MS 的 WDK7.1.0 链接:microsoft.com/en-us/download/details.aspx?id=11800
    • 是的。它被称为“NDIS 5”。 WinPcap 有一个 NDIS 5 驱动程序,并且支持 W2K 到 8。但是,没有一个 NDIS 版本可以 1) 支持从 XP 到 8 的所有平台和 2) 让希望您使用 NDIS 6 的老板感到高兴。还有,例如,没有 NDIS 版本 1) 支持从 XP 到 8 的所有平台和 2) 支持本机 802.11,因此可以让您在监控模式下捕获。
    【解决方案2】:

    恐怕 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's MSDN documentation on network drivers,您会注意到它有一个“从 Windows Vista 开始的网络驱动程序”部分和一个“Windows Vista 之前的网络驱动程序”部分;第一部分适用于 NDIS 6,第二部分适用于 NDIS 5。(我猜,NDIS 4 被认为太旧,无法再记录;我不知道 NDIS 4 和 NDIS 5 之间的区别是什么,或者WinPcap 是否仍然支持 NDIS 4。)

    如果您想在 WinPcap 中支持 NDIS 6(例如,支持 Wi-Fi 设备上的监控模式),您的选择是:

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

    顺便提一下,如果您的目标是在 NDIS 设备上支持监控模式,则非常强烈建议您实现已经存在的 API监控模式的libpcap,即打开设备的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 的 NDIS 6 驱动程序-Fi(因此没有支持监视器模式的 NDIS 6 驱动程序),甚至那些确实有支持本机 802.11 的 NDIS 6 驱动程序的 NDIS 6 驱动程序也不一定有没有错误的 NDIS 6 驱动程序Native 802.11 的东西运行良好。

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

    (如果您这样做是出于其他原因,例如添加对 PPP 设备的支持或修复代码以获取供应商的设备描述,则可能还需要使 NDIS 6 驱动程序成为轻量级过滤器驱动程序或诸如而不是运输司机。)

    【讨论】:

    • 在支持 Windows 95/98/Me 和 NT 的时候,使用了“并行驱动程序”方案来支持 95/98/Me,因此这种方案有先例。
    • 是否有一个 NDIS 版本支持从 XP 到 8 的所有平台?我知道与WDK7.1.0一起发布的NDIS同时支持XP和Win7。我不知道它的 NDIS 版本,也许是 5.1? Win8 是否支持 NDIS 5.1 驱动程序?这是来自 MS 的 WDK7.1.0 链接:microsoft.com/en-us/download/details.aspx?id=11800
    猜你喜欢
    • 1970-01-01
    • 2020-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2021-08-02
    • 2023-03-31
    相关资源
    最近更新 更多