大家。我正在对WinPcap(一个数据包捕获库)进行一些修改。我的老板要我将WinPcap的NDIS版本从NDIS 4转移到NDIS6。兼容性要求是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来保持最大的兼容性?

最佳答案



如果您的意思是“在Windows XP上使用NDIS 6.3的驱动程序可以运行”,答案为“否”,并且始终为“否”;这不是“更多”的情况。

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是否仍支持NDIS4。)

如果要在WinPcap中支持NDIS 6(例如,在Wi-Fi设备上支持监视器模式),则可以选择以下选项:

  • 制作了一个WinPcap版本,该版本不支持Windows 2000或Windows XP或它们的服务器版本,并且仅支持NDIS 6。
  • 为“NT 5”(W2K / WXP及其服务器版本)和“NT 6”(Vista,7、8及其服务器版本)分别制作WinPcap驱动程序和packet.dll库的单独版本,并给出两种版本的数据包.dll具有相同的API(例如,使用“NT 5”版本,返回尝试将接口(interface)置于监视模式的失败指示),并使用wpcap.dll(即WinPcap的“libpcap”部分) API,并让安装程序确定要安装哪一个(这意味着如果将“NT 5”系统升级到“NT 6”,例如,将Windows XP升级到Windows Vista,则必须重新安装WinPcap才能获得NDIS 6功能。 ,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驱动程序),甚至那些具有支持本机802.11的NDIS 6驱动程序的驱动程序也不一定具有没有使本机802.11正常工作的错误的NDIS 6驱动程序。

    另外,还请注意,本机802.11驱动程序在监视模式下提供的“ radio 信息” header 与pcap和pcap-ng支持的所有现有“ radio 信息” header 不同,您需要请求一个来自[email protected]的“ radio 信息” header 的新LINKTYPE_ / DLT_值。 Wireshark已经有了一个分解器,因为它可以从Microsoft Network Monitor读取802.11捕获。 tcpdump将需要一个。

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

    关于c++ - NDIS版本和Windows版本之间的兼容性问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17037907/

    10-09 06:24