Windows系统服务与用户进程共享内存

来源:互联网 发布:java分布式架构有哪些 编辑:程序博客网 时间:2024/05/19 06:37

通常使用CreateFileMapping的WINAPI函数可以创建共享内存,可以实现在不同进程中访问同一数据,实现通信等。但我们在其他实际编程中会遇到,服务和进程通信的情况,及系统服务与用户进程共同访问共享内存,如果仍然使用这个API,你会发现,在另一个程序中Open时,是无法返回正确的HANDLE的。

以下这段代码也是来自 stackoverflow上的,我们以此展开学习

const char* sharename =  "Global\\mysharedmemory";const char* sharessdl = "D:P(A;OICI;GA;;;SY)(A;OICI;GA;;;BA)(A;OICI;GR;;;IU)";HANDLE CreateGlobalFileMapping(){    SECURITY_ATTRIBUTES security;    ZeroMemory(&security, sizeof(security));    security.nLength = sizeof(security);    ConvertStringSecurityDescriptorToSecurityDescriptorA(        sharessdl,        SDDL_REVISION_1,        &security.lpSecurityDescriptor,        NULL);    HANDLE tmp = CreateFileMappingA(INVALID_HANDLE_VALUE, &security,        PAGE_READWRITE, 0, SHAMEM_MAX,sharename);    LocalFree(security.lpSecurityDescriptor);    return tmp;}

查看MSDN,最重要的不是WINDOWSAPI,而是那两个字符串,这里就不说函数体每个参数的意思了,主要是这两个字符串比较诱人。
const char* sharename = “Global\mysharedmemory”;
const char* sharessdl = “D:P(A;OICI;GA;;;SY)(A;OICI;GA;;;BA)(A;OICI;GR;;;IU)”;

其中 sharename必须是Global引头的,如果是进程间的,则这里不需要,直接指定名字即可,如果跨组,跨权,那这里就是要用到Global这个全局命名空间。微软是这么说的:

内核对象命名空间
https://msdn.microsoft.com/en-us/library/aa382954(v=vs.85).aspx

重要的是文中已说明:
注意 全局命名空间不适用于Windows Store应用程序。
CreateEvent( NULL, FALSE, FALSE, “Global\CSAPP” );
默认情况下,远程桌面服务环境中的服务应用程序使用全局命名空间。
全局命名空间使多个客户端会话上的进程与服务应用程序通信。
除了“Global \”前缀之外,客户端进程可以使用“Local \”前缀在其会话命名空间中显式创建一个对象。这些关键字区分大小写。

这个好理解,但下面那个字符串就难理解了
const char* sharessdl = “D:P(A;OICI;GA;;;SY)(A;OICI;GA;;;BA)(A;OICI;GR;;;IU)”;
第一见的时候,感慨,这是什么鬼,太高端了。后来查阅了MSDN,好好的补习了一下。
这个字符串叫做 安全描述字符串,是微软的一套用来定义描述某个程序或者某个地址,某个文件,文件夹的访问权限,嗯,挺鬼的,因为不好写,或许和unix的mmod类似吧,有兴趣可以参考以下文章,提前预习。
https://blogs.technet.microsoft.com/askds/2008/04/18/the-security-descriptor-definition-language-of-love-part-1/

打开控制台,输入以下命令行

cacls C:\Windows /S

嗯没错,你会看到一堆的这样的字符串,这个字符串就是用来描述这个文件夹的访问控制权限的。

有限的时间,我们一起学习,下一博,安全描述符。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我买的二手货车营运证是假的怎么办 移民到欧洲国家想去日本怎么办签证 签证要写工作单位如果没有怎么办 办护照时的身份证过期了怎么办 有摩托车驾照想考小车驾照怎么办 分管副局长能直接安排工作吗怎么办 我在北京打工老婆没地方住怎么办 我的车扣了32分怎么办 济南万科地产投诉电话不管用怎么办 买手机被商家欺骗买到合约机怎么办 向消协投诉有用吗?我该怎么办? 我住南开区想办公租房不知怎么办 租房提前退房房东不退押金怎么办 体检时候眼睛有一只是弱视怎么办? b本被扣分9分了怎么办 工作调动后在新单位退休医保怎么办 社保卡和医保卡丢了怎么办 医保卡挂失后又找到了怎么办 医保卡丢失忘了卡号怎么办? 医保卡丢了怎么办又记不住卡号 住院发票丢了医保不给报销怎么办 住院期间被医院丢失了医保卡怎么办 大学时的医保卡毕业后丢了怎么办 用身份证注册的移动卡丢了怎么办 用别人身份证办的卡丢了怎么办 济南医保卡挂失后又找到了怎么办 单位没有给办理医保卡的老人怎么办 单位办的医保卡丢了怎么办 北京退休人员医保卡丢了怎么办 普通发票联丢了医保给报销怎么办 手机买好高铁票身份证丢了怎么办 买了高铁票身份证丢了怎么办 小米手机手电简打开不亮了怎么办 华为p7手机显示屏不亮了怎么办 红米手机3x屏幕不灵怎么办? 乐视1s手机字库坏了怎么办 三星c7手机左右两按钮不亮怎么办 手机摔了一屏碎了下黑屏了怎么办 三星手机摔了一下黑屏了怎么办 行驶证一年扣分超过50分怎么办 朋友去广西传销现在骗我怎么办