DuplicateHandle是Windows API中一种创建新句柄的
函数。在指出一个现有系统对象当前句柄的情况下,为那个对象创建一个新句柄。当前
句柄可能位于一个不同的进程。
简介
DuplicateHandle
VB声明
说明
在指出一个现有系统对象当前句柄的情况下,为那个对象创建一个新句柄。当前
句柄可能位于一个不同的进程
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
hSourceProcessHandle Long,拥有源句柄的那个进程的句柄。如源句柄从属于当前进程,则使用GetCurrentProcess
hSourceHandle Long,
指定对象的现有句柄。
hTargetProcessHandle Long,即将拥有新对象句柄的一个进程的句柄。如源句柄从属于当前进程,则使用GetCurrentProcess
lpTargetHandle Long,指定用于装载新句柄的一个长
整型变量dwDesiredAccess Long,新句柄要求的安全访问级别。如dwOptions已指定了DUPLICATE_SAME_ACCESS,那么忽略这里的设置。可以进行的访问由对象的类型决定,它们在不同系统对象的访问常数表里进行了总结
bInheritHandle Long,如新句柄可由hSourceProcessHandle的子进程继承,则为TRUE
dwOptions Long,下列常数的一个或两个:
DUPLICATE_SAME_ACCESS 新句柄拥有与原始句柄相同的安全访问特征
DUPLICATE_CLOSE_SOURCE 原始句柄已经关闭。即使发生错误。它也要
关闭注解
在一个进程中,这个函数可根据位于不同进程内的现有句柄创建一个新句柄。可以从这两个进程中发出对这个函数的调用。进程必须提供PROCESS_DUP_HANDLE访问权限,否则函数执行不能成功
句柄可以重复的对象包括控制台、文件(包括通信设备)、文件映射、事件、可等待计时器、
互斥体、管道、进程、
注册表项、信号机以及线程
VC声明
BOOL WINAPI DuplicateHandle
__in HANDLE hSourceProcessHandle,
__in HANDLE hSourceHandle,
__in HANDLE hTargetProcessHandle,
__out LPHANDLE lpTargetHandle,
__in DWORD dwDesiredAccess,
__in BOOL bInheritHandle,
__in DWORD dwOptions
;
hSourceProcessHandle:源进程内核句柄(即负责传递
内核对象句柄的进程句柄)hSourceHandle:要传递的内核对象句柄hTargetProcessHandle:目标进程内核句柄lpTargetHandle:接收内核对象句柄的地址(先随便声明一个HANDLE)dwDesiredAccess:TargetHandle句柄使用何种访问掩码(这个掩码是在
句柄表中的一项)bInheritHandle:是否拥有继承dwOptions:当设DUPLICATE_SAME_ACCESS时,表示于源的内核对象所有标志一样,此时wDesiredAccess可标志为0
当设DUPLICATE_CLOSE_SOURCE时,传输完后,关闭源中的
内核对象句柄此函数能否成功调用还要看你是否有足够的权限去操作目标进程通常目标进程的内核句柄是利用OpenProcess()得到的HANDLE WINAPI OpenProcess()
__in DWORD dwDesiredAccess,
__in BOOL bInheritHandle,
__in DWORD dwProcessId
;
dwDesiredAccess:决定你拥有该进程的操作权限,如果要成功用到则要填PROCESS_ALL_ACCESS或PROCESS_DUP_HANDLE
bInheritHandle:是否可继承
dwProcessId:这个ID可在
资源管理器中找到,当然,我不提倡在哪里得到,或者你可以通过
进程间通信的方法把PID从目标进程传给源进程
若DuplicateHandle()能成功执行,则利用
进程通信把句柄值TargetHandle传给目标进程,让他知道利用该句柄使用
内核对象注意:不要试图在源进程中利用CloseHandle()关闭TargetHandle,因为这个TargetHandle句柄值并不属于源进程的
句柄表中的,若错误关闭了,会产生不可预料的结果
易语言声明
.版本 2
.参数 hSourceProcessHandle, 整数型, , 0
.参数 hSourceHandle, 整数型, , 0
.参数 hTargetProcessHandle, 整数型, , 0
.参数 lpTargetHandle, 整数型, 传址, 0
.参数 dwDesiredAccess, 整数型, , 0
.参数 bInheritHandle, 逻辑型, , 0
.参数 dwOptions, 整数型, , 0
需求
Windows NT/2000/XP: Included in Windows NT 3.1 and later.
Windows 95/98/Me: Included in Windows 95 and later.
Header: Declared in Winbase.h; include Windows.h.
Library: Use Kernel32.lib.