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;
}
Все эти функции, используемые здесь, недокументированы, и мне пришлось разбираться с ними самостоятельно (и искать 2 из них в исходном коде reactos), так что будьте осторожны при их вызове. Вы можете скомпилировать этот код с помощью Windows DDK и загрузить драйвер с помощью любого старого загрузчика драйверов. Вы можете изменить цвет фона и текста, изменив параметры функции цвета (у кого-нибудь появился зеленый экран смерти?). Я думаю, что они используют систему IRBG (Intensity Red Green Blue). Также помните, что это похоже на настоящий синий экран, и единственный известный мне способ избавиться от него — перезагрузить компьютер, так что будьте осторожны и получайте удовольствие!
person
user37875
schedule
13.08.2009