Объекты ядра системы


Дескрипторы объекта ядра - это особый процесс. То есть процесс должен или создать объект, или открыть существующий объект, чтобы получить дескриптор объекта ядра. Ограничение на один процесс дескрипторов ядра - 230.

Любой процесс может создать новый дескриптор существующего объекта ядра (точно такой же, что и созданный другим процессом), при условии, что процесс знает имя объекта и имеет доступ, разрешаемый системой безопасности к объекту. Дескрипторы объекта ядра включают в себя права доступа, указывающие действия, которые можно предоставить или отказать процессу. Приложение определяет права доступа, когда оно создает объект или получает существующий дескриптор объекта. Каждый тип объекта ядра поддерживает свой собственный набор прав доступа. Например, дескрипторы событий могут иметь доступ "установить" или  "ждать" (или оба), дескрипторы файла могут иметь  доступ "читать" или "записывать" (или оба), и так далее. Дополнительную информацию, см. Защищенные Объекты.

В следующей ниже иллюстрации приложение создает объект события. Функция CreateEvent создает объект события и возвращает дескриптор объекта.

Приложение создает объект события

После того, как объект события создан, приложение может использовать дескриптор события, чтобы установить или ждать событию. Дескриптор остается допустимым до тех пор, пока приложение не закроет дескриптор или не завершит работу.

Большинство объектов ядра поддерживает повторяющиеся дескрипторы для единственного объекта. Например, приложение на приведенной выше иллюстрации может получить дополнительные дескрипторы объекта события, используя функцию OpenEvent, как показано в следующей ниже иллюстрации.

Приложение создает объект события с несколькими дескрипторами

Этот метод дает возможность приложению иметь дескрипторы с различными правами доступа. Например, Дескриптор 1, может иметь доступ к событию  "установить" и "ждать", а Дескриптор 2 может иметь только доступ "ждать".

Если еще один процесс знает имя события и имеет доступ, разрешаемый системой обеспечения безопасности к объекту, он может создать свой собственный дескриптор объекта события, используя  функцию OpenEvent. Создающее приложение может также и  продублировать один из его дескрипторов в тот же самый процесс или в другой процесс, используя функцию DuplicateHandle.

Объект остается  в памяти до тех пор, пока по крайней мере существует один дескриптор объекта. В следующей ниже иллюстрации, приложения используют функцию CloseHandle, чтобы закрыть их дескрипторы объекта события. Когда нет никаких дескрипторов события, система удаляет объект из памяти, как показано в следующей ниже иллюстрации.

Приложение закрывает дескрипторы объекта события, чтобы удалить объект из памяти

Система управляет объектами файла несколько по-другому по отношению к другим объектам ядра. Объекты файла содержат указатель позиции в файле - указатель на следующий байт, который читается или пишется в файле. Всякий раз, когда прикладная программа создает новый дескриптор файла, система создает новый объект файла. Поэтому, к единственному файлу на диске может обратиться больше чем один объект файла, как показано на следующей иллюстрации.

Multiple file objects referring to a file on disk

Только благодаря дублированию или наследованию можно обратиться больше, чем к одному дескриптору файла для одного и того же объекта файла, как показано в следующей ниже иллюстрации.

Два дескриптора файла обращаются к оному и тому же объекту файла

Ниже следует таблица, которая перечисляет каждый из объектов ядра, вместе функция создатель и разрушитель каждого объекта. Функция - создатель или создает объект и дескриптор объекта, или создает новый дескриптор существующего объекта. Функция - разрушитель закрывает дескриптор объекта. Когда приложение закрывает последний дескриптор объекта ядра, система удаляет объект из памяти.

Объект ядра Функция - создатель Функция - разрушитель
Маркер доступа (Access token) CreateRestrictedToken, DuplicateToken, DuplicateTokenEx,  OpenProcessToken, OpenThreadToken CloseHandle
Уведомление об изменении (Change notification) FindFirstChangeNotification FindCloseChangeNotification
Коммуникационное устройство (Communications
device)
CreateFile CloseHandle
Консоль ввода данных (Console input) CreateFile , при помощи CONIN$ CloseHandle
Экранный буфер консоли (Console screen buffer) CreateFile , при помощи  CONOUT$ CloseHandle
Рабочий стол (Desktop) GetThreadDesktop Приложение не может удалить этот объект.
Событие (Event) CreateEvent, OpenEvent CloseHandle
Регистрация события (Event log) OpenEventLog, RegisterEventSource, OpenBackupEventLog CloseEventLog
Файл (File) CreateFile CloseHandle, DeleteFile
Отображение файла в память (File mapping) CreateFileMapping, OpenFileMapping CloseHandle
Поиск файла (Find file) FindFirstFile FindClose
Куча (Heap) HeapCreate HeapDestroy
Задание (Job) CreateJobObject CloseHandle
Почтовый ящик (Mailslot) CreateMailslot CloseHandle
Memory resource notification CreateMemoryResourceNotification CloseHandle
Модуль (Module) LoadLibrary, GetModuleHandle FreeLibrary
Мьютекс (Mutex) CreateMutex, OpenMutex CloseHandle
Канал (Pipe) CreateNamedPipe, CreatePipe CloseHandle, DisconnectNamedPipe
Процесс (Process) CreateProcess, OpenProcess, GetCurrentProcess CloseHandleTerminateProcess
Семафор (Semaphore) CreateSemaphoreOpenSemaphore CloseHandle
Сокет (Socket) socket, accept CloseHandle
Поток (Thread) CreateThreadCreateRemoteThreadGetCurrentThread CloseHandle, TerminateThread
Таймер (Timer) CreateWaitableTimerOpenWaitableTimer CloseHandle
Обновление ресурса (Update resource) BeginUpdateResource EndUpdateResource
Оконная станция (Window station) GetProcessWindowStation Приложение не может удалить этот объект.
 
Назад в оглавление темы
На главную страницу темы

Hosted by uCoz