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

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


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

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



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

biosdisk

 
 Функция            Дисковые функции BIOS.
 
 
 
 Синтаксис          #include<bios.h>
 
                    int biosdisk(int cmd, int drive, int head,
 
                     int track, int sector, int nsects, void * buffer);
 
 
 
 Файл, содержащий   bios.h
 
 прототип
 
 
 
 Описание           biosdisk использует  прерывание 0x13 для того,
 
                    чтобы передать   выполнение    дисковых    операций
 
                    непосредственно системе BIOS.
 
 
 
                    drive представляет   собой  число,  которое  задает
 
                    используемый дисковод: 0 для 1-го устройства гибких
 
                    дисков,  1 для 2-го устройства гибких дисков, 3 для
 
                    3-го  устройства  и  т.д.  Для   жестких   дисковых
 
                    устройств   значение   drive   0x80  задает  первый
 
                    дисковод, значение 0x81 - второй дисковод, значение
 
                    0x82 - третий и т.д.
 
 
 
                    Для жестких     дисков    указывается    физическое
 
                    устройство,  а не раздел диска.  При  необходимости
 
                    прикладная  программа  должна  будет самостоятельно
 
                    интерпретировать таблицу разделов.
 
 
 
                    cmd обозначает выполняемую операцию.  В зависимости
 
                    от   значения   cmd   остальные   аргументы   могут
 
                    требоваться или нет.
 
 
 
                    Далее перечислены  возможные   значения   cmd   для
 
                    компьютеров IBM PC,  XT, AT, PS/2 или совместимых с
 
                    ними.
 
 
 
                    0   Аппаратный сброс дискового контроллера. Все
 
                        остальные параметры игнорируются.
 
 
 
                    1   Возвращает статус последней дисковой операции.
 
                        Все остальные параметры игнорируются.
 
 
 
                    2   Считывает в память один или несколько секторов
 
                        диска. Начальный сектор, подлежащий считыванию,
 
                        задается  аргументами  head,  track  и  sector.
 
                        Число  считываемых секторов задается аргументом
 
                        nsects.  Данные считываются  в  buffer  по  512
 
                        байт на сектор.
 
 
 
                    3   Записывает на диск из памяти один  или  более
 
                        дисковых секторов.  Начальный  сектор  задается
 
                        аргументами   head,   track   и  sector.  Число
 
                        секторов определяется аргументом nsects. Данные
 
                        записываются  на  диск из buffer по 512 байт на
 
                        сектор.
 
 
 
                    4   Производит верификацию одного или более
 
                        секторов. Начальный     сектор     определяется
 
                        аргументами head,  track и  sector.  Количество
 
                        секторов задается в nsects.
 
 
 
                    5   Форматирует дорожку. Дорожка определяется
 
                        аргументами head  и  track.   buffer   является
 
                        адресным    указателем   таблицы   дескрипторов
 
                        секторов,   которые   будут   записываться   на
 
                        указанной   дорожке.   Обратитесь  к  документу
 
                        "Техническое справочное руководство по IBM PC",
 
                        в  котором  подробно  описана  данная таблица и
 
                        операция форматирования.
 
 
 
                    Только для  компьютеров  типа  XT,   AT,   PS/2   и
 
                    совместимых  с  ними  разрешены  следующие значения
 
                    аргумента cmd:
 
 
 
                    6   Форматирует дорожку и устанавливает флаги
 
                        плохих секторов.
 
 
 
                    7   Форматирует диск, начиная с заданной дорожки.
 
 
 
                    8   Возвращает параметры текущего дисковода.
 
                        Данная информация  записывается  в   buffer   в
 
                        первые четыре байта.
 
 
 
                    9   Задает характеристики пары устройств.
 
 
 
                   10   Производит удлиненное считывание, когда
 
                        читается 512 байт плюс 4  дополнительных  байта
 
                        на каждый сектор.
 
 
 
                   11   Выполняет удлиненную запись, когда записывается
 
                        512 байт плюс 4 дополнительных байта на  каждый
 
                        сектор.
 
 
 
                   12   Выполняет дисковый  поиск.
 
 
 
                   13   Альтернативный сброс диска.
 
 
 
                   14   Считывает буфер сектора.
 
 
 
                   15   Записывает буфер сектора.
 
 
 
                   16   Проверяет готовность заданного диска.
 
 
 
                   17   Рекалибрует диск.
 
 
 
                   18   Производит диагностику  контроллера RAM.
 
 
 
                   19   Производит диагностику дисковода.
 
 
 
                   20   Производит внутреннюю диагностику контроллера.
 
 
 
                    Примечание. biosdisk работает ниже файловой системы
 
                    - на произвольных секторах, поэтому может разрушить
 
                    содержимое файлов и директорий на жестком диске.
 
 
 
 Возвращаемое       biosdisk возвращает байт состояния, состоящий
 
 значение           из следующих бит:
 
 
 
                    0x00   успешная операция.
 
                    0x01   неверная команда.
 
                    0x02   адресный маркер не найден.
 
                    0x03   попытка записи на диск, защищенный от записи.
 
                    0x04   сектор не найден.
 
                    0x05   неудачный сброс (для жесткого диска).
 
                    0x06   диск изменился после последней операции.
 
                    0x07   сбой параметра активности дисковода.
 
                    0x08   конфликт при работе DMA.
 
                    0x09   попытка обращения к DMA за границей 64К.
 
                    0x0A   обнаружен дефектный сектор.
 
                    0x0B   обнаружена дефектная дорожка.
 
                    0x0C   неподдерживаемая дорожка.
 
                    0x10   ошибка CRC/ECC при чтении диска.
 
                    0x11   ошибка CRC/ECC при корректировке данных.
 
                    0x20   сбой при работе контроллера.
 
                    0x40   сбой при операции поиска.
 
                    0x80   узел подсоединения не отвечает.
 
                    0xAA   устройство не готово (только для жесткого
 
                           диска).
 
                    0xBB   произошла нераспознаваемая ошибка (только
 
                           для жесткого диска).
 
                    0xCC   произошел сбой при записи.
 
                    0xE0   ошибка статуса.
 
                    0xFF   сбой операции распознавания.
 
 
 
                    Заметим, что  код   0x11   не   является   ошибкой,
 
                    поскольку данные являются корректными. Возвращаемое
 
                    значение  выдается  в  любом  случае,  чтобы   дать
 
                    возможность    прикладной    программе   выработать
 
                    решение.
 
 
 
 Переносимость      Данная функция поддерживается только на компьютерах
 
                    IBM PC и совместимых с ними.
 
 
 
 Смотрите также     absread, abswrite.
 
 
 
 Пример:
 
 
 
 #include<bios.h>
 
 #include<stdio.h>
 
 
 
 int main(void)
 
 {
 
    #define CMD     2 /* команда чтения сектора */
 
    #define DRIVE   0 /* номер дисковода для A: */
 
    #define HEAD    0 /* номер головки */
 
    #define TRACK   1 /* номер дорожки */
 
    #define SECT    1 /* номер секторов */
 
    #define NSECT   1 /* число секторов */
 
 
 
    int result;
 
    char buffer[512];
 
    printf("Попытка чтения дисковода A:\n");
 
    result = biosdisk(CMD,DRIVE,HEAD,TRACK,SECT,NSECT,buffer);
 
    if(result==0)
 
       printf("Успешное чтение диска в дисководе A:");
 
    else
 
       printf("Попытка чтения дисковода A: неудача\n");
 
    return 0;
 
 }


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

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




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



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


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