如何调试Windows NDIS驱动?寻求日志与追踪查看指导
NDIS驱动调试:日志与追踪信息查看方案
一、WinDbg NDIS扩展命令深度使用
- 先确认NDIS扩展加载正常:执行
!ndiskd.help,若提示命令不存在,更换与目标系统版本匹配的WinDbg(推荐WinDbg Preview)。 - 关键追踪命令:
!ndiskd.minidriver <驱动地址> -verbose:查看目标微型驱动的详细状态、回调函数注册情况及活动队列,需先用!ndiskd.minidriver列出所有驱动获取地址。!ndiskd.netadapter -pm -stats:查看网卡适配器的电源管理日志与流量统计,定位异常状态。!ndiskd.packet -all:追踪系统中所有NDIS数据包的流转路径,排查丢包或处理异常问题。
二、开启NDIS内核调试日志
- 在目标机注册表中导航到
HKLM\SYSTEM\CurrentControlSet\Services\NDIS\Parameters。 - 添加两个DWORD值:
DebugLevel:设为0xFFFFFFFF(全量调试日志)DebugBufferSize:设为0x400000(4MB缓存,防止日志溢出)
- 重启目标机或重启NDIS服务(
net stop ndis && net start ndis)。 - 在WinDbg中执行
!ndiskd.debuglog读取内核缓存中的NDIS调试日志,包含驱动加载、数据包处理、状态变更等核心信息。
三、ETW事件追踪(Windows 8+适用)
- 启动ETW会话(目标机管理员CMD):
tracelog -start NDISLog -guid #97FAA73A-AB72-4168-BC60-6DC1C0E4B924 -f ndis.etl -level 5 -flags 0xFFFF - 触发调试操作后停止会话:
tracelog -stop NDISLog - 解析日志:
- WinDbg中执行
!wmitrace.logdump ndis.etl直接解析 - 或用
tracerpt ndis.etl -o ndis.log转换为文本格式查看
- WinDbg中执行
四、驱动代码中添加调试输出
- 在驱动代码中使用
NDIS_PRINT_DEBUG_STRING宏(需定义NDIS_DEBUG_LEVEL为NDIS_DEBUG_LEVEL_VERBOSE),或调用DbgPrintEx(DPFLTR_IHVNETWORK_ID, DPFLTR_INFO_LEVEL, "<日志内容>")。 - WinDbg中执行
ed nt!Kd_DEFAULT_Mask 0x80开启网络组件调试输出,再用!dbgprint查看所有内核打印信息。
内容的提问来源于stack exchange,提问作者Ziffusion
相关产品推荐
相关产品推荐

