Page 84 - 4989
P. 84

Масив  MajorFunctions  заповнюється  адресами  процедур
            обробки  IRP  пакетів.  Процедура,  зареєстрована  під  номером  N,
            обробляє         IRP      пакет      з     кодом       N.     Зазвичай        драйвери
            використовують  не  всі  ці  процедури,  а  реєструють  тільки

            потрібні.  Інші  ж  елементи  масиву  заповнюються  адресою
            процедури,  яка  виконує  передачу  пакета  нижче  по  стеку
            драйверів.

                  Функція  AddDevice  реєструється,  якщо  драйвер  підтримує
            PnP. Один з головних обов'язків AddDevice - це створення об'єкта
            пристрою  FDO  і  якщо  необхідно,  підключення  його  до  стека
            драйверів  пристрою.  Ця  функція  може  створити  кілька  об'єктів

            пристроїв і підключити їх до різних стеків.
                  Процедура  DriverUnload  необхідна  для  того,  щоб  надати
            драйверу  можливість  вивантаження.  Вона  зобов'язана  видалити

            всі  символічні  посилання,  всі  об'єкти  пристроїв,  відключити
            (якщо  потрібно)  переривання  від  об'єктів,  очистити  пам'ять  за
            собою. У PnP драйвери всі ці дії покладені на обробник пакетів

            IRP_MJ_PNP.



                  8.3.4  Стек драйверів клавіатури

                  Фізичний          зв'язок       клавіатури          з     шиною          здійснює
            мікроконтролер клавіатури Intel  8042. На сучасних комп'ютерах
            він  інтегрований  у  чіпсет  материнської  плати.  Даним

            мікроконтролером  управляє  функціональний  драйвер  i8042prt.
            Драйвер  i8042prt  створює  два  безіменних  об'єкти  «пристрій»  і
            підключає  один  до  стека  клавіатури,  а  інший  до  стека  миші.

            Поверх  пристроїв  драйвера  i8042prt  розташовуються  іменовані
            об'єкти  «пристрій»  драйверів  Kbdclass  і  Mouseclass.  Драйвери
            Kbdclass  і  Mouseclass  є  так  званими  драйверами  класу  і
            реалізують загальну функціональність для всіх типів клавіатур і

            мишей, тобто для всього класу цих пристроїв. Обидва ці драйвера
            встановлюються як високорівневі драйвери.
                  У  цій  роботі  необхідно  розглянути  тільки  IRP  типу

            IRP_MJ_READ, які несуть з собою коди клавіш. Генератором цих
            IRP  є  потік  необробленого  вводу  RawInputThread  системного
            процесу  csrcc.exe.  Цей  потік  відкриває  об'єкт  «пристрій»
            драйвера  класу  клавіатури  для  ексклюзивного  використання  і


                                                           84
   79   80   81   82   83   84   85   86   87