ZippyV,你是对的,也是错的。调用 HalDisplayString 不会导致计算机切换到蓝屏并打印文本,但它会在自定义蓝屏上的初始蓝屏之后打印文本。这是一些代码,一旦被 ddk 编译并作为驱动程序运行,将创建一个蓝屏并使用 HalDisplayString 打印文本。
#include "ntddk.h"
#include "wdm.h"
VOID HalDisplayString(PSZ text);
VOID InbvAcquireDisplayOwnership(VOID);
VOID InbvResetDisplay(VOID);
INT InbvSetTextColor(INT color); //IRBG
VOID InbvDisplayString(PSZ text);
VOID InbvSolidColorFill(ULONG left,ULONG top,ULONG width,ULONG height,ULONG color);
VOID InbvSetScrollRegion(ULONG left,ULONG top,ULONG width,ULONG height);
VOID InbvInstallDisplayStringFilter(ULONG b);
VOID InbvEnableDisplayString(ULONG b);
DRIVER_INITIALIZE DriverEntry;
NTSTATUS DriverEntry(
__in struct _DRIVER_OBJECT *DriverObject,
__in PUNICODE_STRING RegistryPath
)
{
InbvAcquireDisplayOwnership(); //Takes control of screen
InbvResetDisplay(); //Clears screen
InbvSolidColorFill(0,0,639,479,4); //Colors the screen blue
InbvSetTextColor(15); //Sets text color to white
InbvInstallDisplayStringFilter(0); //Not sure but nessecary
InbvEnableDisplayString(1); //Enables printing text to screen
InbvSetScrollRegion(0,0,639,475); //Not sure, would recommend keeping
InbvDisplayString("I print text!\n"); //Prints text
HalDisplayString("And so do I!!!"); //Prints text
return 0;
}
这里使用的所有这些函数都没有记录,我必须自己弄清楚它们(并在 reactos 源代码中查找其中的 2 个),所以调用它们时要小心。您可以使用 windows DDK 编译此代码并使用任何旧的驱动程序加载程序加载驱动程序。您可以通过更改颜色函数参数来更改背景和文本颜色(有人绿屏吗?)。我认为他们使用 IRBG(Intensity Red Green Blue)系统。还要记住这就像一个真正的蓝屏,我知道如何摆脱它的唯一方法是重新启动计算机,所以要小心,玩得开心!