DuplicateHandle()复制句柄函数的用法 c语言handle句柄

DuplicateHandle()复制句柄函数的用法
很多像我一样的菜鸟起初都不知道DuplicateHandle()的用法和为何要使用DuplicateHandle()函数,现在我在这里总结一下:
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句柄值并不属于源进程的句柄表中的,若错误关闭了,会产生不可预料的结果
 
好了,只要依照上面的做法,基本是可以正确用到DuplicateHandle()函数的
但很多菜鸟们都不知道为何要用复制句柄函数,我利用进程间通信把句柄传给目标进程不就行了吗?
这样的想法就大错特错了,我们表面上是在复制句柄值,实际上是把该句柄在源进程句柄表中的所有项复制到目标进程的句柄表中,而且使该内核对象的计数器+1了,如果只是简单的只传句柄值,目标进程的句柄表中是不会有所增加的
顺便一提,句柄表是各进程用来记录该进程的内核对象的.

  

爱华网本文地址 » http://www.413yy.cn/a/25101017/355422.html

更多阅读

Choose函数经典用法 c choose用法

Choose函数经典用法——简介choose函数经典用法一:与sum函数配合求单元格区域值总和choose函数经典用法二:与vlookup函数配合使用达到反向查找choose函数经典用法三:与IF函数配合使用来判断得出结果Choose函数经典用法——工具/原料

EXCEL表中LEFT和RIGHT函数的用法 left和right函数

在用EXCEL表中的时候,懂得一些常用的函数,会给你的工作带来很大便利。就像上次偶然的机会,听同事说道LEFT和RIGHT函数的用法,还挺有用的。像导出的财务数据,日期的格式都是2010-01-01,但是如果你只需要年月,不需要日期,你可以插入另外一列,适用

SetTimer函数的用法 c settimer用法

SetTimer函数的用法VS2008Ontimer函数在CDialogBar类中不能响应解决方案:如果是手工加的wm_timer消息,那就要检查一下BEGIN_MESSAGE_MAP(...Dlg, CDialog),END_MESSAGE_MAP()ON_WM_TIMER()宏之间有没有ON_WM_TIMER()了,没有的要添

转载 js中return的用法 c return的用法

原文地址:js中return的用法作者:风依旧_旭一、返回控制与函数结果,语法为:return 表达式;语句结束函数执行,返回调用函数,而且把表达式的值作为函数的结果二、返回控制,无函数结果,语法为:return;

C语言在K叉哈夫曼编码教学中的应用 c语言哈夫曼编码译码

摘 要:字符编码与信息压缩是计算机应用的重要研究课题,许多学者对此作了很多非常有价值的研究。文章简单分析了二叉哈夫曼树的构造及编码,通过比较三种构造三叉哈夫曼树的算法,提出了构造任意K叉哈夫曼树及K进制的最优前缀编码的算法,并

声明:《DuplicateHandle()复制句柄函数的用法 c语言handle句柄》为网友几多癖性分享!如侵犯到您的合法权益请联系我们删除