|
|
楼主 |
发表于 前天 23:09
来自手机
|
显示全部楼层
本帖最后由 ctx 于 2026-9-25 23:23 编辑
MC魔方哥 发表于 2026-9-25 22:38
对了大佬,关于i217/i218/i219的win7驱动移植给vista,在windbg里又该用什么指令分析并修改不支持的函数呢 ...
在vista桌面环境先用dependency walker查询不支持函数,解决掉它们,然后尝试安装和运行。出现错误代码的话,根据错误代码进行针对性下断分析。例如代码39是IAT没有处理完毕,代码37是DriverEntry失败,代码10是处理IRP_MJ_PNP/IRP_MN_START_DEVICE失败(InitializeHandlerEx回调函数失败)。
windbg动态分析前,如有条件,要拿IDA先分析驱动sys,搞清各去入口函数,更有利于找准调试断点。
建议看一下这里,是自顶向下分析的起始点,参数(如请求的ndis版本号)填不合适肯定先37。
https://learn.microsoft.com/zh-cn/windows-hardware/drivers/ddi/ndis/nf-ndis-ndismregisterminiportdriver
最难分析的是不报错、不蓝屏、功能异常的问题。例如i219驱动移植win7时,第一次遇到的是发包不正常(检验字节填00问题),这就需要从SendNetBufferListsHandler回调函数入手分析,先摸清它的处理逻辑,找到关键位置下断点分析。后来又遇到重新插拔网线速率协商异常问题,通过日志分析+调试,才找出原因加以解决。
再补充一下驱动加载和设备运行的顺序,了解各错误代码可能出现的次序:
1.设备注册表找到服务,加载其sys——IAT不合适代码39,数字签名不合适代码52,服务禁用代码38
2.sys执行DriverEntry——失败代码37或3
3.调用sys的AddDevice——失败代码31
4.发送IRP_MJ_PNP/IRP_MN_FILTER_RESOURCE_REQUIREMENTS——资源分配失败代码12
5.发送IRP_MJ_PNP/IRP_MN_START_DEVICE——启动设备失败代码10
6.发送IRP_MJ_PNP/IRP_MN_QUERY_DEVICE_STATE——反馈失败结果代码43
设备管理器错误代码在DDK和nt5src里都有定义。 |
|