К Т П           План занятия                                                              1                                           Страницы  | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 |

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

Дублирование дескрипторов необходимо для решения следующей задачи. Иногда при передаче дескриптора из одного процесса в другой необходимо изменить не только свойство наследования дескриптора, но и другие свойства этого дескриптора, которые управляют доступом к объекту. Для решения этой проблемы предназначена функция DuplicateHandie, которая имеет следующий прототип:
BOOL DuplicateHandie(
  HANDLE hSourceProcessHandle, // дескриптор процесса источника
  HANDLE hSourceHandle,// исходный дескриптор
  HANDLE hTargetProcessHandle, // дескриптор процесса приемника
  LPHANDLE lpTargetHandle, // дубликат исходного дескриптора
  DWORD dwDesiredAccess, // флаги доступа к объекту
  BOOL blnheritHandle, // наследование дескриптора
  DWORD dwOptions //дополнительные необязательные флаги
);

Если функция DuplicateHandie завершается успешно, то она возвращает ненулевое значение. В противном случае эта функция возвращает значение FALSE.
Отметим назначение трех последних параметров в функции DuplicateHandie.

Начнем с последнего параметра — dwOptions, в котором может быть установлена комбинация флагов duplicate_close_source и duplicate_same_access. Если установлен флаг duplicate_close_source, то при любом своем завершении функция DuplicateHandle закрывает исходный дескриптор. Если установлен флаг duplicate_same_access, то режимы доступа к объекту через дублированный дескриптор совпадают с режимами доступа к объекту через исходный дескриптор. Совместное использование этих флагов обеспечивает выполнение двух указанных действий.

Теперь перейдем к параметру dwDesiredAccess, который определяет возможные режимы доступа к объекту через дубликат исходного дескриптора, используя определенную комбинацию флагов. Значения этих флагов отличаются для объектов разных типов и будут описаны далее, в процессе работы с объектами. Если доступ к объекту не изменяется, что определяется значением последнего параметра dwOptions, то система игнорирует значение параметра dwDesiredAccess.

Параметр bInheritHandle функции DuplicateHandle устанавливает своство наследования нового дескриптора. Если значение этого параметра равно TRUE, то создаваемый дубликат исходного дескриптора является наследуемым, в случае FALSE — ненаследуемым.

 

 


Предыдущая        В начало страницы       Следующая
2