我的 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
数据结构。它存储在只读内存中,不包含任何代码。因此创建断点没有任何意义。.rdata
wlansvc.dll
您可以通过!address wlansvc!WlanSvcDisconnectRequest
命令来验证它。它将报告PAGE_READONLY
给定内存区域的页面保护情况。
如果你想在某些代码访问该结构时中断,你需要设置一个数据断点:
ba r1 wlansvc!WlanSvcDisconnectRequest
或者你可能只是把标准 brakpoint 放到wlansvc!IntfDisconnect
函数中,因为这似乎是唯一一个包含wlansvc!WlanSvcDisconnectRequest
结构引用的地方(可以使用投资发展协会例如反汇编程序)。