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

时间:2013-06-11 06:38:33

标签: c++ driver compatibility winpcap ndis

大家。我正在对数据包捕获库WinPcap进行一些修改。我的老板要我将NDIS版本的WinPcap从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以保持最广泛的兼容性?

2 个答案:

答案 0 :(得分:4)

  

我担心NDIS 6.3不再支持XP,这是真的吗?

如果您的意思是"使用NDIS 6.3的驱动程序将在Windows XP"上运行,答案是" no",并且一直是" no&#34 ;;它不再是"以及#34;

给定版本的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开始"和#34; Windows Vista之前的网络驱动程序";第一部分用于NDIS 6,第二部分用于NDIS 5.(我猜,NDIS 4被认为太旧了,不再需要记录;我不知道NDIS 4和NDIS 5之间的区别是什么,或WinPcap是否仍支持NDIS 4.)

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

  • 制作一个不支持Windows 2000或Windows XP或其服务器版本的WinPcap版本,并且只支持NDIS 6;
  • 为" NT 5"制作单独版本的WinPcap驱动程序和packet.dll库。 (W2K / WXP及其服务器版本)和" NT 6" (Vista,7,8及其服务器版本),将两个版本的packet.dll提供相同的API(例如,使用" NT 5"版本,返回尝试放置界面的失败指示进入监控模式),并使用该API使用wpcap.dll(即" libpcap"部分WinPcap),并让安装程序确定要安装哪一个(这意味着您必须重新安装WinPcap以获得NDIS 6功能,如果您将" 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驱动程序的驱动程序都具有支持Native Wi的NDIS 6驱动程序-Fi(因此没有支持监控模式的NDIS 6驱动程序),甚至那些具有支持Native 802.11的NDIS 6驱动程序也不一定有NDIS 6驱动程序没有bug这使Native 802.11的功能很好。

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

(如果由于某些其他原因而执行此操作,例如添加对PPP设备的支持或修复代码以获取供应商的设备描述,则可能还需要使NDIS 6驱动程序轻量级过滤驱动程序或类似的东西,而不是传输驱动程序。)

答案 1 :(得分:1)

要添加Guy所说的...... XP不能也从未支持NDIS 6,因此您需要创建具有XP兼容性的NDIS 6驱动程序是不可能的。你必须改变要求; Guy的选项都很好(删除XP支持,或维护并行的5.1和6.0驱动程序)。

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