Об'єкти ядра системи
Об'єкти ядра системи
Дескриптори об'єкта ядра - це особливий процес. Тобто процес повинен або створити об'єкт, або відкрити існуючий об'єкт, щоб отримати дескриптор об'єкта ядра. Обмеження на один процес дескрипторів ядра - 2 30.
Будь-який процес може створити новий дескриптор існуючого об'єкта ядра (точно такий же, що і створений іншим процесом), за умови, що процес знає ім'я об'єкта і має доступ, дозволяються системою безпеки об'єкта. Дескриптори об'єкта ядра включають в себе права доступу, що вказують дії, які можна надати або відмовити процесу. Додаток визначає права доступу, коли воно створює об'єкт або отримує існуючий дескриптор об'єкта. Кожен тип об'єкта ядра підтримує свій власний набір прав доступу. Наприклад, дескриптори подій можуть мати доступ "встановити" або "чекати" (або обидва), дескриптори файлу можуть мати доступ "читати" або "записувати" (або обидва), і так далі. Додаткову інформацію, див. Захищені Об'єкти.
У наступній нижче ілюстрації додаток створює об'єкт події. Функція CreateEvent створює об'єкт події і повертає дескриптор об'єкта.
Після того, як об'єкт події створений, додаток може використовувати дескриптор події, щоб встановити або чекати події. Дескриптор залишається допустимим до тих пір, поки програма не закриє дескриптор або не від'ôднаôтесь роботу.
Більшість об'єктів ядра підтримує повторювані дескриптори для єдиного об'єкта. Наприклад, додаток на наведеній вище ілюстрації може отримати додаткові дескриптори об'єкта події, використовуючи функцію OpenEvent. як показано в наступній нижче ілюстрації.
Цей метод дає можливість додатком мати дескриптори з різними правами доступу. Наприклад, Дескриптор 1, може мати доступ до події "встановити" і "чекати", а Дескриптор 2 може мати тільки доступ "чекати".
Якщо ще один процес знає ім'я події і має доступ, дозволяються системою забезпечення безпеки об'єкта, він може створити свій власний дескриптор об'єкта події, використовуючи функцію OpenEvent. Створює додаток може також і продублювати один з його дескрипторів в той же самий процес або в інший процес, використовуючи функцію DuplicateHandle.
Об'єкт залишається в пам'яті до тих пір, поки принаймні існує один дескриптор об'єкта. У наступній нижче ілюстрації, додатки використовують функцію CloseHandle. щоб закрити їх дескриптори об'єкта події. Коли немає ніяких дескрипторів події, система видаляє об'єкт з пам'яті, як показано в наступній нижче ілюстрації.
Система управляє об'єктами файлу дещо по-іншому по відношенню до інших об'єктів ядра. Об'єкти файлу містять покажчик позиції в файлі - покажчик на наступний байт, який Новомосковскется або пишеться в файлі. Всякий раз, коли прикладна програма створює новий дескриптор файлу, система створює новий об'єкт файлу. Тому, до єдиного файлу на диску може звернутися більше ніж один об'єкт файлу, як показано на наступній ілюстрації.
Тільки завдяки дублюванню чи спадкоємства можна звернутися більше, ніж до одного дескриптора файлу для одного і того ж об'єкта файлу, як показано в наступній нижче ілюстрації.
Нижче слідує таблиця, яка перераховує кожен з об'єктів ядра, разом функція творець і руйнівник кожного об'єкта. Функція - творець або створює об'єкт і дескриптор об'єкта, або створює новий дескриптор існуючого об'єкта. Функція - руйнівник закриває дескриптор об'єкта. Коли додаток закриває останній дескриптор об'єкта ядра, система видаляє об'єкт з пам'яті.