жуть передаватися як потоки, так і повідомлення за допомогою будь-яких типів передач.
Набір клієнтських каналів, з якими працює драйвер пристрою, називається інтерфейсом пристрою або зв'язкою клієнтських каналів.
1.3 драйверного модель WDM
WDM (Windows Driver Model) - нова модель архітектури драйверів, запропонована Microsoft для Windows 2000, хоча ця архітектура розвивалася, починаючи з Windows 3.11, продовжуючи розвиватися і в Windows 98 і Windows NT, але по-справжньому повної вона стала тільки в Windows 2000.
З погляду WDM, існує три типи драйверів:
· Драйвер шини - драйвер, обслуговуючий контролер шини, адаптер, міст або будь-які інші пристрої, що мають дочірні пристрою. Для кожного типу шини в операційній системі є свій драйвер;
· Функціональний драйвер - основний драйвер пристрою, що надає його функціональний інтерфейс. Цей драйвер обов'язковий крім тих випадків, коли введення-виведення здійснюється драйвером шини або драйвером фільтрів шини. Функціональний драйвер за визначенням володіє найбільш повною інформацією про свій пристрій. Зазвичай тільки цей драйвер має доступ до специфічних регістрів пристрою;
· Драйвер фільтра - драйвер, підтримуючий додаткову функціональність пристрою (або існуючого драйвера) або змінює запити введення/виводу і відповіді на них від інших драйверів. Таких драйверів може бути декілька, хоча їх присутність необов'язкова. Вони можуть працювати як на більш високому рівні, ніж функціональний драйвер або драйвер шини, так і на більш низькому.
У середовищі WDM один драйвер не може контролювати всі аспекти пристрої: драйвер шини інформує диспетчера PnP про пристрої, підключених до шини, в той час як функціональний драйвер управляє пристроєм.
. 3.1 драйверного шари
Згідно перерахованим вище типам драйверів, існує три типи
об'єктів: · Об'єкти фізичних пристроїв (PDO, Physical Device Object) - ці об'єкти створюються для кожного фізично ідентифікованого елемента апаратури, підключеного до шини даних;
· Об'єкти функціональних пристроїв (FDO, Functional Device Object) - має на увазі одиницю логічної функціональності пристрою;
· Об'єкти фільтрів пристроїв (FiDO, Filter Device Object) - надають додаткову функціональність.
У Windows NT послідовність завантаження драйверів пристроїв така:
1. Під час завантаження операційної системи проводиться завантаження шинних драйверів для кожної відомої системі шини (список шин створюється при установці операційної системи і зберігається в реєстрі);
2. Викликається DriverEntry, а потім AddDevice для кожного шинного драйвера. У AddDevice створюється FDO для драйвера системної шини. Потім на створений FDO відправляється запит IRP_MN_START_DEVICE;
. Шинний драйвер складає список всіх пристроїв, підключених до шини. Для кожного знайденого пристрою створюється об'єкт PDO;
. На кожен PDO надсилається запит IRP_MN_QUERY_DEVICE_RELATION, у відповідь на який шинний драйвер повертає ідентифікатори всіх знайдених пристроїв;
. На ці PDO надсилають запит IRP_MN_QUERY_ID, у відповідь на який драйвер системної шини повідомляє ідентифікатори цих пристроїв;
. Отримавши ідентифікатори, система намагається знайти і завантажити драйвери пристроїв;
. Знайшовши драйвер для пристроїв, система завантажує його в пам'ять, викликаючи його DriverEntry. Потім викликається AddDevice, де створюється FDO для пристрою. Якщо пристроїв, керованих цим драйвером, декілька, то AddDevice буде викликана для кожного пристрою. Якщо в реєстрі зареєстровані додаткові фільтри, то вони також завантажуються в пам'ять. Потім система посилає на FDO запит IRP_MN_START_DEVICE;
. Відбувається посилка на FDO запиту IRP_MN_QUERY_DEVICE_RELATIONS. Якщо пристрій сам є шиною чи тримає на собі інші пристрої, якими само не керує, то для влаштування на ньому повторюється вся послідовність дій, починаючи з пункту 5.
Функція AddDevice, що викликається для кожного FDO, викликає IoCreateDevice і IoAttachDeviceToStack, забезпечуючи побудова стека пристроїв. Стек пристроїв забезпечує проходження запитів від користувача програм до апаратного (нижнього) рівня драйверів (Рис. 5).
З вищесказаного стає зрозумілим, що розроблюваний драйвер повинен бути драйвером-фільтром нижнього рівня, пов'язаним з клієнтським драйвером USB-накопичувача. Необхідність роботи з клієнтським USB-драйвером пояснюється тим, що саме на цьому рівні перехоплюється інформація володіє необхідною ст...