假设一个进程拥有对一个文件映射对象的读写权限,在程序中的某个位置,我们要调用一个函数,并希望它对文件映射对象进行只读访问。为了使应用程序变得更健壮,可以使用DuplicateHandle为现有的对象创建一个新句柄,并确保这个新句柄有只读权限。然后,把这个只读句柄传给函数。采取这种方式,函数中的代码绝对不会对文件映射对象执行意外的写入操作。代码示例如下:

int WINAPI _tWinMain(HINSTANCE hInstExe, HINSTANCE, LPTSTR szCmdLine, int nCmdShow)
{
//Create a file-mapping object;the handle has read/write access.
HANDLE hFileMapRW=CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 10240, NULL);
//Create another handle to the file-mapping object;the handle has read-only access.
HANDLE hFileMapRO;
DuplicateHandle(GetCurrentProcess(), hFileMapRW, GetCurrentProcess(), &hFileMapRO, FILE_MAP_READ, FALSE,0);
//Call the function that should only read from the file mapping.
ReadFromTheFileMapping(hFileMapRO);
//Close the read-only file-mapping object.
CloseHandle(hFileMapRO);
...
CloseHandle(hFileMapRW);
}

内存映射文件是由一个文件到进程地址空间的映射。使用内存映射文件处理存储于磁盘上的文件时,将不必再对文件执行I/O操作,使得内存映射文件在处理大数据量的文件时能起到相当重要的作用。Win32系统允许多个进程(运行在同一计算机上)使用内存映射文件来共享数据。这种函数最适用于需要读取文件并且对文件内包含的信息做语法分析的应用程序,如:对输入文件进行语法分析的彩色语法编辑器,编译器等。映射文件的另一个重要应用就是用来支持永久命名的共享内存。要在两个应用程序之间共享内存,可以在一个应用程序中创建一个文件并映射之,然后另一个应用程序可以通过打开和映射此文件把它作为共享的内存来使用。

DuplicateHandle的应用相关推荐

  1. DuplicateHandle复制句柄保护文件

    以独占方式打开一个文件,然后将文件的句柄复制到另一个进程,比如复制到System进程,然后自己的进程就可以退出. 在Ring3下只要句柄没有关闭,别人就删除不了文件. #include <win ...

  2. DuplicateHandle

    功能:将一个进程内的伪句柄,转化为可以用来进程间通信的实句柄 BOOL DuplicateHandle(   HANDLE hSourceProcessHandle,   HANDLE hSource ...

  3. DuplicateHandle 函数的使用----翻译

    原文地址 https://msdn.microsoft.com/zh-cn/library/windows/desktop/ms724251(v=vs.85).aspx BOOL WINAPI Dup ...

  4. GetCurrentProcess()与DuplicateHandle()解析

    最近看源码在进程通信时遇到这个问题,在网上查了半天还是模模糊糊,于是决定总结别人的成果,整理一下,希望对需要的人有所帮助,如有不当望指出. 首先,我们介绍系统对象: 在系统中,对象分为两类:用户对象和 ...

  5. 利用DuplicateHandle()无驱动的另类读写内存方法,理论上可以过游戏保护读写

    突发奇想出的原创思路,在理论上经过完善应该可以做到过游戏保护无驱动读写内存 首先看一下MSDN对这个函数的定义 BOOL DuplicateHandle(HANDLE hSourceProcessHa ...

  6. Windows API之DuplicateHandle

    在进程之间共享内核对象句柄的一种方法:DuplicateHandle 简单地说,该函数取得某个进程句柄表中的一个表项,然后把它拷贝到另一个进程的句柄表中. BOOL WINAPI DuplicateH ...

  7. DuplicateHandle用法

    The DuplicateHandlefunction creates a duplicate handle. The returned duplicate is in the caller's pr ...

  8. DuplicateHandle进程间句柄复制

    1. BOOL DuplicateHandle(HANDLE hSourceProcessHandle,HANDLE hSourceHandle,HANDLE hTargetProcessHandle ...

  9. ring3层一种占用文件的方法(DuplicateHandle以后,把占用文件的句柄丢给系统进程,导致被占用)

    前段时间,一个测试工程师问我关于怎样长时间的占用一个文件,而使别的程序无法再访问这个文件,想起以前很多病毒木马经常劫持hosts文件不放,除非你找到占用文件的程序,并强行结束掉,否则怎么也访问不了ho ...

最新文章

  1. 网站访问过程理解(一点记录)
  2. AppCompat DayNight theme
  3. CRMEB 小程序版源码下载
  4. 【转】刨根究底字符编码之十一——UTF-8编码方式与字节序标记BOM
  5. 启动、停止和重新启动vcenter服务
  6. A wet night
  7. Vue项目实战05:18n实现多语言自动切换-浏览器语言设置
  8. 截止失真放大电路_数字电路基础(一)
  9. 漫谈历法、闰年与闰月
  10. unity3d开发AR/VR应用
  11. 第十一章:如何拆分项目目标?
  12. 阿里云智能编码插件Cosy,让你的开发过程既高效又轻松
  13. 未来智安XDR荣膺ISC 2022创新能力百强
  14. 尚硅谷Redis6从入门到精通
  15. 微信小程序之HTML
  16. 风控策略的自动化生成-利用决策树分分钟生成上千条策略
  17. 鸿蒙系统应用(HarmonyOS)
  18. 消息中间件ActiveMQ 4: 传输协议
  19. python selenium爬取去哪儿网的酒店信息——详细步骤及代码实现
  20. 计算机网络技术班级16字口号,校运会班级口号16字押韵有气势

热门文章

  1. Java JVM的17个参数
  2. 【高速接口-RapidIO】3、RapidIO串行物理层的包传输过程
  3. 拉着阿里P8、字节3-2搞的精华指令合集鼠标垫,粉丝每人送一块!
  4. 初创业需要做哪些工作?
  5. MATLAB的数值型数据类型有哪些,分别怎么表示
  6. 将来不会倒闭的8种行业,你上车了吗?
  7. 【python中selenium八大定位方法解析】
  8. ajax长轮询 java web_浅谈Websocket、Ajax轮询和长轮询(long polling)
  9. 安装scoop报错:iex : 使用“2”个参数调用“DownloadFile”时发生异常:“在 WebClient 请求期间发生异常。”
  10. 正则表达式——空白字符