|
|
||
2. Дублирование дескрипторов |
||
Дублирование дескрипторов необходимо для решения следующей задачи. Иногда при передаче дескриптора из одного процесса в другой необходимо изменить не только свойство наследования дескриптора, но и другие свойства этого дескриптора, которые управляют доступом к объекту. Для решения этой проблемы предназначена функция DuplicateHandie, которая имеет следующий прототип: Если функция DuplicateHandie завершается успешно, то она возвращает ненулевое значение. В противном случае эта функция возвращает значение FALSE. Начнем с последнего параметра — dwOptions, в котором может быть установлена комбинация флагов duplicate_close_source и duplicate_same_access. Если установлен флаг duplicate_close_source, то при любом своем завершении функция DuplicateHandle закрывает исходный дескриптор. Если установлен флаг duplicate_same_access, то режимы доступа к объекту через дублированный дескриптор совпадают с режимами доступа к объекту через исходный дескриптор. Совместное использование этих флагов обеспечивает выполнение двух указанных действий. Теперь перейдем к параметру dwDesiredAccess, который определяет возможные режимы доступа к объекту через дубликат исходного дескриптора, используя определенную комбинацию флагов. Значения этих флагов отличаются для объектов разных типов и будут описаны далее, в процессе работы с объектами. Если доступ к объекту не изменяется, что определяется значением последнего параметра dwOptions, то система игнорирует значение параметра dwDesiredAccess. Параметр bInheritHandle функции DuplicateHandle устанавливает своство наследования нового дескриптора. Если значение этого параметра равно TRUE, то создаваемый дубликат исходного дескриптора является наследуемым, в случае FALSE — ненаследуемым. |
||
|
||
2 |