Bsod 使用HalDisplayString定制死亡蓝屏

Bsod 使用HalDisplayString定制死亡蓝屏,bsod,Bsod,我刚才在网上的某个地方读到,你可以定制BSOD。我不记得在哪里,但我知道这与调用HalDisplayString有关,它将切换到蓝屏并打印消息。我尝试从一个简单的驱动程序调用HalDisplayString,但什么也没发生。我想知道是否有人能给我指出正确的方向。这是给司机的密码 #include "ntddk.h" #include "wdm.h" NTSYSAPI VOID NTAPI HalDisplayString( PCHAR String ); NTSYSAPI VOID NTAPI

我刚才在网上的某个地方读到,你可以定制BSOD。我不记得在哪里,但我知道这与调用HalDisplayString有关,它将切换到蓝屏并打印消息。我尝试从一个简单的驱动程序调用HalDisplayString,但什么也没发生。我想知道是否有人能给我指出正确的方向。这是给司机的密码

#include "ntddk.h"
#include "wdm.h"
NTSYSAPI VOID NTAPI HalDisplayString( PCHAR String );
NTSYSAPI VOID NTAPI NtDisplayString( PCHAR String );
DRIVER_INITIALIZE DriverEntry;
NTSTATUS DriverEntry( 
    __in struct _DRIVER_OBJECT  *DriverObject,
    __in PUNICODE_STRING  RegistryPath 
    )
  {

   HalDisplayString("Hello world!");
return 0;  
}

提前谢谢

您不能使用该功能显示BSOD,它只在启动过程中显示文本,然后出现登录屏幕。这应该会给你一些信息。

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源代码中查找其中的两个),所以调用它们时要小心。您可以使用windows DDK编译此代码,并使用任何旧的驱动程序加载程序加载驱动程序。您可以通过更改颜色功能参数(死亡的绿色屏幕?)来更改背景和文本颜色。我认为他们使用的是IRBG(强度-红-绿-蓝)系统。还请记住,这就像一个真正的蓝屏,我知道如何摆脱它的唯一方法是重新启动计算机,所以要小心,玩得开心

所以这些功能与微软用来创建BSOD的功能相同?是的,但这只是蓝屏的视觉部分。