DuplicateHandle 函数的使用—-翻译

DuplicateHandle 函数的使用—-翻译原文地址 https msdn microsoft com zh cn library windows desktop ms v vs 85 aspxBOOLWINA In HANDLEhSourc In HANDLEhSourc In HANDLEh

原文地址

https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms(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—–>同样的权限




  • 返回值
    成功返回值非0

  • remarks
           复制句柄引用相同的源对象。因此,任何对于对象的改变都体现到相同的句柄。例如,复制文件句柄,当前文件位置是相同的。如果想不同,调用CreateFile 来创建对于同一个文件有同样的访问权限的句柄。

  • 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; } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218641.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午11:48
下一篇 2026年3月17日 下午11:48


相关推荐

  • PLL锁相环

    PLL锁相环PLL 锁相环 锁相环是指一种电路或者模块 它用于在通信的接收机中 其作用是对接收到的信号进行处理 并从其中提取某个时钟的相位信息 或者说 对于接收到的信号 仿制一个时钟信号 使得这两个信号从某种角度来看是同步的 或者说 相干的 PLL 锁相环的作用是将系统提供的实时时钟基频进行倍频 nbsp nbsp nbsp nbsp 锁相的意义是相位同步的自动控制 能够完成两个电信号相位同步的自动控制闭环系统

    2026年3月17日
    1
  • Playwright MCP完全指南:AI驱动的浏览器自动化工具【2025实战教程】

    Playwright MCP完全指南:AI驱动的浏览器自动化工具【2025实战教程】

    2026年3月16日
    2
  • Android SDK下载和安装,以及部署「建议收藏」

    Android SDK下载和安装,以及部署「建议收藏」第一步:先到网站地址下载资源下载地址:https://www.androiddevtools.cn/第二步:选择具体版本资源下载第三步:点击启动安装SDKManager.exe选择相应的工具包进行下载对于扩展选项:这里建议全选分别选中每个License,分别设置为AcceptLicense[这样更方便快捷!!]确认好都勾选后,点击Install下载注意:下载可能比较慢,耗费时间长,最重要的是保证网络好,没下载成功,就重进重选重新下载…

    2022年7月19日
    20
  • 【10】进大厂必须掌握的面试题-版本控制面试

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 Q1。什么是版本控制? 这可能是您在面试中最容易遇到的问题。我的建议是首先给出版本控制的定义。它是一个记录一段时间内…

    2021年6月23日
    88
  • mysql hints_MySQL优化之hints

    mysql hints_MySQL优化之hints大妈让我整理 MySQL 优化的一些工具和方法 整理到 MySQLhints 的时候 没有找到满意的中文文章 于是自己翻译了一篇关于 MySQLhints 的小文章 如下 每个程序员都喜欢优化 甚至有时我们知道不应该去做 为了满足大家的意愿 MySQL 提供了一些关键字 在 SQL 语句中使用这些关键字 可以使得数据库按照明确的优化指令执行 SQL 语句 应当指出的是 不正确的使用 hints 很有可能使你的查询语句表

    2026年3月18日
    2
  • 怎样初始化二维vector

    怎样初始化二维vector二维vector的初始化方法总结初始化一个二维vector,行M,列N学会用大括号初始化二维数组初始化一个二维vector,行M,列不固定初始化一个二维vector,行列都不固定leetcode相关例题以定义一个二维整形数组并初始化为例:初始化一个二维vector,行M,列N//初始化一个二维的matrix,行M,列N,且值为0vector<vector<int&g…

    2025年7月23日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号