Дублирование дескрипторов

Дублирование дескрипторов

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

BOOL DuplicateHandle(HANDLE hSourceProcessHandle, HANDLE hSourceHandle, HANDLE hTargetProcessHandle, LPHANDLE lphTargetHandle, DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwOptions) 

По завершении выполнения функции указатель lphTargetHandle будет указывать на копию исходного дескриптора, hSourceHandle. hSourceHandle является дескриптором дублируемого объекта в процессе, указанном дескриптором hSourceProcessHandle, и должен иметь права доступа PROCESS_DUP_HANDLE; если указанного дескриптора в исходном процессе не существует, функция DuplicateHandle завершается ошибкой. Новый дескриптор, на который указывает указатель lphTargetHandle, является действительным в целевом процессе, hTargetProcessHandle. Обратите внимание на то, что в нашем рассмотрении фигурировали три процесса, включая вызывающий. Часто в роли вызывающего процесса выступает целевой или исходный процесс, и тогда соответствующий дескриптор получают с помощью функции GetCurrentProcess. Заметьте также, что процесс может создать дескриптор в другом процессе; если вы это делаете, то вам потребуется механизм, с помощью которого можно было бы передать в другой процесс идентификационные данные нового дескриптора.

Функция DuplicateHandle может применяться к дескрипторам любого типа.

Если действие параметра dwDesiredAccess не отменяется флагом DUPLICATE_SAME_ACCESS параметра dwOptions, то у него может быть много возможных значений (для получения более подробных сведений обратитесь к библиотеке MSDN оперативного справочного руководства).

Параметр dwOptions может содержать любую комбинацию указанных ниже двух флагов.

• DUPLICATE_CLOSE_SOURCE — вызывает закрытие исходного дескриптора.

• DUPLICATE_SAME_ACCESS — вынуждает игнорировать параметр dwDesiredAccess. 

Напоминание

Ядро Windows поддерживает счетчики ссылок для всех объектов; этот счетчик представляет количество различных дескрипторов, ссылающихся на данный объект. В то же время, приложения не имеют доступа к этому счетчику. Любой объект не может быть уничтожен до тех пор, пока не будет закрыт его последний дескриптор, а счетчик ссылок не примет нулевое значение. Унаследованные и продублированные дескрипторы считаются отличными от исходных и также учитываются в счетчике ссылок. Наследуемые дескрипторы используются в программе 6.1 далее в этой главе. В то же время, дескрипторы, переданные из одного процесса в другой посредством той или иной формы механизма IPC, не считаются независимыми, и поэтому если один процесс закрывает такой дескриптор, то другие процессы использовать его не могут. Подобной методикой пользуются редко, однако в упражнении 6.2 вам предлагается передать значение унаследованного дескриптора из одного процесса в другой, используя механизм IPC.

Далее вы узнаете о том, как определить, завершено ли выполнение процесса.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Копирование и дублирование объектов

Из книги Adobe InDesign CS3 автора Завгородний Владимир

Копирование и дублирование объектов При работе часто требуется создать копию объекта – для сравнения, для подстраховки (запасную копию) или же если просто нужно несколько одинаковых объектов. В Adobe InDesign существуют разные способы дублировния объектов.Прежде всего, даже


Дублирование и объединение слоев

Из книги Photoshop CS3: Обучающий курс автора Тимофеев Сергей Михайлович

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


Глава 22 Дублирование данных

Из книги Новейший самоучитель работы на компьютере автора Белунцов Валерий

Глава 22 Дублирование данных Современные носители информации обладают высокой надежностью, однако нельзя быть полностью застрахованным от возможных сбоев оборудования. Проблемы с программами, даже операционными системами можно решить путем их переустановки, но если


15.8. Передача дескрипторов

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

15.8. Передача дескрипторов Когда мы говорим о передаче открытого дескриптора от одного процесса другому, обычно подразумевается одно из двух:? наследование всех открытых дескрипторов родительского процесса дочерним после вызова fork;? сохранение открытых дескрипторов при


Счетчики дескрипторов процессов

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Счетчики дескрипторов процессов Распространенной ошибкой программистов является пренебрежение закрытием дескрипторов после того, как необходимость в них отпала; это может стать причиной утечки ресурсов, что, в свою очередь, может приводить к снижению


11.5.3. Дублирование файловых дескрипторов

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

11.5.3. Дублирование файловых дескрипторов Иногда процессам требуется создать новый файловый дескриптор, который ссылается на ранее открытый файл. Командные оболочки используют эту функциональность для перенаправления стандартного ввода, вывода и потока ошибок по


22.3.7. Закрытие файловых дескрипторов

Из книги Linux программирование в примерах автора Роббинс Арнольд

22.3.7. Закрытие файловых дескрипторов В системах Linux и Unix файловые дескрипторы, как правило, наследуются через системные вызовы exec() (и всегда наследуются через fork() и vfork()). В большинстве случаев такое поведение нежелательно, поскольку только разделяться должны только stdin,


10.5. Дублирование данных: введение в RAID

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

10.5. Дублирование данных: введение в RAID Идея надежности хранения данных волновала, волнует и будет волновать не одно поколение системных администраторов и пользователей. Используемые ОС Linux файловые системы ext2 и ext3 обладают достаточной степенью надежности, но зачастую


9.1.1.2. Разделение дескрипторов файлов

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

9.1.1.2. Разделение дескрипторов файлов Атрибуты, которые порожденный процесс наследует от родителя, устанавливаются в те же значения, которые были в родительском процессе в момент выполнения fork(). Однако, с этого момента два процесса продолжают идти собственными путями


15.7. Передача дескрипторов

Из книги автора

15.7. Передача дескрипторов Когда нам требуется передать дескриптор от одного процесса другому, обычно мы выбираем одно из двух решений:1. Дочерний процесс использует все открытые дескрипторы совместно с родительским процессом после вызова функции fork.2. Все дескрипторы


Дублирование, аффилиаты, ошибки

Из книги автора

Дублирование, аффилиаты, ошибки Анализ содержания поддоменов. На поддоменах может располагаться что угодно: копия сайта, спамный контент, вирусы. Например, на поддомене может располагаться архивная версия форума, которая уже не работает и поэтому не обновляется.