如何在 WlanSvc 中设置断点?

如何在 WlanSvc 中设置断点?

我的 WiFi 总是断线,我用 Synergy 控制我的电脑。我翻遍了事件日志,发现一切都始于 WlanSvcDisconnectRequest(svchost 下运行的 WlanSvc 的一部分)。我相当确信这不是硬件故障。

我已经厌倦了必须重新插入我的 wifi 适配器才能使其重新连接(因为计算机是由 Synergy 控制的,并且没有连接鼠标/键盘),所以我决定尝试调试它,看看我是否能弄清楚是什么实际上每隔几分钟发送一次 WlanSvcDisconnectRequest。

我尽力尝试调试它,但似乎无法设置断点。

我正在使用正确版本的 WinDbg(64 位)并将其作为提升的进程运行。

我打开它,找到运行 WlanSvc 的 svchost 进程,并尝试设置一个断点:

0:013> bc *
0:013> bp wlansvc!WlanSvcDisconnectRequest
0:013> bl
 0 e 00007ff8`6d914ba8     0001 (0001)  0:**** wlansvc!WlanSvcDisconnectRequest
0:013> g
Unable to insert breakpoint 0 at 00007ff8`6d914ba8, Win32 error 0n998
    "Invalid access to memory location."
The breakpoint was set with BP.  If you want breakpoints
to track module load/unload state you must use BU.
bp0 at 00007ff8`6d914ba8 failed
WaitForEvent failed
ntdll!DbgBreakPoint+0x1:
00007ff8`75729921 c3              ret

我还尝试将其设置为未解析的断点:

0:013> bc *
0:013> x wlansvc!WlanSvcDisconnectRequest
00007ff8`6d914ba8 wlansvc!WlanSvcDisconnectRequest = <no type information>
0:013> bu wlansvc!WlanSvcDisconnectRequest
0:013> g
Unable to insert breakpoint 0 at 00007ff8`6d914ba8, Win32 error 0n998
    "Invalid access to memory location."
bp0 at 00007ff8`6d914ba8 failed
WaitForEvent failed
ntdll!DbgBreakPoint+0x1:
00007ff8`75729921 c3              ret

我以前没用过 WinDbg,但谷歌搜索了很多次也没找到答案。为什么我无法设置断点wlansvc!WlanSvcDisconnectRequest


WinDbg 版本:

Microsoft (R) Windows Debugger Version 10.0.14321.1024 AMD64

系统信息:

OS Name:                   Microsoft Windows 10 Pro
OS Version:                10.0.14393 N/A Build 14393
OS Manufacturer:           Microsoft Corporation
OS Configuration:          Standalone Workstation
OS Build Type:             Multiprocessor Free

System Type:               x64-based PC
Processor(s):              1 Processor(s) Installed.
                           [01]: Intel64 Family 6 Model 15 Stepping 2 GenuineIntel ~1867 Mhz

符号路径:

srv*;C:\Symbols\wlansvc.pdb

更新:尝试使用 EMETS 禁用 ASLR,但尝试设置断点没有帮助。

答案1

问题是实际上是存储在部分的wlansvc!WlanSvcDisconnectRequest数据结构。它存储在只读内存中,不包含任何代码。因此创建断点没有任何意义。.rdatawlansvc.dll

您可以通过!address wlansvc!WlanSvcDisconnectRequest命令来验证它。它将报告PAGE_READONLY给定内存区域的页面保护情况。

如果你想在某些代码访问该结构时中断,你需要设置一个数据断点ba r1 wlansvc!WlanSvcDisconnectRequest

或者你可能只是把标准 brakpoint 放到wlansvc!IntfDisconnect函数中,因为这似乎是唯一一个包含wlansvc!WlanSvcDisconnectRequest结构引用的地方(可以使用投资发展协会例如反汇编程序)。

相关内容