zoukankan      html  css  js  c++  java
  • SECURITY_ATTRIBUTES 设置低权限

    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 打开共享内存。
  • 相关阅读:
    python3字典删除元素和添加元素的几种方法
    查看ef core 3.1/3.0/2.1.2生成的sql语句
    C#Qrcode生成二维码支持带标题
    .net RabbitMQ 介绍、安装、运行
    Golang之初探
    MySql5.7多实例配置教程
    Centos7 安装MySql 5.7
    sqlserver智能提示插件-sql prompt(9.4.6)的安装及注册流程
    ABP框架(asp.net core 2.X+Vue)模板项目学习之路(二)--切换MySql数据库
    ABP框架(asp.net core 2.X+Vue)模板项目学习之路(一)
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4372180.html
Copyright © 2011-2022 走看看