无忧启动论坛

标题: 为Windows 7 x64提供WdiWiFi支持 [打印本页]

作者: ctx    时间: 2025-10-29 23:33
标题: 为Windows 7 x64提供WdiWiFi支持
本帖最后由 ctx 于 2025-11-14 22:40 编辑

  一、背景
  众所周知,Intel原生支持Windows7 x64的网卡最高至AC8265,后续的新产品,如AC9000系列、AX系列、BE系列,官方仅提供Windows10/11驱动,未提供Windows 7驱动,导致Windows7无法使用Wi-Fi6无线网卡等新产品。其他厂商情况类似,Realtek情况稍好,提供了支持Windows 7的RTL8832系列。要使新网卡在Windows 7中正常使用,需要加入高版本驱动加载和运行所需的WdiWiFi支持。
  二、原理
  引用
  WLAN设备驱动程序接口(WDI)是适用于Wi-Fi驱动程序的新通用Windows驱动程序模型,同时适用于Windows 10桌面版(家庭版、专业版、企业版和教育版)和Windows 10移动版。
  引用结束
  其核心模块是WdiWiFi.sys。(注:WDI在Windows 10 1507中版本正式发布,现已过时。)
  引用
  WiFiCx是在Windows 11中发布的新Wi-Fi驱动程序模型。我们建议您使用WiFiCx来利用最新功能。WDI驱动程序模型现在处于维护模式,仅接收高优先级修复。
  引用结束
  在Windows 10中,ndis.sys已升级为6.50及以上版本,针对WdiWiFi.sys专门开发了接口函数,通过netio.sys与WdiWiFi.sys互换接口函数(Dispatch函数),实现方式接近于hook。幸运的是,Windows 7的netio.sys足够提供相应支持函数,只需对ndis.sys进行扩展,使其加入hook相关处理;再对WdiWiFi.sys进行处理,使其接受ndis6.20的运行环境,并与Native Wi-Fi模块nwifi.sys协同工作。
  WdiWiFi.sys初期和末期版本都需要KMDF1.15方可运行,厂商Wi-Fi驱动也普遍需要至少KMDF1.15版,所以还需移植KMDF1.15或以上版本。
  KMDF1.15及以上版本,以及部分其他模块,还需WppRecorder.sys方可正常加载,所以还需移植WppRecorder.sys。
  厂商Wi-Fi驱动可能用到Windows7中不存在的API,或者向ndis.sys报告高版本的需求而导致无法注册,还需修改厂商Wi-Fi驱动(多数情况下,修改主要的.sys文件即可,dll扩展模块可改可不改)。
  所有内核模块修改后,还需修正签名。
  综上所述,要使Windows 7使用无线网卡新产品,必须实现以下处理。
  1. 移植Windows 10中的WdiWiFi.sys、KMDF、WppRecorder等内核模块。
  2. 修改Windows 7中的ndis.sys。
  3. 修改基于WDI开发的厂商Wi-Fi驱动。
  三、效果
  本人路由器存在瓶颈,未能发挥出AC9560的全部潜力,至少处于“能用”的水平。
  
  四、除厂商Wi-Fi驱动外的其他模块链接
  ht tps://wwdk.lanzouu.com/i3wMU39nhp7a
  密码: 17bh
  C118F50D-391D-45F4-B3D3-11BC931AA56D
  五、声明
  1. 本帖为原理分析,相关内容和随附二进制文件仅供学习研究之用,请勿用于经济活动。
  2. 实操难度较大,风险也较大,不推荐小白折腾。
  3. 如果要测试,务必备份好重要文件,并打开测试模式(如有证书可自行签名,免于打开测试模式),责任自负。
  4. 不能直接公开提供修改版厂商Wi-Fi驱动,如果对此感兴趣,请对汇编语言、amd64体系和函数调用约定、Windows内核、PE文件结构、NDIS编程等知识深入了解后研讨,此处提供几个思路,后续可能提供一些实例供参考:
  (1)注意DriverEntry对security_cookie的处理,避免失败;
  (2)注意DriverEntry对KMDF版本的需求,如果需求高于当前运行的KMDF,会失败;
  (3)注意调用ndis注册驱动函数时结构体中要求的ndis版本的数据,大于6.20会失败;
  (4)选用低版本Windows 10的厂商Wi-Fi驱动,ntoskrnl.exe/ndis.sys中不存在的函数会比较少,易于处理(函数处理常见方法有替换为相同功能的函数、旧版函数、成功返回、失败返回、nop等,或者加区段进行汇编);
  (5)注意校验和/签名。


