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)システムを使っていると思います。また、これは本物のブルースクリーンのようなものであり、私が知っている唯一の方法はコンピューターを再起動することです。気をつけて楽しんでください!