му випадку - код помилки.
Функції зворотного виклику для обробки подій
Драйвер KMDF створює ці функції для обробки пов'язаних з об'єктом подій, наприклад, надходження запиту введення/виводу або зміни в стані енергоспоживання, і реєструє їх в інфраструктурі. Інфраструктура надає стандартні обробники для подій, тому драйвер реєструє тільки ті з них, які мають відношення до обслуговуваних їм пристроям. p align="justify"> Наприклад, якщо драйверу необхідно отримувати від програми або компонент системи керуючі запити (IRP з кодом IRP_MJ_CONTROL), він реєструє функції зворотного виклику EvtIoDeviceControl і EvtIoInternalDeviceControl відповідно. Для перехоплення, що йде від пристрою запиту та його обробки, у драйвері-фільтрі призначена функція зворотного виклику KbFilter_Service Callback. p align="justify"> Для вирішення завдання необхідно визначити, яка з функцій драйвера буде відповідати за перетворення вводяться з клавіатури символів.
Функція DriverEntry, що відповідає за завантаження драйвера, викликається тільки один раз при завантаженні системи, тому вона для цієї мети не підходить. Функція EvtDriverDeviceAdd викликається тільки при підключенні нового пристрою, тому вона теж не підходить. Для вирішення завдання необхідно використовувати функцію, що використовується для обробки запитів введення-виведення, тобто одну з функцій зворотного виклику. Так як для перетворення символів необхідно перехоплювати і обробляти запити, що надходять від клавіатури, очевидно, що необхідно скористатися функцією KbFilter_Service Callback. br/>
.4 Алгоритми роботи
Для виконання поставленого завдання реалізований драйвер повинен виконувати наступні дії:
. Включення і виключення режиму розширення клавіатури після натискання заданої клавіші.
Для реалізації даної можливості в драйвері написані функції включення і виключення. Дані функції активуються додатком режиму користувача за допомогою IOCTL запитів. Додаток режиму користувача надає, у свою чергу, зручний інтерфейс користувача для керування роботою драйвера. p align="justify">. Визначення скан коду натиснутої клавіші на клавіатурі і висновок відповідного символу алфавіту з набору символів, асоційованого з даної клавішею.
Так як ми реалізуємо не просто заміну одного символа на інший, а зіставляємо одну клавішу групі символів - нам необхідно реалізувати механізм вибору необхідної літери. Для цього проводиться порівняння поточної натиснутоюклавіші з попередньою. Якщо скан код клавіші не змінився, то ми збільшуємо значення лічильника натискань на 1, на підставі чого згодом зможемо зіставити кількості натискань потрібну літеру зі асоційованого клавіші масиву символів. Висновок вибраного символу проводиться при натисканні клавіші нуль. Ни...