作者: zjyangjian    时间: 2025-10-30 00:19
来看大神!厉害
作者: caizhi999999    时间: 2025-10-30 05:33
进来思考一下
作者: 燕飞龙    时间: 2025-10-30 07:46
谢谢分享
作者: it323    时间: 2025-10-30 07:48
感谢分享!
作者: 好好学些    时间: 2025-10-30 08:27
感谢分享!
作者: 肉仔    时间: 2025-10-30 08:29
来看看
作者: 肉仔    时间: 2025-10-30 08:29
真牛啊!
作者: lanlanhu    时间: 2025-10-30 09:07
谢谢大神的无私奉献
作者: wn168cn@163.com    时间: 2025-10-30 09:51
感谢楼主分享
作者: 2012andyle113    时间: 2025-10-30 09:52
有点折腾啊,300M的网卡,照理跑100M应该没有问题啊,测试怎么这么低
作者: ctx    时间: 2025-10-30 10:04
2012andyle113 发表于 2025-10-30 09:52
有点折腾啊,300M的网卡,照理跑100M应该没有问题啊,测试怎么这么低

AC9560不止300的水平,是我那个路由器是十几年前的,无线速率不超过300,上联口又只有100,所以测出这个效果。其他大佬用自己的设备测试,显示连接速率能到2.4Gbps。部分Wi-Fi7设备也能驱动,关键在于厂商驱动是否采用了WDI模型进行开发。
作者: a66    时间: 2025-10-30 10:22
支持折腾!
作者: win98se    时间: 2025-10-30 10:29

感谢分享
作者: hzyry2046    时间: 2025-10-30 11:11
大师nb!!!!!!
作者: ydbddt    时间: 2025-10-30 11:29
感谢分享!
作者: wondaol    时间: 2025-10-30 11:46
对这没有研究,来观摩
作者: wonderfully    时间: 2025-10-30 12:21
感谢分享
作者: fd8526547    时间: 2025-10-30 13:04
学习一下
作者: 进士小站    时间: 2025-10-30 13:19
已经收下了
作者: fegr    时间: 2025-10-30 13:24
感谢楼主分享
作者: guong    时间: 2025-10-30 14:34
来学习下
作者: zyc101    时间: 2025-10-30 15:05
感谢分享!
作者: ebaqiang    时间: 2025-10-30 15:31
大神!厉害
作者: quan2    时间: 2025-10-30 18:04
感谢分享

作者: hushaomin1986    时间: 2025-10-31 04:54
感谢分享!
作者: huacuo    时间: 2025-11-5 09:15
折腾达人。
作者: AMD8848    时间: 2025-11-5 14:21
谢谢分享
作者: xianglang    时间: 2025-11-5 15:27
楼主干脆点,直接给出密码啊。
作者: ctx    时间: 2025-11-5 15:37
xianglang 发表于 2025-11-5 15:27
楼主干脆点,直接给出密码啊。

考虑到东西不太完善,所以加了一些限制,如果想尝试的话私聊吧,但是解决厂商驱动是使设备正常使用的最后一公里。
作者: flank777    时间: 2025-11-9 09:36
不明觉厉膜拜一下
作者: gskj    时间: 2025-11-15 11:38
楼主在Win-Raid论坛上还发布了10代酷睿Q0步进的UHD630驱动与I219(>7)网卡驱动,解决了10代酷睿平台的遗憾。
作者: ctx    时间: 2025-11-15 20:25
gskj 发表于 2025-11-15 11:38
楼主在Win-Raid论坛上还发布了10代酷睿Q0步进的UHD630驱动与I219(>7)网卡驱动,解决了10代酷睿平台的遗憾。

