Windows驱动程序-哪些方法可用于截取和修改显示器上的像素?

时间:2019-03-17 05:43:35

标签: windows driver

我正在编写Windows软件,该软件需要监视屏幕上是否有闪烁太快的像素,并在将像素显示给用户之前覆盖这些像素(这是用于光敏性癫痫病)。

我最初的方法是record the screen with GDI,然后绘制到始终保持在所有窗口上方最上方的窗口上。这种方法的问题在于,一旦覆盖了闪烁区域,程序就无法再判断该区域是否仍在闪烁,并且需要继续覆盖后续帧,因为它记录了自己的输出 。我一直在使用的解决方法是只记录一个窗口,例如Google Chrome。但是我需要它在整个系统范围内工作,而不是在单个窗口上工作。此外,使用DirectX cannot be recorded this way on Windows 10的窗口。

所以我现在正在考虑使用驱动程序。我已经阅读了有关驱动程序堆栈,IRP和诸如此类的Microsoft文档。基于此,我相信我需要编写一个筛选器驱动程序,但不确定将其放在驱动程序堆栈中的哪个位置。理想情况下,我希望接收像素并输出像素,而不必担心其他任何事情。

我认为虚拟显示适配器可能适用于我要尝试的操作,但是these questions表示这很难做到。

我的问题是

(1)我的驱动程序将如何在外部显示自身?是将输出路由到真正的显示适配器的虚拟显示适配器吗?还是虚拟监视器?

(2)它需要放在驱动程序堆栈中的什么位置?会成为筛选器驱动程序吗?

我发现this article的其中一个部分是关于用于战略屏幕阅读器的策略,该部分称为“显示驱动程序链”,其中编写了一个虚拟显示驱动程序,该程序拦截了GDI功能并将其传递给实际的显示驱动程序。这听起来很接近我想做的事情,除了该策略已用于现已淘汰的XDDM之外,而且我需要对像素进行操作。 WDDM中有等效的策略吗?我在Google上找不到有关显示驱动程序链接的其他信息。

0 个答案:

没有答案