互联网

Mark Russinovich:给蓝屏换一种颜色

image_thumb38

64位Windows以及32位Windows Vista及更高版本

在这些版本的Windows里,画蓝屏的函数叫KiDisplayBlueScreen。输入“u kidisplaybluescreen”然后一直输入“u”命令显示函数的内存页,直到你找到对InbvSolidColorFill函数的调用为止。 在32位Windows上,你可以按上一节给出的方法来编辑颜色值。在64位系统上,InvbSolidColorFill前的那个指令是传递颜色的指 令,所以复制它的地址并输入“eb <地址>+4”进行编辑。调试器会进入内存编辑模式,然后你就可以修改它的值(比如1是红色,2是绿色):

image_thumb42

查看结果

你现在可以准备让系统蓝屏了。如果你用的是64位系统,那可能已经蓝屏了。这是因为Kernel Patch Protection会发现这些修改,然后使系统蓝屏。这样做可以避免一些第三方软件厂商考虑用修改内核代码的方式实现某些功能。不过,系统最多可能会延迟7分钟才蓝屏。要想随时蓝屏,可以运行Notmyfault工具(你可以从《Windows Internals》的相关页面中下载到),然后按下“Do Bug”按钮(为避免数据丢失,请确保你保存了所有文件并关闭了其它程序):

image_thumb45

然后你就会得到一个自选颜色的蓝屏了,比如我选的红屏:

image_thumb47

节日蓝屏

为了增添节日气氛,我还要生成一个节日主题的蓝屏:不仅要修改背景色,还要修改文字颜色。在64位Windows Vista及更高版本下,找到紧跟InvbSolidColorFill函数调用的InvbSetTextColor,并找到将文字颜色传给该函数的指令 “move ecx, 0Fh”:

image 

0Fh参数表示白色,但你可以用同样的方法改成别的颜色。使用“eb”命令,传入该指令的地址加1。在下图中我设置成了红色(也就是1):

image

这就是我弄出的很有喜庆气氛的蓝屏:

image

节日快乐!


FlowerCode 译自 Mark's Blog
正在生成海报, 请稍候
Mark Russinovich:给蓝屏换一种颜色
2010-12-25
看到不是蓝色的蓝屏还是挺让人震惊的,就连我也一样。就目前TechEd听众的反应来看,我估计你们一会就要去弄出各种颜色的蓝屏向你的朋友炫耀去了。 我 最早在几年前看
长按识别二维码
Techsir.com
[!--page.stats—]
希望看到您的想法,请您发表评论x