UHD630仅为测试版,很不完善,目前使用的设备未发生蓝屏,不建议在重要设备上使用。I219仅在一个I219-LM (11)上使用,运行尚可,数月下来未发生蓝屏。
作者: ctx    时间: 2025-11-15 20:43
接1楼近期修改,现提供一个简单的例子,介绍如何移植基于WdiWiFi的驱动,欢迎在具备相应基础的前提下讨论。

  XXXXXXX无线网卡有Win7 /Win10驱动,Win10驱动是基于WdiWiFi的。
  一、工具准备
  反编译工具:IDA Pro
  编辑工具:WinHex
  依赖分析工具:Dependency Walker(随Visual Studio安装)
  PE工具:PE.Tools
  调试工具:WinDbg(随VisualStudio安装)
  事件日志工具:tracelog(随VisualStudio安装)
  签名工具
  二、环境准备
  1. 配置环境变量
  变量名称:_NT_SYMBOL_PATH
  值:cache*E:\SYM;SRV*ht[无法发送链接]tp://msdl.microsoft.com/download/symbols
  cache后面的路径是符号文件存储本地的路径,已下载的符号文件,IDA Pro / WinDbg / x64dbg可以自动读取。
  2. 准备证书(如果没有证书,则创建测试签名证书)
  3. 动态调试环境(非必需)
  (1)硬件准备
  有COM口主板的主机2台,一台是调试机(debugger),另一台是被控机(debuggee)。
  准备串口线,debuggee必须为COM接口,debugger可以是COM接口或USB模拟的COM接口。
  (2)debuggee启动选项准备
  bcdedit
  显示当前启动项。
  bcdedit /copy {current} /d "Windows 7DEBUG"
  复制启动项。
  bcdedit /set {xxx} debugtype serial
  bcdedit /set {xxx} debugport 1
  bcdedit /set {xxx} baudrate 115200
  bcdedit /set {xxx} debug yes
  启用内核调试。
  4.debuggee事件日志分析(非必需)
  若动态调试不可行(例如debuggee是笔记本),还可以通过收集事件日志分析问题。
  (随后介绍)
  三、修改与分析
  1. 取得Win10驱动程序包
  版本号2023.56.0502.2017。
  2. 分析Win10驱动程序包
  xxxxxxxxxx.inf 安装信息
  xxxxxxx.sys 内核驱动(IHVdriver)
  xxxxxxxxxx.cat 安全目录
  Xxxxxxx.dll 用户模式WLAN扩展模块(WLANEXT.EXE加载)
  xxxxxxx.txt 未知
  3. inf文件处理
  引用
  [Manufacturer]
  %Xxxxxxx% = Xxxxxxx,NTamd64.10.0
  [ControlFlags]
  ExcludeFromSelect = *
[Xxxxxxx.NTamd64.10.0]
  引用结束
  因此,上述inf只能在Win10下安装。将'NTamd64.10.0'改为'NTamd64.6.1'或'NTamd64'。
  4. IHV driver处理
  (1)导入表(IMPORTS)分析
  通过Dependency Walker可以看到,IHV driver需要的ExGetFirmwareEnvironmentVariable、KeInitializeSpinLock函数在Win7 ntoskrnl.exe中未导出,NdisMDeregisterWdiMiniportDriver、NdisMRegisterWdiMiniportDriver函数在Win7原版ndis.sys中未导出,而“Wdi”导入函数就是IHV driver基于WdiWiFi开发的最主要特征。
  (2)security_cookie处理
  使用IDA载入xxxxxxx.sys。
  真正的DriverEntry位于62BE4处,__security_init_cookie在62BF4处被调用。
  __security_init_cookie函数检查__security_cookie数值,不能为0,也不能为初始值2B992DDFA232h,否则会调用int 29h失败。
  因此,需要在66A019处将jz指令改为nop。定位到66A019处,使用Edit- Patch program - Change byte…,输入90 90,确定。
  查看Edit - Patch program - Patched bytes,可以发现刚才输入的patch已被记录。
  (3)检查KMDF、NDIS版本要求
  KMDF
  在62C7F处,WdfVersionBind被调用,r8参数指向KMDF需求信息。
  在394664处,表明所需的KMDF版本号为1.13。对于Win7而言,只需安装KB2685811即可满足,无需移植Win10的KMDF。
  NDIS
  在3E2A4处,NdisGetVersion被调用,此处可以看到,如果系统中安装的ndis.sys报告的版本号 < 6.50,此函数会返回失败;版本号检查通过后,IHV driver将版本号填入NdisMRegisterWdiMiniportDriver结构体的版本需求成员中。因此,需要将3E2A9处的jb指令改为nop。
  (4)缺失函数处理
  对于KeInitializeSpinLock,在输入表中将函数名称改为RtlRunOnceInitialize,稍后使用WinHex修改。
  对于ExGetFirmwareEnvironmentVariable,只有11F3BF一处调用,将call指令改为向eax赋值C0000001(调用失败)即可。
  对于NdisMDeregisterWdiMiniportDriver、NdisMRegisterWdiMiniportDriver,使用修改后的ndis.sys即可,此处无需处理。
  (5)应用patch
  在IDA中,使用Edit - Patchprogram - Apply patches to input file…,应用patch。
  (6)修改导入函数名称
  在WinHex中,把'ExGetFirmwareEnvironmentVariable'字符串修改为'__chkstk\0',将'KeInitializeSpinLock'字符串修改为'RtlRunOnceInitialize'。
  (7)重新签名
  四、运行测试
  除了WLAN连接外,事件查看器会指示用户模式WLAN扩展模块加载情况。
  本例对应的驱动包:
  ht tps://wwdk.lanzouu.com/ikKKD3b6xg0f
  密码: 2kpp
