[Hello boot screen!] [System] Windows XP (SP3,SP2) [Intro] Где-то видела статью - не статью, заметку-не заметку про то, что при старте винды на экран можно вывести инфу с помощью функции VidDisplayStringXY из bootvid.dll. Мне стало интересно, каким образом можно вывести какое-либо изображение. Проникшись этим делом, я написала простенький дров, который как раз-таки выводит на экран при загрузке винды надпись хелло. Возможно, это дело будет кому-то интересно [Let's go] Путем недолгих поисков нашла функцию VidSolidColorFill Code: 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. Code: // Функция, выводящая надпись 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); } } } Вышеприведенный код надо вставить в драйвер и вызвать Code: 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
Вот так ~ Code: SC_HANDLE hSCM = OpenSCManager(0,0, SC_MANAGER_ALL_ACCESS); SC_HANDLE hSRV = CreateService(hSCM, имя_сервиса, имя_сервиса,SERVICE_ALL_ACCESS,SERVICE_KERNEL_DRIVER,SERVICE_BOOT_START,SERVICE_ERROR_NORMAL,путь_к_драйверу, 0, 0,0, 0, 0); -----------добавлено------- и еще забыла сказать - дров положите в \windows\system32\drivers\ и заинстальте