Драйвера DOS. Визначення драйверів, резидентних в пам'ятi комп'ютера на даному робочому мiстi, страница 2

  По правилам   DOS,    кодова частина   драйвера складається з двох секцiй, що називаються секцiєю стратегiї i секцiєю обробки   переривань. Поля strat_off i   intr_off заголовку мiстять змiщення цих секцiй від початку   драйвера. Стаття   name для символьного влаштування містить iм'я влаштування (можливо, доповнене прогалинами ), а для блокового – перший байт цього поля мiстить кiлькiсть приладiв, що пiдтримуються драйвером.

  За допомогою поля   next, яке   заповнюється системою при завантаженнi драйвера, всi   драйвери ( системнi i встановленнi ) зв'язуються в список. Початок цього списку - заголовок   драйвера   Nul в Cvt. Значення 0xffff в частині змiщення поля   next є ознакою кiнця списку ( також ознака кiнця використовується i в списках, що утворюються iншими керуючими блоками ). Головна програма прикладу ловить цей список.

Частина тексту  програми, яка була змінена для індивідуального завдання:

  . . . . . . . . . . . .  . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

main() {

  int c,s,count,b,d;

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

. . . . . . . . . . . . . . .

  d=0;

  s=0;

  b=0;

. . . . . . . . . . . . . . . . .

    if (drv->attr&0x8000)

       {cout<<"(1)  ";

            count++;}

      else  cout<<"(0)  ";

       textattr(13);

    if (drv->attr&0x8000)

    { for (i=0;i<8; cprintf("%c",drv->name[i++]));

      s++;

      }

    else

     { b++;

      cprintf("блочный - %d",drv->name[0]);

      }

      cprintf("\n\r"); y=0;

    while ((c=getch())==Enter)FlDrv();

    if (c==0) getch();

    drv=drv->next; /* адрес след.драйвера */

    d++;

    cc++;

  }

  textattr(10);

  cprintf("Всего драйверов: %d ",d);

  cprintf("\nСимвольных драйверов - %d",s);

  cprintf("\nБлочных драйвер - %d",b);

  cprintf("\n\r");

  textattr(12+128);

  cprintf("Конец списка.     Нажмите любую клавишу...\n");

  getch();

  textattr(7);

}

Результати:

_______________              Лабораторная работа N12             _______________

_______________             Просмотр списка драйверов.           _______________

       Нажимайте <SpaceBar> ,а для рассмотрения атрибутов <Enter>.

                           Список драйверов устройств :

    1  Адрес -  00C9:0048     атрибуты - 8004(1)  NUL

    2  Адрес -  07F1:0000     атрибуты - D000(1)  IFS$HLP$

    3  Адрес -  0737:0000     атрибуты - C840(1)  DblBuff$

    4  Адрес -  06F1:0000     атрибуты - A000(1)  XMSXXXX0

    5  Адрес -  0288:0000     атрибуты - C053(1)  CON

    6  Адрес -  0254:0000     атрибуты - 8000(1)  SETVERXX

    7  Адрес -  0070:0016     атрибуты - 8013(1)  CON

    8  Адрес -  0070:0028     атрибуты - 8000(1)  AUX

    9  Адрес -  0070:003A     атрибуты - A0C0(1)  PRN

   10  Адрес - 0070:004C     атрибуты - 8008(1)  CLOCK$

   11  Адрес - 0070:005E     атрибуты - 08C2(0)  блочный - 5

   12  Адрес - 0070:006A     атрибуты - 8000(1)  COM1

   13  Адрес - 0070:007C     атрибуты - A0C0(1)  LPT1

   14  Адрес - 0070:008E     атрибуты - A0C0(1)  LPT2

   15  Адрес - 0070:00A0     атрибуты - A0C0(1)  LPT3

   16  Адрес - 0070:012D     атрибуты - C000(1)  CONFIG$

   17  Адрес - 0070:00B8     атрибуты - 8000(1)  COM2

   18  Адрес - 0070:00CA     атрибуты - 8000(1)  COM3

   19  Адрес - 0070:00DC     атрибуты - 8000(1)  COM4

   20  Адрес - 0BDA:0000     атрибуты - C800(1)  mscd$$$$

   21  Адрес - 0BD5:0000     атрибуты - C000(1)  EMMXXXX0

Vsego driverov: 21

                   Simvolnih driverov - 20

                                          Blochnih driverov - 1

Конец списка.     Нажмите любую клавишу...

Висновки: В ході лабораторної роботи я змінив текст початкової програми  для того, щоб подивитися список всіх (блочних і символьних) драйверiв, які в даний час  знаходяться на даній ЕОМ.