NDIS 版本和 Windows 版本之间的兼容性问题
The compatibility issue between NDIS version and Windows version
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 驱动程序(,甚至那些具有支持本机 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 的数据包捕获功能。
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 导入库可以跨dll版本工作吗
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 在clang++预处理器中确定gcc工具链版本
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 不同的Visual Studio版本中缺少.dll
- 用符号版本替换对函数的所有调用
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 正在解码MSVC 32位版本的程序集(作业).没有手术做什么
- 我需要分发哪些版本的可再分发文件
- 各种版本的 Mac OSX 向后兼容性如何?(Xcode C++
- 为什么库API+编译器ABI足以确保具有不同版本gcc的对象之间的兼容性
- python 和 swig 版本兼容性问题
- 功能的向后兼容性和安全版本
- 需要帮助让Fuego在Xcode中编译 - 提高版本兼容性
- 内联如何限制升级版本的二进制兼容性
- NDIS 版本和 Windows 版本之间的兼容性问题
- 不同C/ c++语言版本的ABI兼容性+ GNU扩展
- MySQL客户端库与服务器的版本兼容性