searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

云桌面window系统启动卡死分析

2022-12-12 02:43:55
89
0

分析思路:通过现象重现时抓取系统dmp文件分析卡死原因

dump分析:卡死的时候曾尝试在后台通过发信令给云桌面的一个组件,拉起一个驱动来抓dmp,但信令发送成功了并没有生成dmp,先顺着这条线索去分析,先看看组件拉起驱动为啥失败了。

以下是组件拉起驱动的栈:

接下来可以看看服务端线程在干嘛,这里可以看到是在ROpenSCManagerW里面获取共享锁的时候处于等待状态了,

原来是获取ScServiceRecordLock 共享锁失败,接下来看下这个共享锁被谁占用了,

以下是364号线程,可以看到该线程正在卸载驱动

再看看具体是在卸载什么驱动

接下来看下卸载驱动为啥没返回:

以下是workitem执行的地方

这里应该是clinkac去反注册PspSetCreateProcessNotifyRoutine

这里卡在进程回调里面了,而反注册进程回调的函数又需要等待进程回调函数执行完成。

那么卡死的原因就很清晰了:在进程创建时clinkac回调会发消息给组件查询创建的进程是否要放过,但组件没有回复消息导致clinkac的进程回调一直hang住,这时候组件重启触发了stop clinkac的操作,stop clinkac本身是通过alpc发到services进程里面去执行的,services 在执行stop clinkac的操作时会获取一个同步锁ScServiceRecordLock并占用,然后去执行unloaddriver,clinkac的unload回调里面会去调用PspSetCreateProcessNotifyRoutine卸载进程回调,但此时有线程卡在回调里面,因此PspSetCreateProcessNotifyRoutine无法返回,最终services里面的其它所有线程都无法再获取到ScServiceRecordLock锁,导致services卡死,进而导致系统卡死。

 

0条评论
0 / 1000
刘****军
12文章数
3粉丝数
刘****军
12 文章 | 3 粉丝
原创

云桌面window系统启动卡死分析

2022-12-12 02:43:55
89
0

分析思路:通过现象重现时抓取系统dmp文件分析卡死原因

dump分析:卡死的时候曾尝试在后台通过发信令给云桌面的一个组件,拉起一个驱动来抓dmp,但信令发送成功了并没有生成dmp,先顺着这条线索去分析,先看看组件拉起驱动为啥失败了。

以下是组件拉起驱动的栈:

接下来可以看看服务端线程在干嘛,这里可以看到是在ROpenSCManagerW里面获取共享锁的时候处于等待状态了,

原来是获取ScServiceRecordLock 共享锁失败,接下来看下这个共享锁被谁占用了,

以下是364号线程,可以看到该线程正在卸载驱动

再看看具体是在卸载什么驱动

接下来看下卸载驱动为啥没返回:

以下是workitem执行的地方

这里应该是clinkac去反注册PspSetCreateProcessNotifyRoutine

这里卡在进程回调里面了,而反注册进程回调的函数又需要等待进程回调函数执行完成。

那么卡死的原因就很清晰了:在进程创建时clinkac回调会发消息给组件查询创建的进程是否要放过,但组件没有回复消息导致clinkac的进程回调一直hang住,这时候组件重启触发了stop clinkac的操作,stop clinkac本身是通过alpc发到services进程里面去执行的,services 在执行stop clinkac的操作时会获取一个同步锁ScServiceRecordLock并占用,然后去执行unloaddriver,clinkac的unload回调里面会去调用PspSetCreateProcessNotifyRoutine卸载进程回调,但此时有线程卡在回调里面,因此PspSetCreateProcessNotifyRoutine无法返回,最终services里面的其它所有线程都无法再获取到ScServiceRecordLock锁,导致services卡死,进而导致系统卡死。

 

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
2
1