айлів (*. lib).
Таким чином, Windows підтримують різні типи драйверів пристроїв, але, крім того, існують драйвери, які не є драйверами пристроїв, а просто дозволяють створювати програми, які в Windows будуть працювати в режимі ядра, т.е . на 0 рівні привілеїв. При цьому вони повністю отримують доступ до ОС і встаткування. p align="justify"> Розглянемо найпростіший драйвер режиму ядра.
# include DriverEntry (PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pusRegistryPath) {STATUS_DEVICE_CONFIGURATION_ERROR;
}
Точкою входу є DriverEntry, яка оформлена у вигляді процедури, приймаючої два параметри: - покажчик на об'єкт щойно створеного драйвера. Завантажуючи драйвер, система створює об'єкт "драйвер" (driver object), що представляє для неї образ драйвера в пам'яті. Через цей об'єкт система керує драйвером. Об'єкт "драйвер" представляє собою звичайну структуру даних типу DRIVER_OBJECT. - Покажчик на розділ реєстру, що містить параметри ініціалізації драйвера. p align="justify"> Цей наш перший драйвер тільки завантажується в систему і тут же вивантажується.
Тепер розглянемо програму-шаблон, яку потрібно буде використовувати для розробки програми на першому кроці курсової роботи (драйвер режиму ядра beeper.sys).
Завдання цього драйвера - виконувати на системному динаміці одну ноту до першої октави. Для цього драйвер використовує інструкції процесора in і out, звертаючись до відповідних портів введення-виведення. Загальновідомо, що доступ до портів вводу-виводу - це свято охороняється Windows системний ресурс. Спроба звернення до будь-якого з них, як на введення, так і на висновок, з режиму користувача, неминуче призводить до появи винятку. p align="justify"> У нашому прикладі буде працювати динамік (для цього використовується, зокрема, порт 61h, 0 і 1 біти, порт 43h і 42h).
На початку драйвера визначені всі 12 нот.
Потрібно буде не просто включити динамік, а встановити частоту звуку. Для цього використовується підсистема таймера, яка працює незалежно від процесора і має 3 канали. Вихід каналу 2 пов'язаний з динаміком, який використовується для генерації звуку різної частоти. Чутний діапазон звуку - 30Гц-6000Гц. p align="justify"> Щоб задати частоту звуку, в порт 43h (регістр команд таймера) надсилається керуюче слово 0Bh:
mov al, 0Bh43h, al
Це значення визначає номер каналу, яким ми будемо управляти, тип операції, режим роботи каналу і формат лічильника.
Потім в порт 42h надсилається перерахована частота звуку (1193167/частоту (Гц)) двома порціями (спочатку молодша частина, потім - старша).
Наприклад, ми хочемо отримати частоту звуку в 100Гц. Перераховуємо частоту,
/100 = 11931