Ноу Інти, лекція, об'єкти
Анотація: В лекції описані особливості функціонування менеджера об'єктів - одного з ключових компонентів ОС Windows. Об'єкти активно використовуються для організації доступу до ресурсів, які потрібно захищати, іменувати, розділяти і т. Д. Серед сукупності об'єктів виділені об'єкти ядра. Описано дескриптори об'єктів, що відповідають за зв'язок об'єкта з додатком. Розглянуто питання іменування об'єктів і зв'язок простору імен об'єктів з іншими просторами імен. Для управління великим організована спеціальна централізована база даних - реєстр
Для роботи з важливими системними ресурсами ОС Windows створює об'єкти, управління якими здійснює менеджер об'єктів. Коли додаток відкриває файл. створює потік або семафор, воно отримує описатель (handle) відповідного об'єкта (див. рис. 4.1). Наприклад, після виконання програмного оператора
що створює семафор, що повертається описувач hSemaphore необхідний додатком для подальшої роботи з цим семафором.
Мал. 4.1. Створення об'єкта "семафор" додатком
В даному розділі дається короткий опис того, як функціонує менеджер об'єктів. З об'єктами доведеться стикатися протягом усього курсу. Об'єкти - абстрактна концепція, яка активно використовується в ОС Windows для регулювання доступу до системних ресурсів.
Наявність об'єктів є безперечною гідністю системи. По-перше, це єдиний інтерфейс до всіх системних ресурсів і структурам даних, таким, як процеси, потоки, семафори і т.д. Іменування об'єктів і доступ до них здійснюються по одній і тій же схемі. Використання об'єктів дає Microsoft можливість оновлювати функціональність системи, не зачіпаючи програмного інтерфейсу додатків. По-друге, це дуже зручно з точки зору системної безпеки. Кожен об'єкт має список прав доступу, який перевіряється кожен раз, коли додаток створює свій описатель об'єкта. Відповідно, всі перевірки, пов'язані із захистом, можуть бути виконані в одному модулі - диспетчері об'єктів (відповідно до вимог безпеки), з гарантією, що жоден процес не може їх обійти. Нарешті, легко організувати спільний доступ до об'єктів, нескладно відстежити об'єкти, які більше не використовуються, і т.д.
Об'єкти присутні майже в усіх компонентах системи, особливо там, де є дані, які потрібно розділяти, захищати, іменувати або зробити доступними. Наприклад, за допомогою об'єктів реалізовані програмні і апаратні переривання, а також багато інших функцій ядра. Деякі об'єкти доступні для користувача додатків через виклики Win32. Тому іноді ОС Windows називають об'єктно-орієнтованої системою, - так, доступ до ресурсу можливий тільки через методи відповідного об'єкта (інкапсуляція даних). Разом з тим в даній схемі відсутні успадкування і поліморфізм. тому ОС Windows не можна вважати об'єктно-орієнтованої в строгому сенсі цього слова.
об'єкти ядра
Справа в тому, що сукупність об'єктів утворює листкову структуру. Ядро підтримує базові об'єкти двох видів: об'єкти диспетчера (події, м'ютекси. Семафори, потоки ядра, таймери і ін.) І керуючі (DPC. APC. Переривання, процеси, профілі та ін.) Більш детально ці внутріядерні об'єкти описані в [Руссинович] .
Над об'єктами ядра знаходяться об'єкти виконавчої системи, кожен з яких інкапсулює один або більше об'єктів ядра. Об'єкти виконавчої системи призначені для управління пам'яттю, процесами і межпроцессной обміном. Вони експортуються в розпорядження користувача додатків через Win32 функції. До них відносяться такі об'єкти, як: процес, потік. відкритий файл. семафор, м'ютекс. маркер доступу і ряд інших. Повний список можна побачити в MSDN. Ці об'єкти і називаються об'єктами ядра в посібниках з програмування.
Зовнішня відмінність об'єктів ядра (об'єктів виконавчої системи) від об'єктів User і GDI складається в наявності у перших атрибутів захисту, які є одним з параметрів, що створюють об'єкт ядра функцій. Далі ці об'єкти ядра (об'єкти виконавчої системи) будуть називатися просто об'єктами.
Вміст об'єктів є тільки ядру, додаток не може модифікувати його безпосередньо. Доступ до об'єктів можна здійснити тільки через його функції-методи (інкапсуляція даних), які ініціюються викликами деяких бібліотечних Win32-функцій.
Структура об'єкта. методи об'єкта
Мал. 4.2. структура об'єкта
Як показано на рис. 4.2. кожен об'єкт має заголовок з інформацією, загальною для всіх об'єктів, а також дані, специфічні для об'єкта. Наприклад, в поле заголовка є список процесів, які відкрили даний об'єкт. і інформація про захист, яка визначає, хто і як може використовувати об'єкт.
методи об'єкта
До складу компонентів об'єкта типу входить атрибут методи - покажчики на внутрішні процедури для виконання стандартних операцій. Методи викликаються диспетчером об'єктів при створенні і знищенні об'єкта, відкриття і закриття описателя об'єкта, зміні параметрів захисту. Система дозволяє динамічно створювати нові типи об'єктів. У цьому випадку передбачається реєстрація його методів у диспетчера об'єктів. Наприклад, метод open викликається всякий раз, коли створюється або відкривається об'єкт і створюється його новий описувач.
описувачі об'єктів
З 64-х розрядів описателя 29 розрядів використовуються для посилання на блок пам'яті об'єкта ядра, 3 - для прапорів, а що залишилися 32 - в якості маски прав доступу. Маска прав доступу формується на етапі створення чи відкриття об'єкта, коли виконується перевірка дозволів. Таким чином, описувач об'єкта - приналежність процесу, який створив цей об'єкт. За замовчуванням він не може бути переданий іншому процесу. Проте, система надає можливість дублювання описателя і передачі його іншому процесу спеціальним чином (див. Нижче розділ "Спільне використання об'єктів" і частина IV "Безпека").
Мал. 4.3. Об'єкти і їх описатели
Win32-функції, що створюють об'єкт. повертають додатка не сам описатель, а індекс в таблиці описателей, тобто мале число: типу 1,2 а не 64-розрядний (див. рис. 4.3). Згодом це значення передається однією з функцій, яка приймає описатель об'єкта в якості аргументу. Однією з таких функцій є функція CloseHandle. задача якої - закрити об'єкт. Щоб уникнути витоку пам'яті завжди рекомендується закривати об'єкт. якщо в ньому відпала потреба. Втім, після закінчення роботи процесу система закриває всі його об'єкти. Таким чином, структури об'єктів ядра доступні тільки ядру, додаток не може самостійно знайти ці структури в пам'яті і безпосередньо модифікувати їх вміст.
Іменування об'єктів. колективні ресурси
Мал. 4.4. Вікно утиліти winobj