CreateFileMapping共享内存时添加Global的作用
来源: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"));
CreateFileMapping共享内存时添加Global的作用的更多相关文章
- <转>UNIX 共享内存应用中的问题及解决方法
http://www.ibm.com/developerworks/cn/aix/library/au-cn-sharemem/ 共享内存是一种非常重要且常用的进程间通信方式,相对于其它IPC机制,因 ...
- Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6939890 在Android系统中,针对移动设 ...
- Linux进程间通信(消息队列/信号量+共享内存)
写在前面 不得不说,Deadline果真是第一生产力.不过做出来的东西真的是不堪入目,于是又花了一早上重写代码. 实验内容 进程通信的邮箱方式由操作系统提供形如 send()和 receive()的系 ...
- Linux学习笔记(14)-进程通信|共享内存
在Linux中,共享内存是允许两个不相关的进程访问同一个逻辑内存的进程间通信方法,是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式. 不同进程之间共享的内存通常安排为同一段物理内存.进程可 ...
- Linux进程间通信(六):共享内存 shmget()、shmat()、shmdt()、shmctl()
下面将讲解进程间通信的另一种方式,使用共享内存. 一.什么是共享内存 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存.共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式 ...
- linux进程间通信-共享内存
转载:http://www.cnblogs.com/fangshenghui/p/4039720.html 一 共享内存介绍 共享内存可以从字面上去理解,就把一片逻辑内存共享出来,让不同的进程去访问它 ...
- Linux共享内存(一)
inux系统编程我一直看 <GNU/LINUX编程指南>,只是讲的太简单了,通常是书和网络上的资料结合着来掌握才比较全面 .在掌握了书上的内容后,再来都其他资料 . 原文链接 http:/ ...
- Linux进程间通信——使用共享内存
一.什么是共享内存 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存.共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式.不同进程之间共享的内存通常安排为同一段物理内存. ...
- IPC——共享内存
Linux进程间通信——使用共享内存 下面将讲解进程间通信的另一种方式,使用共享内存. 一.什么是共享内存 顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存.共享内存是在两个正在运行的 ...
随机推荐
- zoj1093 Monkey and Banana
写到现在,发现1025,1076之前写的都是同一种题型:关于DAG的最长路(最短路). 首先要建立模型,根据关系,确定点和点之间的关系,构成一个DAG,前面几道题每个点之间距离默认为1,这一道题不同点 ...
- python函数与方法装饰器
之前用python简单写了一下斐波那契数列的递归实现(如下),发现运行速度很慢. def fib_direct(n): assert n > 0, 'invalid n' if n < 3 ...
- media queries(练习)
根据不同的窗口尺寸来选择使用不同的样式的示例 MAIN SUB 01 SUB 02
- EOFError:EOF when reading a line
Sublime2编译Python程序EOFError:EOF when reading a line: 是因为Sublime2对于python中运行含有input或者raw_input的python代 ...
- 阿里云的linux命令小结
/** ---------------- [ 华丽分割线 ] ------------------------ ### 121.40.120.167 操作 ### 1.启动 nginx cd /usr ...
- ajax查询数据的举例
1.根据下拉框的值异步查询信息 HTML代码如下: <script> $(function(){ //页面载入时执行 $("#key").change(function ...
- Spring与Mybatis配置问题
Spring和Mybatis的整合,主要借助于Spring的依赖注入和控制反转来简化Mybatis的配置,使用两个配置文件[注:此种配置文件网上已经有很多]: spring.xml: <?xml ...
- 小米4c刷机
[测评] 试用小米4c最新波兰开发版 http://www.miui.com/thread-3048163-1-1.html [教程] 小米4C刷第三方recovery 以及ROOT教程 http:/ ...
- linux----LAMP之编译安装apache
第一步:解决依赖.安装apr.apr-util. apr-1.5.4.tar.gz下载地址:http://yunpan.cn/cFBzgsC3rDcyR 访问密码 4c82 apr-util-1.5 ...
- SQL Server带游标的SQL
DECLARE test_cursor CURSOR FOR SELECT ID FROM dbo.T_BD_Restaurant WHERE id <> '0AAB2E55-79F8-4 ...