У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент



Дипломна робота - Антивірусні системи
95
– означає що у черзі драйверу немає заблокованих операцій;

нотифікація про створення нового процесу – приходить кожен раз, коли визивається функція NtCreateProcess;

нотифікація про файлову операцію – приходить кожен раз, коли визивається функція NtCreateFile.

3 Перевірка файлів які були передані із нотифікацією. Результатом перевірки можуть бути 2 значення:

об’єкт заражено – в цьому разі доступ до об’єкту блокується(операція повертає помилку);

об’єкт не заражено – операція завершується без помилки.

Мал. 3.3.1 Алгоритм роботи інформаційної системи

3.3.4 Обробка IRPs

IRP - структура даних, що представляє запит на ввід-вивід і здійснюючий контроль за обробкою даного запиту. IRP складається із заголовка і однієї або більше комірок стеку. У даній структурі залежно від типу запиту (вірніше як мінімум від старшого коду IRP_MJ_XXX) зберігаються покажчики на ті або інші структури даних. Для докладного ознайомлення з IRPs див. [lit ref]. Фільтр-драйвер файлових систем для того, щоб мати можливість обробляти за своїм розсудом IRPs, адресовані об'єктам пристроїв файлових систем, повинен вставити свій фільтруючий об'єкт пристрою в стек драйвера файлової системи (підставою даного стека є сам об'єкт пристрою файлової системи, іншу частину стека становлять об'єкти пристроїв, що причепили себе до нього; див. [lit ref]).

Будь-який об'єкт пристрою при одержанні IRP може виконувати наступні дії:*

переслати пакет драйверу, що стоїть нижче за ієрархією, (якщо драйвер існує), при цьому може встановити функцію завершальної обробки (Completion Routine - дана функція буде викликана менеджером вводу-виводу, коли драйвером, що стоїть нижче за ієрархією, буде завершена обробка даного пакета; ця складна тема докладно описана в [7, 9]).*

завершити обробку даного пакета;*

створити новий пакет запиту на ввід-вивід і переслати його драйверу, що стоїть нижче за ієрархією;*

змінити існуючий IRP і переслати його драйверу, що стоїть нижче за ієрархією;

Для фільтра-драйвера файлових систем при обробці багатьох пакетів (наприклад, IRP_MJ_CREATE, IRP_MJ_CLOSE, IRP_MJ_READ, IRP_MJ_WRITE та ін.) дуже важливим є файловий об'єкт (file object - докладний опис можна знайти в [7, 9, 10]). Файловий об'єкт - представлення менеджером вводу/виводу в пам'яті екземпляра відкритого об'єкта (файлу, директорії, пристрою, тому). Файловий об'єкт це ядерний еквівалент хендлу (handle), створеного в результаті успішної операції створення або відкриття. Всі запити на ввод/вивід, адресовані фізичному диску або логічному тому, вимагають файлового об'єкта. Відповідальність по створенню й підтримці файлового об'єкту лежить на менеджері вводу-виводу й драйвері файлової системи рівня ядра. Структура “файловий об'єкт” створюється (і частково заповнюється) менеджером вводу-виводу перед тим, як він відправить запит на відкриття або створення (IRP_MJ_CREATE) драйверу файлової системи. Драйвер файлової системи, одержавши покажчик на файловий об'єкт, обробляє даний запит і у випадку успіху ініціалізує деякі поля файлового об'єкту.[7] Файловий об'єкт використається багатьма функціями фільтра-драйвера для обробки необхідних запитів. Але є пакет запиту на ввід-вивід (старший код IRP_MJ_DEVICE_CONTROL), в центрі якого стоїть не файловий об'єкт, а керуюче повідомлення.

3.3.5 Обробка керуючих повідомлень

Під керуючими повідомленнями мається на увазі IOCTL (I/O Control code - керуючий код вводу-виводу). IOCTL дозволяє звертатися до драйвера з запитами, що відрізняються від операцій читання й запису в пристрій (хоча й вони легко реалізуються через IOCTL запити). Завдяки IOCTL додатки рівня користувача одержують можливість взаємодіяти із драйверами рівня ядра. Користувальницький додаток для того, щоб послати яку-небудь команду драйверу рівня ядра (або фільтру-драйверу), повинен спочатку відкрити об'єкт пристрою, створеного цим драйвером, за допомогою функції Win32 CreateFile [8]. Потім користувальницький додаток за допомогою функції Win32 DeviceIoControl [7, 8, 9] посилає драйверу CTL_CODE (див. Мал. 3.3).

Мал. 3.3 Схема CTL_CODE

CTL_CODE [8] має у своєму складі, крім коду запитуваної операції, додаткове обмеження на мінімальний рівень прав користувача, при якому операційна система передасть запит драйверу, що забезпечує додатковий захист. Крім того, в CTL_CODE вказується тип пристрою, якому посилає запит, і методи передачі буферів (вхідного й вихідного) між додатком користувача й драйвером режиму ядра.

Загальний прапор встановлюється тільки для нових типів пристроїв FILE_DEVICE_XXX при створенні власних повідомлень. Приватний прапор встановлюється при створенні набору власних повідомлень для повідомлень, що входять у цей набір. Тип пристрою відповідає типу пристрою, що був зазначений для даного драйвера у функції створення керуючого об'єкта пристрою IoCreateDevice [7, 9] при ініціалізації драйвера функцією DriverEntry [7, 9]. Код операції визначає запитувану операцію. Рівень прав користувача приймає одне з наступних значень [7, 9]:*

FILE_ANY_ACCESS, диспетчер вводу-виводу посилає IRP від будь-якого користувача що має хендл цільового об'єкта пристрою;*

FILE_READ_DATA, диспетчер вводу-виводу посилає IRP від будь-якого користувача, що має, принаймні, права читання;*

FILE_WRITE_DATA, диспетчер вводу-виводу посилає IRP від будь-якого користувача, що має, принаймні, права запису;*

(FILE_READ_DATA | FILE_WRITE_DATA), диспетчер вводу-виводу посилає IRP від будь-якого користувача, що має права запису й читання. Метод передачі буферів визначається однієї з наступних констант [7, 8, 9]:*

METHOD_BUFFERED, якщо відбувається передача невеликих обсягів інформації. У цьому випадку IRP буде містити покажчик на буфер в користувальницькому просторі й покажчик на буфер у системному просторі;*

METHOD_IN_DIRECT або METHOD_OUT_DIRECT, якщо драйвер по даному запиту зчитує або записує велика кількість інформації із пристрою, використовуючи DMA або PIO, і повинен швидко завершити операцію;*

METHOD_NEITHER, драйвер може одержувати цей запит, тільки виконуючись у контексті потоку, що послали даний запит. Запити користувача драйверу посилає Win32 функція DeviceIoControl [8], що має наступні параметри:*

HANDLE hDevice – описатель об'єкта пристрою, раніше відкритий з допомогою функції CreateFile;*

DWORD dwIoControlCode – CTL_CODE запитуваної операції; * LPVOID lpInBuffer – покажчик на вхідний буфер;*

DWORD nInBufferSize – розмір вхідного буфера;*

LPVOID lpOutBuffer –


Сторінки: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19