пользователей: 30398
предметов: 12406
вопросов: 234839
Конспект-online
РЕГИСТРАЦИЯ ЭКСКУРСИЯ

Объекты ядра. Определение, назначение, примеры. Понятие описателя и идентификатора. Счетчик пользователей. Создание, защита, закрытие объекта ядра. Копирование описателя.

ОС Windows позволяет создавать и оперировать с несколькими типами объектов ядра, в том числе,
  • маркерами доступа
  • файлами
  • проекциями файлов
  • портами завершения ввода-вывода
  • заданиями
  • почтовыми ящиками
  • мьютексами
  • каналами
  • процессами
  • семафорами
  • потоками
  • ожидаемыми таймерами.
Объекты ядра создаются Windows-функциями.
Каждый объект ядра — на самом деле просто блок памяти, выделенный ядром и доступный только ему.
Этот блок представляет собой структуру данных, в элементах которой содержится информация об объекте.
Некоторые элементы (дескриптор защиты, счетчик числа пользователей и др.) присутствуют во всех объектах, но большая их часть специфична для объектов конкретного типа.
Поскольку структуры объектов ядра доступны только ядру, приложение не может самостоятельно найти эти структуры в памяти и напрямую модифицировать их содержимое. Такое ограничение Microsoft ввела намеренно, чтобы ни одна программа не нарушила целостность структур объектов ядра. Это же ограничение позволяет Microsoft вводить, убирать или изменять элементы структур, не нарушая работы каких-либо приложений.
Приложения оперируют с объектами ядра с помощью Windows-фуекций.
При вызове функции, создающей объект ядра, она возвращает описатель (handle), идентифицирующий созданный объект.
Описатель следует рассматривать как "непрозрачное" значение, которое может быть использовано любым потоком процесса. Этот описатель можно передавать Windows-функциям, сообщая системе, какой объект ядра нас интересует.
Для большей надежности операционной системы Microsoft сделала так, чтобы значения описателей зависели от конкретного процесса. Поэтому, если вы передадите такое значение (с помощью какого-либо механизма межпроцессной связи) потоку другого процесса, любой вызов из того процесса со значением описателя, полученного в данном процессе, даст ошибку.
Win32 API – библиотека функций, предназначенная для управления ОС.
Объекты ядра принадлежат не процессу, а самому ядру, поэтому  каждый объект ядра имеет в своей структуре счетчик пользователей. Когда программа разрушает объект, это не означает, что он будет уничтожен, так как в данный момент может использоваться другой программой. В этом случае счетчик пользователя объектов уменьшается на единицу.
Объекты ядра можно защитить дескриптором защиты, который описывает, кто создал объект и кто имеет права на доступ к нему. Практически все функции создания объектов содержат параметр типа

typedef struct _SECURITY_ATTRIBUTES {
DWORD nLength,
LPVOID lpSecurityDescriptor;
BOOL bInheritHandle;
} SECURITY_ATTRIBUTES;

В Windows 95 lpSecurityDescriptor не поддерживается.
При создании дочернего процесса наследование описателей из родительского процесса выполняется, если установлен bInheritHandle.
 
Закрытие объекта производится вызовом функции

  BOOL CloseHandle(HANDLE hobj);

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

  BOOL DuplicateHandle(
  HANDLE hSourceProcessHandle,
  HANDLE hSourceHandle,
  HANDLE hTargetProcessHandle,
  PHANDLE phTargetHandle,
  DWORD dwDesiredAccess,
  BOOL bInheritHandle,
  DWORD dwOptions);

hSourceProcessHandle, hTargetProcessHandle – описатели процессов;
hSourceHandle – описатель любого объекта ядра;
lpTargetHandle – возвращается описатель скопированного объекта ядра;
dwDesiredAccess – маска доступа к скопированному объекту;
bInheritHandle – флаг наследования;
dwOptions – DUPLICATE_CLOSE_SOURCE или DUPLICATE_SAME_ACCESS:
DUPLICATE_SAME_ACCESS – игнорирует dwDesiredAccess и копирует условия доступа к объекту;
DUPLICATE_CLOSE_SOURCE – после копирования закрывает описатель в процессе источнике.
 

27.12.2015; 15:53
хиты: 1
рейтинг:0
Точные науки
информатика
для добавления комментариев необходимо авторизироваться.
  Copyright © 2013-2024. All Rights Reserved. помощь