2009-08-12 3 views
5

Ich las vor einiger Zeit irgendwo online, dass Sie eine benutzerdefinierte BSOD machen könnten. Ich weiß nicht mehr wo, aber ich weiß, dass es etwas mit dem Aufruf von HalDisplayString zu tun hatte, das zum Bluescreen wechseln und eine Nachricht drucken würde. Ich habe versucht, HalDisplayString von einem einfachen Treiber aufzurufen, aber nichts passiert. Ich habe mich gefragt, ob mir jemand in die richtige Richtung zeigen könnte. Hier ist der Code für den Treiber.Verwenden von HalDisplayString für benutzerdefinierte Blue Screen des Todes

#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; 
} 

Vielen Dank im Voraus!

Antwort

2

Sie können einen BSOD mit dieser Funktion nicht anzeigen, er zeigt nur Text während des Bootvorgangs an, bevor der Anmeldebildschirm angezeigt wird. Diese link sollte Ihnen einige Informationen geben.

5

ZippyV, Sie hatten Recht, und auch falsch. Der Aufruf von HalDisplayString führt nicht dazu, dass der Computer zu einem Bluescreen wechselt und den Text druckt, aber er druckt Text nach dem anfänglichen Bluescreen auf einem benutzerdefinierten Bluescreen. Hier ist ein Code, der, einmal vom ddk kompiliert und als Treiber ausgeführt wird, einen Bluescreen erstellt und Text mit HalDisplayString druckt.

#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; 
} 

All diese Funktionen hier verwendet werden, ohne Papiere und ich hatte sie selbst herausfinden (und aussehen 2 von ihnen in der reactos Quellcode nach oben) so vorsichtig sein, sie ruft. Sie können diesen Code mit dem Windows-DDK kompilieren und den Treiber mit jedem alten Treiberlader laden. Sie können den Hintergrund und die Textfarbe ändern, indem Sie die Farbfunktionsparameter ändern (grüner Bildschirm des Todes irgendjemand?). Ich denke, dass sie ein IRBG-System (Intensity Red Green Blue) verwenden. Denken Sie auch daran, das ist wie ein echter Bluescreen und der einzige Weg, wie ich es loswerden kann, ist, den Computer neu zu starten, also seien Sie vorsichtig und haben Sie Spaß!

+0

Also sind dies die gleichen Funktionen, die Microsoft verwendet, um einen BSOD zu erstellen? – ZippyV

+0

Ja, aber das ist nur der visuelle Teil des Bluescreen. – user37875

Verwandte Themen