5

少し前にオンラインでカスタム 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;  
}

前もって感謝します!

4

2 に答える 2

5

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

于 2009-08-13T21:05:19.727 に答える
2

その機能で BSOD を表示することはできません。起動時にログイン画面が表示される前にテキストが表示されるだけです。このリンクは、いくつかの情報を提供するはずです。

于 2009-08-12T19:49:55.297 に答える