2009-08-12 3 views
5

Je lisais il y a quelque temps quelque part en ligne que vous pourriez faire un BSOD personnalisé. Je ne me souviens pas où mais je sais que ça avait quelque chose à voir avec HalDisplayString qui passerait à l'écran bleu et imprimerait un message. J'ai essayé d'appeler HalDisplayString à partir d'un simple pilote, mais rien ne se passe. Je me demandais si quelqu'un pouvait me diriger dans la bonne direction. Voici le code pour le conducteur.Utilisation de HalDisplayString pour l'écran bleu personnalisé de la mort

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

Merci d'avance!

Répondre

2

Vous ne pouvez pas afficher un BSOD avec cette fonction, il affiche uniquement du texte pendant le démarrage avant que l'écran de connexion n'apparaisse. Ce link devrait vous donner quelques informations.

5

ZippyV, vous aviez raison, et aussi faux. Si vous appelez HalDisplayString, l'ordinateur ne passera pas à l'écran bleu et n'imprimera pas le texte, mais il imprimera du texte après l'écran bleu initial sur un écran bleu personnalisé. Voici un code qui, une fois compilé par le ddk et lancé en tant que pilote, créera un écran bleu et affichera du texte en utilisant 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; 
} 

Toutes ces fonctions utilisées ici sont sans papier et je devais les comprendre moi-même (et regarder deux d'entre eux dans le code source de ReactOS) alors soyez prudent de les appeler. Vous pouvez compiler ce code avec les fenêtres DDK et charger le pilote avec n'importe quel ancien chargeur de pilote. Vous pouvez changer l'arrière-plan et la couleur du texte en changeant les paramètres de la fonction de couleur (écran vert de la mort n'importe qui?). Je pense qu'ils utilisent un système IRBG (Intensity Red Green Blue). Rappelez-vous aussi que c'est comme un véritable écran bleu et que la seule façon de m'en débarrasser est de redémarrer l'ordinateur, alors faites attention et amusez-vous!

+0

Donc, ce sont les mêmes fonctions que Microsoft utilise pour créer un BSOD? – ZippyV

+0

Oui, mais ce n'est que la partie visuelle du bluescreen. – user37875

Questions connexes