在Windows 8.1中将调试器附加到Services.exe

在Windows 8.1中将调试器附加到Services.exe,windows,debugging,windows-8.1,windbg,Windows,Debugging,Windows 8.1,Windbg,我曾尝试在Windows 8.1中将调试器附加到Services.exe,但始终得到“访问被拒绝”。即使在确保WinDbg以“管理员”身份运行(以提升方式启动)后也是如此 为了测试,我尝试从任务管理器创建一个内存转储文件,但得到了相同的错误 我还尝试从Sysinternals(ProcExp)使用processexplorer创建转储,但得到了相同的错误 上图显示了services.exe所在的进程树(使用procexp查看)。有趣的是,我们可以为wininit.exe和svchost.exe

我曾尝试在Windows 8.1中将调试器附加到Services.exe,但始终得到“访问被拒绝”。即使在确保WinDbg以“管理员”身份运行(以提升方式启动)后也是如此

为了测试,我尝试从任务管理器创建一个内存转储文件,但得到了相同的错误

我还尝试从Sysinternals(ProcExp)使用processexplorer创建转储,但得到了相同的错误

上图显示了services.exe所在的进程树(使用procexp查看)。有趣的是,我们可以为wininit.exe和svchost.exe创建转储文件,但不能为services.exe创建转储文件

我让一些同事在Windows7上进行了测试,效果很好。对于那些在Windows8.1上的人,他们的行为和我的一样


我想知道这是否是Windows8.1的改变。我希望有人能评论一下,是否有一种方法可以让我们将调试器附加到services.exe。

如果您想调试
svchost.exe
-我猜您想调试服务

通常,
svchost.exe
在其中承载多个服务。因此,首先,您应该在单个服务中运行您想要的服务

我已经很多年没有亲自调试服务了。但我记得我使用这些链接寻求帮助:

a

b


如果你还没有看过的话,这些可以帮助你

好的,谢谢大家的贡献和评论。经过进一步研究:事实证明-services.exe在Windows 8.1中是一个受保护的进程,因此它不会直接工作。调试器还必须转换为受保护的进程。一种方法是首先使用内核调试器:


我的问题中显示的所有三个流程的用户名列都是NT AUTHORITY\SYSTEM。即使在非侵入模式下也无法连接WinDBG。您可以尝试使用
psexec-s
作为系统启动。好的,我在Windows8(6.2)中测试了它的工作原理。在8.1(6.3)中,它失败,访问被拒绝。@shiveshsuman-很抱歉,这是我最好的选择,但现在它已被确认并可复制,我将尝试ping defragtools.com上的人。Andrew Richards或Chad Beeder通常反应非常灵敏,知道WinDbg的来龙去脉。我补充了一个答案。经过进一步的研究:这是预期的行为,因为services.exe是一个受保护的进程-调试器也必须转换为受保护的进程(这只能通过编辑调试器进程的EPROCESS块使用涉及内核调试器的变通方法来实现)。我对svchost.exe真的不感兴趣。我对调试某些特定专有服务的启动尝试(启动失败)感兴趣。由于使用gflags的常用“映像文件执行选项”不起作用,我想到将调试器附加到services.exe,然后使用WinDbg中的.childdbg 1自动附加到子处理。在观察到Windows 7和Windows 8.1之间的异常行为,即能够将调试器附加到services.exe,并且在该主题上找不到任何联机资源之后,我想我可以在堆栈溢出上讨论它。请您包含链接文章的相关部分,以便即使链接被删除,此答案仍然有用下来?谢谢。在Windows 8.1+中,修改
EPROCESS
结构的
Protection
字段,如Alex Ionescu的文章所述。例如,将调试器进程保护值更改为0x61将使其成为受WinTcb保护的轻型进程,这与csrss.exe和services.exe相同。