使用 ETW 进行输入队列跟踪 Microsoft-Windows-Win32k

使用 ETW 进行输入队列跟踪 Microsoft-Windows-Win32k

当机器繁忙时,我的 UI 会滞后。当我单击 UI 上的不同窗口时,选择没有变化,这表明消息队列被阻塞。经过 20 秒或更长时间后,单击事件才会通过。我可以使用 ETW 跟踪鼠标单击事件,并使用 Win32K ETW 提供程序跟踪阻塞何时消失。

在此处输入图片描述

我苦苦挣扎的是如何证明哪个其他进程阻止了我的 UI 输入队列?许多 Microsoft-Windows-Win32k 事件中是否有包含我需要的数据?

要试用,请安装 Windows Performance Toolkit 并调用

xperf -on proc_thread -start uisession -on Microsoft-Windows-Win32k:0xffffff
xperf -stop -stop uisession && xperf -merge c:\kernel.etl c:\user.etl c:\temp\win32ktrace.etl

我是否需要不同的位掩码和不同的事件?如果需要,需要哪一个?其他 HookTracer 事件来自我自己的工具 ETWController (https://archive.codeplex.com/?p=etwcontroler) 将所有拦截的鼠标和键盘事件追溯到 ETW。除此之外,它还会在每次鼠标单击后捕获屏幕截图,这样我就可以看到 UI 的样子,这对于解决此类问题非常有帮助。

相关内容