0x0c0de
30.11.2008, 00:04
[Hello boot screen!]
[System]
Windows XP (SP3,SP2)
[Intro]
Где-то видела статью - не статью, заметку-не заметку про то, что при старте винды на экран можно вывести инфу с помощью функции
VidDisplayStringXY из bootvid.dll. Мне стало интересно, каким образом можно вывести какое-либо изображение. Проникшись этим делом, я написала простенький дров, который как раз-таки выводит на экран при загрузке винды надпись хелло. Возможно, это дело будет кому-то интересно
[Let's go]
Путем недолгих поисков нашла функцию VidSolidColorFill
VOID
VidSolidColorFill(
ULONG x1,
ULONG y1,
ULONG x2,
ULONG y2,
ULONG color
);
Эта функция так же экспортируется bootvid.dll.
Она закрашивает прямоугольную область (x1,y1) - координата левого верхнего угла, (x2,y2) - координата правого нижнего угла. color - цвет. Вообще прямоугольники вещь великая. Нарисуем прямоугольниками HELLO.
Итак, теперь откомментированный код функции... Она показывает надпись hello и 5 раз меняет цвет фона и надписи. Задержка
функцией KeDelayExecutionThread...
Я подписала где начинается какая буква для читабельности. Две буквы L в одном цикле для сокращения размеров кода. Так же как три горизонтальные палочки у буквы E и две вертикальные у H.
// Функция, выводящая надпись HELLO во время загрузки винды. Драйвер должен быть заинсталлен как boot!
// bg_color (color) + c - изменение цвета - так веселее)))
extern "C" VOID SayHello(ULONG x,ULONG y,ULONG color,ULONG bg_color){
int i,c;
LARGE_INTEGER s_time;
s_time.QuadPart = -10000000;
for(c=0;c<6;c++){
//фон
VidSolidColorFill(
0,
0,
800,
600,
bg_color+c
);
// буква Н
for(i=0;i<2;i++){
VidSolidColorFill(
x+i*40,
y,
x+20+i*40,
y+100,
color+c
);
}
VidSolidColorFill(
x+20,
y+40,
x+40,
y+60,
color+c
);
// буква Е
VidSolidColorFill(
x+80,
y,
x+100,
y+100,
color+c
);
for(i=0;i<3;i++){
VidSolidColorFill(
x+100,
y+i*40,
x+120,
y+20+i*40,
color+c
);
}
// две L
for(i=0;i<2;i++){
VidSolidColorFill(
x+160+i*80,
y,
x+180+i*80,
y+100,
color+c
);
VidSolidColorFill(
x+180+i*80,
y+80,
x+220+i*80,
y+100,
color+c
);
}
//O
// две вертикальные палочки
for(i=0;i<2;i++){
VidSolidColorFill(
x+320+i*40,
y,
x+340+i*40,
y+100,
color+c
);
}
//две горизонтальные палочки
for(i=0;i<2;i++){
VidSolidColorFill(
x+340,
y+i*80,
x+360,
y+20+i*80,
color+c
);
//Делаем задержку
KeDelayExecutionThread(KernelMode,FALSE,&s_time);
}
}
}
Вышеприведенный код надо вставить в драйвер и вызвать
SayHello(60,40,9,7);
например так.
в качестве аргументов кодес принимает начальные координаты x и y, цвет надписи и фона.
Итак, что же получилось?
а)до
http://img141.imageshack.us/my.php?image=dopi1.jpg
б)после
http://img136.imageshack.us/my.php?image=hello1lv3.jpg
и
http://img136.imageshack.us/my.php?image=hello2of9.jpg
[Compilation]
Для самостоятельной компиляции драйвера вам конечно потребуется DDK и либа bootvid.lib, для тех кому ее лень искать - положила в архив с сорцами и бинарем по ссылке ниже. Повторяю - драйвер должен быть инсталлирован как BOOT, иначе толку не будет.
Примечание: рекомендуется подобные извращения тестить на эмуляторе, а не на живой машине, что собственно я и делала.
[Download]
http://rapidshare.com/files/168641900/bootgraph.rar.html
(c)november 0x0c0de 2008
[System]
Windows XP (SP3,SP2)
[Intro]
Где-то видела статью - не статью, заметку-не заметку про то, что при старте винды на экран можно вывести инфу с помощью функции
VidDisplayStringXY из bootvid.dll. Мне стало интересно, каким образом можно вывести какое-либо изображение. Проникшись этим делом, я написала простенький дров, который как раз-таки выводит на экран при загрузке винды надпись хелло. Возможно, это дело будет кому-то интересно
[Let's go]
Путем недолгих поисков нашла функцию VidSolidColorFill
VOID
VidSolidColorFill(
ULONG x1,
ULONG y1,
ULONG x2,
ULONG y2,
ULONG color
);
Эта функция так же экспортируется bootvid.dll.
Она закрашивает прямоугольную область (x1,y1) - координата левого верхнего угла, (x2,y2) - координата правого нижнего угла. color - цвет. Вообще прямоугольники вещь великая. Нарисуем прямоугольниками HELLO.
Итак, теперь откомментированный код функции... Она показывает надпись hello и 5 раз меняет цвет фона и надписи. Задержка
функцией KeDelayExecutionThread...
Я подписала где начинается какая буква для читабельности. Две буквы L в одном цикле для сокращения размеров кода. Так же как три горизонтальные палочки у буквы E и две вертикальные у H.
// Функция, выводящая надпись HELLO во время загрузки винды. Драйвер должен быть заинсталлен как boot!
// bg_color (color) + c - изменение цвета - так веселее)))
extern "C" VOID SayHello(ULONG x,ULONG y,ULONG color,ULONG bg_color){
int i,c;
LARGE_INTEGER s_time;
s_time.QuadPart = -10000000;
for(c=0;c<6;c++){
//фон
VidSolidColorFill(
0,
0,
800,
600,
bg_color+c
);
// буква Н
for(i=0;i<2;i++){
VidSolidColorFill(
x+i*40,
y,
x+20+i*40,
y+100,
color+c
);
}
VidSolidColorFill(
x+20,
y+40,
x+40,
y+60,
color+c
);
// буква Е
VidSolidColorFill(
x+80,
y,
x+100,
y+100,
color+c
);
for(i=0;i<3;i++){
VidSolidColorFill(
x+100,
y+i*40,
x+120,
y+20+i*40,
color+c
);
}
// две L
for(i=0;i<2;i++){
VidSolidColorFill(
x+160+i*80,
y,
x+180+i*80,
y+100,
color+c
);
VidSolidColorFill(
x+180+i*80,
y+80,
x+220+i*80,
y+100,
color+c
);
}
//O
// две вертикальные палочки
for(i=0;i<2;i++){
VidSolidColorFill(
x+320+i*40,
y,
x+340+i*40,
y+100,
color+c
);
}
//две горизонтальные палочки
for(i=0;i<2;i++){
VidSolidColorFill(
x+340,
y+i*80,
x+360,
y+20+i*80,
color+c
);
//Делаем задержку
KeDelayExecutionThread(KernelMode,FALSE,&s_time);
}
}
}
Вышеприведенный код надо вставить в драйвер и вызвать
SayHello(60,40,9,7);
например так.
в качестве аргументов кодес принимает начальные координаты x и y, цвет надписи и фона.
Итак, что же получилось?
а)до
http://img141.imageshack.us/my.php?image=dopi1.jpg
б)после
http://img136.imageshack.us/my.php?image=hello1lv3.jpg
и
http://img136.imageshack.us/my.php?image=hello2of9.jpg
[Compilation]
Для самостоятельной компиляции драйвера вам конечно потребуется DDK и либа bootvid.lib, для тех кому ее лень искать - положила в архив с сорцами и бинарем по ссылке ниже. Повторяю - драйвер должен быть инсталлирован как BOOT, иначе толку не будет.
Примечание: рекомендуется подобные извращения тестить на эмуляторе, а не на живой машине, что собственно я и делала.
[Download]
http://rapidshare.com/files/168641900/bootgraph.rar.html
(c)november 0x0c0de 2008