Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 мая!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.

Функция Добавляет дополнительные драйверы устройств в таблицу драйверов устройств BGI.

 
 Синтаксис          #include <graphics.h>
 
                    int far installuserdriver(char far *name,
 
                                      int huge(*detect)(void));
 
 
 
 Файл, содержащий   graphics.h
 
 прототип
 
 
 
 Описание           installuserdriver позволяет      вам     добавлять
 
                    дополнительные драйверы во встроенную BGI таблицу.
 
                    Параметр  name  -  это  имя  (.BGI)  файла  нового
 
                    драйвера,  а  параметр  detect  -   указатель   на
 
                    дополнительную  функцию  автоопределения,  которая
 
                    может сопровождать новый драйвер.  Эта функция  не
 
                    берет   никаких   параметров  и  возвращает  целое
 
                    значение.
 
 
 
                    Существует два  способа  использования  драйверов,
 
                    поставляемых продавцами.  Предположим у  вас  есть
 
                    новая видеоплата,   называющаяся   Spiffy  Graphic
 
                    Array (SGA) и производитель этой SGA  обеспечивает
 
                    вас  также BGI-драйвером (SGA.BGI).  Наипростейший
 
                    способ использования драйвера состоит в добавлении
 
                    его с помощью installuserdriver,  а затем передаче
 
                    возвращаемого    значения    (присвоенный    номер
 
                    драйвера) непосредственно в initgraph.
 
 
 
                    Другой, более  общий  способ  использования  этого
 
                    драйвера состоит  во  встраивании  его  в  функцию
 
                    автоопределения,  которая вызывается initgraph как
 
                    часть его драйвероопределяющей  логики  (вероятно,
 
                    производитель    SGA    дал    вам   эту   функцию
 
                    автодетектирования).  Когда вы добавите драйвер  с
 
                    помощью installuserdriver,   вы  передадите  адрес
 
                    этой  функции  вместе  с  именем  файла   драйвера
 
                    устройства.
 
 
 
                    После того  как  вы  добавили имя файла драйвера и
 
                    SGA-функцию   автодетектирования,   вы   вызываете
 
                    initgraph  и  позволяете  ему выполнять нормальный
 
                    процесс   автодетектирования.   Перед   тем    как
 
                    initgraph      вызовет      встроенную     функцию
 
                    автодетектирования(detectgraph),    он     вызовет
 
                    SGA-функцию     автодетектирования.    Если    эта
 
                    SGA-функция не находит  аппаратные  средства  SGA,
 
                    она возвращает значение -11 (grError), а initgraph
 
                    продолжает нормальный процесс  автодетектирования,
 
                    который  может  включать вызов других поставленных
 
                    производителем функций  автодетектирования  в  том
 
                    порядке  в  каком  они  были добавлены).  Если же,
 
                    однако,  функция определит,  что SGA присутствует,
 
                    она возвращает неотрицательный номер режима; затем
 
                    initgraph находит и загружает  SGA.BGI,  переводит
 
                    аппаратные    средства    в   графический   режим,
 
                    рекомендуемый  функцией   автодетектирования,   и,
 
                    наконец, передает управление вашей программе.
 
 
 
                    Одновременно может   быть   добавлено   до  десяти
 
                    драйверов.
 
 
 
 Возвращаемое       Значение возвращаемое   installuserdriver   -  это
 
 значение           номер драйвера,  который вы передадите в initgraph
 
                    для того,  чтобы выбрать вручную вновь добавленный
 
                    драйвер.
 
 
 
 Переносимость      Функция уникальна для  Borland  C++.  Эта  функция
 
                    пригодна   только   для   компьютеров   IBM  PC  и
 
                    совместимых с    ними,    оснащенных   дисплейными
 
                    адаптерами,  поддерживающими  графический   режим.
 
                    Функция не совместима с Windows.
 
 
 
 Смотри также       initgraph, registerbgidriver
 
 
 
 Пример:
 
 
 
 #include<graphics.h>
 
 #include<stdlib.h>
 
 #include<stdio.h>
 
 #include<conio.h>
 
 
 
 /* прототипы функций */
 
 int huge detectEGA(void);
 
 void checkerrors(void);
 
 
 
 int main(void)
 
 {
 
    int gdriver,gmode;
 
    /* инсталлировать драйвер, написанный пользователем */
 
    gdriver = installuserdriver("EGA",detectEGA);
 
    /* инициировать автоопределение */
 
    gdriver = DETECT;
 
    /* проверить на ошибки инсталляции */
 
    checkerrors();
 
    /* инициализация графики и локальных переменных */
 
    initgraph(&gdriver,&gmode,"");
 
    /* проверить на ошибки иннициализации */
 
    checkerrors();
 
    /* нарисовать линию */
 
    line(0,0,getmaxx(),getmaxy());
 
    /* очистка */
 
    getch();
 
    closegraph();
 
    return 0;
 
 }
 
 /* определение платы EGA или VGA */
 
 int huge detectEGA(void)
 
 {
 
    int driver, mode, sugmode = 0;
 
    detectgraph(&driver,&mode);
 
    if((driver == EGA) || (driver == VGA))
 
        /* вернуть предполагаемый номер режима */
 
        return sugmode;
 
    else
 
       /* вернуть код ошибки */
 
       return grError;
 
 }
 
 /* проверка и сообщение о появлении ошибок */
 
 void checkerrors(void)
 
 {
 
    int errorcode;
 
    errorcode = graphresult();
 
    if(errorcode != grOk)
 
    {
 
       printf("Ошибка графики %s\n",grapherrormsg(errorcode));
 
       printf("Для завершения нажмите любую клавишу... ");
 
       getch();
 
       exit(1);
 
    }
 
 }


<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS