来源:http://www.cnblogs.com/elvislogs/articles/ShareMemory.html

 通常使用CreateFileMapping建立共享内存时名称中没有加入"Global\\",这使得共享的内存只能在当前用户下被另一个或多个进程访问,例如:

  CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_COMMIT, 0, 1024, TEXT("MyShare"));

  当把程序放到服务器上并运行,然后用远程桌面连接服务器时的用户身份作为了另一用户,这时运行访问共享内存的程序将产生错误[代码是2]。根据错误代码认为是权限问题,通常会去添加安全描述符,也就是设置CreateFileMapping的LPSECURITY_ATTRIBUTES参数,会这样做:

  SECURITY_DESCRIPTORSECURITY_DESCRIPTOR secutityDese;

  InitializeSecurityDescriptor(&secutityDese, SECURITY_DESCRIPTOR_REVISION);

  SetSecurityDescriptorDacl(&secutityDese,TRUE,NULL,FALSE);

  SECURITY_ATTRIBUTES securityAttr;

  SECURITY_ATTRIBUTESsecurityAttr.nLength = sizeof(SECURITY_ATTRIBUTES);

  securityAttr.bInheritHandle = FALSE;

  securityAttr.lpSecurityDescriptor = &secutityDese;

  CreateFileMapping(INVALID_HANDLE_VALUE, &securityAttr, PAGE_READWRITE | SEC_COMMIT, 0, 1024, TEXT("MyShare"));

  既使我们这样做发现没有任何效果,错误依旧!

  Global\\*** 可以保证:在创建命名时间对象时指定名字是全局的,使用全局名称创建的内核对象无论出于服务,还是内核中,应用层都可以打开并使用这个内核对象。

  然后改为使用全局名称,用远程桌面登陆到服务器在不同的用户下就能够运行访问共享内存的程序了!

  CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_COMMIT, 0, 1024, TEXT("Global\\MyShare"));

转载于:https://www.cnblogs.com/elonlee/p/3621541.html

CreateFileMapping共享内存时添加Global的作用相关推荐

  1. CreateFileMapping 共享内存

    背景 共享内存的方式原理就是将一份物理内存映射到不同进程各自的虚拟地址空间上,这样每个进程都可以读取同一份数据,从而实现进程通信.因为是通过内存操作实现通信,因此是一种最高效的数据交换方法. 函数 A ...

  2. VB读写进程句柄-共享内存-内存映射CreateFileMapping

    共享内存 其实就是 一个 句柄 可以用工具查看进程句柄 中就可以发现,类似 互斥体一样的东西 然后共享内存 ,创建的是一个句柄名称 "Global\{FD921876-60EB-4799-A ...

  3. c++ fork 进程时 共享内存_linux共享内存mmap

    Linux进程间通信-共享内存mmap 采用共享内存通信的一个显而易见的好处是效率高,因为进程可以直接读写内存,而不需要任何数据的拷贝.对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的 ...

  4. java 共享内存获取写权限_跨进程访问共享内存的权限问题

    问:我在服务器上用 CreateFileMapping 创建了一段共享内存.让这个exe始终在服务器上跑. 同时,别的用户在客户端用IE访问服务器,将要查询的数据通过C#制作的网页提交上来,服务器得到 ...

  5. Linux进程间通信(管道、消息队列、共享内存、信号、信号量)

    目录 Linux进程间通信概述 1.管道 无名管道(pipe) 有名管道(fifo) 2.消息队列(msg) 消息队列的通信原理 消息队列相关api 消息队列收发数据 键值生成 消息队列移除 3.共享 ...

  6. Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析

    出自:http://blog.csdn.net/luoshengyang/article/details/6939890 在Android系统中,针对移动设备内存空间有限的特点,提供了一种在进程间共享 ...

  7. Linux(信号,进程间通信)共享内存,信号量,消息队列

    信号(signal) 1.1 什么是信号? 信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式 1.2 信号的来源 硬件 [1] 用户在终端按下某些键时,终端驱动程序会发送信号给前台进程 ct ...

  8. 【Linux篇】第十二篇——进程间通信(管道+system V共享内存)

    进程间通信介绍 概念 目的 本质 分类 管道 什么是管道 匿名管道 匿名管道的原理 pipe函数 匿名管道使用步骤 管道读写规则 管道的特点 管道的大小 命名管道 命名管道的原理 使用命令创建命名管道 ...

  9. Linux进程间的通信----->共享内存

    共享内存:         顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存.共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式.不同进程之间共享的内存通常安排为同一段物 ...

最新文章

  1. Oracle\MS SQL Server的数据库多表关联更新UPDATE与多表更新
  2. 创建线程池的四种方式_创建线程到底有几种方式?
  3. 开源方案搭建可离线的精美矢量切片地图服务-1.开篇(附成果演示地址)
  4. appium查看控件的方法
  5. Docker JFrog Artifactory 7.27.10 maven私服(搭建篇)
  6. 290家公司都在用的任务调度系统,还在Github上开源了
  7. AndroidStudio安卓原生开发_打包apk安装文件---Android原生开发工作笔记130
  8. win11内存泄露怎么办 Windows11内存泄露的解决方法
  9. JQuery插件Fullpage说明文档
  10. 2022-2028年中国有色金属市场供需前景预测及投资策略研究报告
  11. GooFlow入门级使用
  12. Oracle 数据库的常用备份方法
  13. 手机/笔记本电脑看电视直播
  14. CANopen协议基础知识
  15. 国密:SM2公私钥加签验签
  16. 计算机窗口移动不了怎么办,手把手为你解决笔记本电脑怎么拖动窗口
  17. iphone6 续航 测试软件,7款iPhone测试iOS13.6电池续航:结果耗电更严重了?
  18. Qt通过ODBC连接虚谷数据库,并对数据库数据进行增删查改
  19. FW:腰椎间盘突出锻炼
  20. [hdu 5671][BestCoder Round #81 t2] Matrix

热门文章

  1. JS中数据类型、内置对象、包装类型对象、typeof关系
  2. linux lnmp1.5 部署laravel项目
  3. 使用srvany.exe将任何程序作为Windows服务运行
  4. 微信小程序实现支付功能
  5. Actor IM 中 WebRTC的设定
  6. iOS开发-开发总结(七)
  7. Sublime Text 3103 Crack 破解 注册码(亲测有效)
  8. 学一点Git–20分钟git快速上手
  9. UML学习笔记(4)——类图之间的关系
  10. libdvbpsi源码分析(三)PSI decocder详细分析