DuplicateHandle 函数的使用----翻译
来源:互联网 发布:淘宝店铺宝贝详情模板 编辑:程序博客网 时间:2024/05/29 16:46
原文地址
https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms724251(v=vs.85).aspx
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
源进程句柄,PROCESS_DUP_HANDLE 权限打开hSourceHandle
源句柄hTargetProcessHandle
目标进程句柄,同样的权限lpTargetHandle
指向用于接收生成的句柄的内存空间,在目标进程的环境中是合法的。
如果为NULL,执行复制操作,但是返回对应的句柄值。新编码的程序不建议这样使用。
dwDesiredAccess
请求的权限,如果dwOptions 指定DUPLICATE_SAME_ACCESS 标志,否则,可以指定的标志的类型依赖于要被复制的句柄对应的对象的类型。bInheritHandle
可继承?dwOptions
DUPLICATE_CLOSE_SOURCE—->关闭源
DUPLICATE_SAME_ACCESS—–>同样的权限返回值
成功返回值非0remarks
复制句柄引用相同的源对象。因此,任何对于对象的改变都体现到相同的句柄。例如,复制文件句柄,当前文件位置是相同的。如果想不同,调用CreateFile 来创建对于同一个文件有同样的访问权限的句柄。
DuplicateHanlde 可以被任意d进程调用,只要你有相应的访问权限。
此函数可以用来在32-bit 和 64-bit 进程之间进行句柄的拷贝。句柄大小被适当设置。
Duplicate Handle 可以拷贝的句柄有以下类型:
AccessToken,Changenotification,CommunicationsDevice,Consoleinput,consolescreenbuffer,Desktop,Event,File,Filemapping,Job,Mailslot,Mutex,Pipe,Process,Registrykey,Semaphore,Thread,Timer,Transaction,Windowstation.不可以复制以下类型的对象:
I/O 完成端口,套接字(应该使用WSADuplicateSocket)dwDesiredAccess 指定了新句柄的访问权限。这涉及到对象的访问权限的问题。在某些情况下,新生成的句柄可以有比之前的句柄更多的访问权限。然而,其它的情况下,不可以超过原来的权限,比如文件句柄,之前是只读,新生成的权限不可以是读写权限。
为了在源进程的环境中关闭一个句柄,使用下面的方法调用DuplicateHandle 函数:
DuplicateHandle(hSourceProcessHandle,hSourceHandle,NULL,NULL,0,FALSE,DUPLICATE_CLOSE_SOURCE);代码示例
#include <windows.h>DWORD CALLBACK ThreadProc(PVOID pvParam);int main(){ HANDLE hMutex = CreateMutex(NULL, FALSE, NULL); HANDLE hMutexDup, hThread; DWORD dwThreadId; DuplicateHandle(GetCurrentProcess(), hMutex, GetCurrentProcess(), &hMutexDup, 0, FALSE, DUPLICATE_SAME_ACCESS); hThread = CreateThread(NULL, 0, ThreadProc, (LPVOID) hMutexDup, 0, &dwThreadId); // Perform work here, closing the handle when finished with the // mutex. If the reference count is zero, the object is destroyed. CloseHandle(hMutex); // Wait for the worker thread to terminate and clean up. WaitForSingleObject(hThread, INFINITE); CloseHandle(hThread); return 0;}DWORD CALLBACK ThreadProc(PVOID pvParam){ HANDLE hMutex = (HANDLE)pvParam; // Perform work here, closing the handle when finished with the // mutex. If the reference count is zero, the object is destroyed. CloseHandle(hMutex); return 0;}
- DuplicateHandle 函数的使用----翻译
- DuplicateHandle()复制句柄函数的用法
- DuplicateHandle的应用
- DuplicateHandle
- DuplicateHandle
- duplicatehandle()
- DuplicateHandle 伪句柄 与 实句柄的应用
- DuplicateHandle伪句柄与实句柄的应用二
- proclarity函数的翻译
- DuplicateHandle用法
- DuplicateHandle用法
- (翻译)VectorDrawables的使用
- CreateFont()函数的MSDN翻译
- Getopt函数 man的翻译
- CreateFont()函数的MSDN翻译
- [翻译]jQuery 选择器的使用
- Google 翻译API的使用
- [翻译]Gulp的开始使用
- Android多媒体之binder机制
- Echarts 增加滚动条及缩放dataZoom
- "window10 无法使用内置管理员账户打开sticky notes" 解决方法
- SSH整合步骤
- 深入了解移动端车牌识别与PC端车牌识别的区别
- DuplicateHandle 函数的使用----翻译
- jsp自定义标签
- Java核心能力
- iOS开发
- 设计模式-建造者模式详解
- 动态链接和静态链接的区别
- 67.二叉树的中序遍历
- linux自动化
- Android—webrtc—(一,websocket)