博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SECURITY_ATTRIBUTES 设置低权限
阅读量:7175 次
发布时间:2019-06-29

本文共 1135 字,大约阅读时间需要 3 分钟。

Windows 从 Vista 開始又一次改动了其系统的权限管理机制,于是如今就会碰到一些 xp 能过而 win7 不能过的代码。比方 Service 程序和一般应用程序用共享内存的方式来通讯,CreateFileMapping 的第二个參数我们往往都是填 NULL 使用默认权限(Service 的默认权限自然是 Service 级别的啦),于是在 Vista 以上的系统中执行于 user 权限应用程序打不开这一段共享内存。

网上非常多帖子都说在遇到这种问题的时候让应用程序请求管理员权限,这个办法是能解决问题的,可是,我们非常多时候是不希望程序获得管理员权限的,比方一台公用的PC,我们可能希望除了真正的管理员以外的用户都不知道管理员password,以方便管理。于是在执行时会请求管理员权限的程序,都不可以使用了,仅仅有管理员自己能用,这种程序。。。挺二的,于是我们必须让程序在 user 权限下就完毕全部工作。解决问题的办法之中的一个,就是在 user 权限下打通与 Service 的通讯,借助 Service 来完毕对权限有要求的操作。CreateFileMapping 就是当中的一个突破口,而 Service 必须以较低的权限来创建共享内存,应用程序才干直接打开。下面是 Service 端的代码

HANDLE hMapFile;    unsigned char *pBuf;    SECURITY_ATTRIBUTES SecAttr;    SECURITY_DESCRIPTOR SecDesc;    SecAttr.nLength = sizeof(SecAttr);    SecAttr.bInheritHandle = FALSE;    SecAttr.lpSecurityDescriptor = &SecDesc;    InitializeSecurityDescriptor(&SecDesc, SECURITY_DESCRIPTOR_REVISION);    SetSecurityDescriptorDacl(&SecDesc, TRUE, 0, FALSE);    hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, &SecAttr, PAGE_READWRITE, 0, BUF_SIZE, MAPPING_NAME);    if(hMapFile == NULL)    {        return GetLastError();    }
而应用程序端能够使用 OpenFileMapping 或 CreateFileMapping 打开共享内存。

转载地址:http://ggfzm.baihongyu.com/

你可能感兴趣的文章
Git的使用
查看>>
Unsupervised Learning and Text Mining of Emotion Terms Using R
查看>>
数据结构之线性表
查看>>
201621123018《java程序设计》第11周作业总结
查看>>
Unity AngryBots愤怒的机器人demo研究
查看>>
数据科学入门 (一) —— 数据
查看>>
Android源码设计模式-中介者模式
查看>>
优化体系结构 - 数据外置减少中间表
查看>>
用户超5亿,三年投10亿,开发者如何抢滩支付宝小程序蓝海?
查看>>
教育部下令中小学推广编程教育,全民AI真的要来了
查看>>
SOA旅程:从了解业务到敏捷架构
查看>>
华为2018:年收入首破千亿美元大关,研发投入过千亿
查看>>
Mysql数据库备份和还原
查看>>
[译] 通过后台数据预获取技术实现性能提升
查看>>
ANGULAR JS常用指令NG-IF、NG-CLASS、NG-OPTION、NG-VALUE、NG-CLICK是如何使用的?
查看>>
cocos creator 视频交互游戏
查看>>
Android学习笔记15-从源码分析Activity的创建过程
查看>>
SpringMVC jsonView 注解笔记
查看>>
学习第二天笔记
查看>>
学习笔记
查看>>