天天看点

内核对象 复制对象句柄 DuplicateHandle 跨进程边界共享内核对象

Windows API List

System Services

Windows System Information

Handles and Objects

Handles and Object Reference

Handle and Object Functions

DuplicateHandle

// 跨进程边界共享内核对象;

// 原理:获得一个进程的句柄表的一个记录项,然后在另外一个进程的句柄表中创建这个记录项的一个副本

BOOL WINAPI DuplicateHandle(
  _In_  HANDLE   hSourceProcessHandle,     // 源进程内核对象
  _In_  HANDLE   hSourceHandle,     // 源任何类型内核对象;不能与调用DuplicateHandle函数的进程相关,必须与hSourceProcessHandle句柄所标识的进程相关(除非hSourceProcessHandle就是调用DuplicateHandle函数的进程,即当前进程)
  _In_  HANDLE   hTargetProcessHandle,     // 目标进程内核对象
  _Out_ LPHANDLE lpTargetHandle,     // HANDLE变量的地址,用来接收复制得到的HANDLE值;不能调用CloseHandle(除非hTargetProcessHandle就是调用DuplicateHandle函数的进程,即当前进程)
  _In_  DWORD    dwDesiredAccess,
  _In_  BOOL     bInheritHandle,
  _In_  DWORD    dwOptions
);
           

dwOptions:0 或 DUPLICATE_CLOSE_SOURCE 和 DUPLICATE_SAME_ACCESS 的组合;DUPLICATE_CLOSE_SOURCE 表明会关闭源进程中的句柄;DUPLICATE_SAME_ACCESS 表明目标句柄拥有与源进程句柄一样的访问掩码并且忽略dwDesiredAccess参数。

参考:windows核心编程(第5版) 3.3.6 复制对象句柄

继续阅读