作者: zjyangjian    时间: 2025-11-16 22:44
感谢大神!膜拜中!!
作者: jinghuanqd    时间: 2025-11-18 11:48
感谢分享
作者: kaixiin0917    时间: 2025-12-2 17:53
ctx 发表于 2025-11-15 20:25
UHD630仅为测试版,很不完善,目前使用的设备未发生蓝屏,不建议在重要设备上使用。I219仅在一个I219-LM  ...

大佬 有支持i219v更高版本的么  我遇到19的 不能驱动 ven_8086&dev_550D&subsys_205f1043
作者: ctx    时间: 2025-12-3 11:35
kaixiin0917 发表于 2025-12-2 17:53
大佬 有支持i219v更高版本的么  我遇到19的 不能驱动 ven_8086&dev_550D&subsys_205f1043

需要下载官方最新的,我记得好像有(27)的,再测试修改。用旧版(支持到17版本)不稳妥,因为驱动里会根据DEV_ID设置一些初始化参数。最近时间不是很多,需要抽空去搞。
作者: kaixiin0917    时间: 2025-12-3 13:43
ctx 发表于 2025-12-3 11:35
需要下载官方最新的,我记得好像有(27)的,再测试修改。用旧版(支持到17版本)不稳妥,因为驱动里会根 ...

好的 等大佬有空的时候研究研究
作者: 蓝星明月    时间: 2025-12-4 22:05
谢谢分享!!!
作者: ctx    时间: 2025-12-8 19:19
kaixiin0917 发表于 2025-12-3 13:43
好的 等大佬有空的时候研究研究

12.19.2.61(2024-5-5版本),可尝试。时间有限,只测试了1台机器的219-LM(11)的100Mbps模式。务必备份好重要文件
ht tps://wwapw.lanzouu.com/i4dFq3d4up7i
密码:h3c7

步骤:
1. 开启测试模式。
2. 将压缩包内WppRecorder.sys复制到C:\Windows\System32\drivers。
3. 设备管理器安装。
作者: kaixiin0917    时间: 2025-12-9 11:21
ctx 发表于 2025-12-8 19:19
12.19.2.61(2024-5-5版本),可尝试。时间有限,只测试了1台机器的219-LM(11)的100Mbps模式。务必备份好 ...

19成功驱动上
作者: ctx    时间: 2025-12-9 19:47
kaixiin0917 发表于 2025-12-9 11:21
19成功驱动上

似乎有一点点bug,网线拔掉重新插,本地连接不能恢复,保持红叉状态;禁用再启用本地连接就能正常。
作者: kaixiin0917    时间: 2025-12-10 13:47
ctx 发表于 2025-12-9 19:47
似乎有一点点bug,网线拔掉重新插,本地连接不能恢复,保持红叉状态;禁用再启用本地连接就能正常。

刚打完驱动 插着网线是红叉 重启下就好了  没拔网线试    挂了一天在线视频 挺稳定的
作者: ctx    时间: 2025-12-10 14:35
kaixiin0917 发表于 2025-12-10 13:47
刚打完驱动 插着网线是红叉 重启下就好了  没拔网线试    挂了一天在线视频 挺稳定的

我也用了2天了,暂时没有出其他问题,那个bug我还需要打磨。从100切换到1G会红叉,100本身插拔一下不会。

作者: ctx    时间: 6 天前
kaixiin0917 发表于 2025-12-10 13:47
刚打完驱动 插着网线是红叉 重启下就好了  没拔网线试    挂了一天在线视频 挺稳定的

htt ps://wwapw.lanzouu.com/iMG5a3e7ppmh
密码:5t81

更新版,在我的(11)上已不存在红叉和速率不正常bug,有需要可更新。
作者: sd631267    时间: 5 天前
学习




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3