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
嗯没错,你会看到一堆的这样的字符串,这个字符串就是用来描述这个文件夹的访问控制权限的。
有限的时间,我们一起学习,下一博,安全描述符。
- Windows系统服务与用户进程共享内存
- Windows系统进程与服务
- windows进程共享内存技术
- svchost与服务进程共享
- Samba服务下Ubuntu 10.10与Windows系统共享
- centos搭建samba服务、与windows系统共享文件
- Windows 系统服务和进程
- Windows服务+应用程序+Web,共享内存
- windows mobile 进程间共享内存
- windows 进程间通信(共享内存)
- windows 进程间通信(共享内存)
- Windows进程间通信之共享内存
- windows 进程间通信(共享内存)
- Windows进程间通信-共享内存
- windows编程之进程通信:内存共享
- Windows进程间共享内存通信实例
- Windows进程间通信--共享内存
- Windows进程通信——共享内存
- 二分贪心 E
- 一只大二狗的Android历程--JSon解析
- OpenCV中与matlab中相对应的函数
- 前端工程师技能之photoshop巧用系列第一篇——准备篇
- 倒计时button(借鉴CountDownButton)
- Windows系统服务与用户进程共享内存
- OpenCV中对数组(矩阵)的常用操作
- 编译windows程序遇到fatal error C1189 #error No Target Architecture
- XML解析之PULL
- 程序员英文学习日常记录
- zip压缩包解压乱码问题
- 全球著名编程大赛地址
- 二分贪心 U
- 笔记:关于adb push不生效