Windows - 使用内核驱动程序直接写入视频显示器?

时间:2017-01-18 18:36:11

标签: c video windows-7 driver display

我正在编写Windows 7内核驱动程序。今天,我希望通过显示器输出调试信息。现在我知道我可以使用DbgPrint或KdPrint函数,但我想将我的字符串或任何东西直接输出到我的显示器。这样,我不必启动Debug View来查看我的输出。这也是一种教育活动。

据我了解,我将不得不访问显示器的帧缓冲区并将值写入其中,对吗?但是,我不知道如何做到这一点。基本上,我希望能够直接在显示器上写东西,因此它会重叠窗口显示的任何内容。我知道这可能听起来很奇怪,但它只是为了好玩。

主要目标是从内核驱动程序执行此操作。不在用户空间进程内。请注意,我只想使用640x480分辨率。没有更高的东西。如果我理解正确,任何高于此值的东西都需要我为我当前的视频卡编写自己的显示驱动程序。

我的系统设置: Windows 7 SP1 x86 英特尔奔腾4 @ 3.00Ghz Nvidia GeForce FX 5200

感谢所有人提前帮助!

1 个答案:

答案 0 :(得分:3)

  

现在我知道我可以使用DbgPrint或KdPrint功能,但我想将我的字符串或任何东西直接输出到我的显示器。

你必须通过显示驱动程序。谁说你的电脑运行的窗户都有显示器?

即使有,也不会在RAM中存储MSDOS风格的单帧缓冲区来存储当前图片。现代GPU不再那样工作了 - 相反,操作系统要求他们组成他们交出的单个缓冲区的整个屏幕进行合成 - 简化:每个窗口都是它自己的帧缓冲区,并且GPU的工作就是组成一切整个屏幕图片。

你也不能只是因为你喜欢这样做而从你的内核驱动程序写入某个内存区域 - a)你不知道它会在哪里; b)你要与其他组件竞争,那会是一件坏事。

编辑我觉得我应该为后验加上这个:

  

重点非常简单:编写驱动程序而不是用户界面。这不是司机的工作。将UI功能放入驱动程序是一个坏主意,原因很多,你根本就不应该这样做。