1、给某个文件或文件夹赋予特定用户的特定访问权限

/* 给文件(夹)szPath设置用户名为pszAccount的可读可写可修改权限 */
bool GiveTheAccountPrivToFile(const TCHAR szPath[], const TCHAR pszAccount[])
{
PACL pDaclOld = NULL;
// 获取文件安全对象的DACL列表
if (ERROR_SUCCESS != GetNamedSecurityInfo (szPath, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, &pDaclOld, NULL, NULL))
{
std::cout << "GetNamedSecurityInfo fail. LastError: " << GetLastError() << endl;
return false;
} EXPLICIT_ACCESS ea = { 0 }; // 生成指定用户帐户的访问控制信息(这里指定赋予修改、读取和执行、读取、写入权限)
::BuildExplicitAccessWithName (&ea, (LPTSTR)pszAccount, GENERIC_READ | GENERIC_WRITE | GENERIC_EXECUTE, GRANT_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT); // 生成指定用户帐户的访问控制信息(这里指定赋予所有权限)
// ::BuildExplicitAccessWithName (&ea, (LPTSTR)pszAccount, GENERIC_ALL, GRANT_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT); BOOL bSuccess = TRUE;
PACL pDaclNew = NULL;
do
{
// 创建新的ACL对象(合并已有的ACL对象和刚生成的用户帐户访问控制信息)
if (ERROR_SUCCESS != ::SetEntriesInAcl(1, &ea, pDaclOld, &pDaclNew))
{
std::cout << "SetEntriesInAcl fail. LastError: " << GetLastError() << endl;
bSuccess = FALSE;
break;
} // 设置文件安全对象的DACL列表
if (ERROR_SUCCESS != ::SetNamedSecurityInfo ((LPTSTR)szPath, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, pDaclNew, NULL))
{
std::cout << "SetNamedSecurityInfo fail. LastError: " << GetLastError() << endl;
bSuccess = FALSE;
}
}while(FALSE); if (NULL != pDaclNew)
{
::LocalFree(pDaclNew);
} return bSuccess;
}

2、提升进程权限

#include <windows.h>
#include <stdio.h>
#pragma comment(lib, "cmcfg32.lib") BOOL SetPrivilege(
HANDLE hToken, // access token handle
LPCTSTR lpszPrivilege, // name of privilege to enable/disable
BOOL bEnablePrivilege // to enable or disable privilege
)
{
TOKEN_PRIVILEGES tp;
LUID luid; if (FALSE == LookupPrivilegeValue(
NULL, // lookup privilege on local system
lpszPrivilege, // privilege to lookup
&luid)) // receives LUID of privilege
{
printf("LookupPrivilegeValue fail. gle: 0x%08x\n", GetLastError());
return FALSE;
} tp.PrivilegeCount = 1;
tp.Privileges[0].Luid = luid;
if (bEnablePrivilege)
tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
else
tp.Privileges[0].Attributes = 0; // Enable the privilege or disable all privileges. if (FALSE == AdjustTokenPrivileges(
hToken,
FALSE,
&tp,
sizeof(TOKEN_PRIVILEGES),
NULL,
NULL))
{
printf("AdjustTokenPrivileges fail. gle: 0x%08x\n", GetLastError());
return FALSE;
} if (GetLastError() == ERROR_NOT_ALL_ASSIGNED)
{
printf("The token does not have the specified privilege. \n");
return FALSE;
} return TRUE;
}

C++处理系统相关权限问题的更多相关文章

  1. Linux安全加固--系统相关

    一.系统相关 1.系统关键文件设置 1.1.设置文件初始权限 设置默认的umask值,增强安全性. [root@localhost ~]# umask 0022 /etc/profile最下面添加一行 ...

  2. 一百零七:CMS系统之权限和角色模型定义

    模型与权限关系映射表 class CMSPersmission: """ 权限管理映射 """ # 255的二进制方式来表示 1111 11 ...

  3. Linux sysinfo获取系统相关信息

    Linux中,可以用sysinfo来获取系统相关信息. #include <stdio.h> #include <stdlib.h> #include <errno.h& ...

  4. 使用kvm虚拟出Centos6.5系统相关步骤

    使用kvm虚拟出Centos6.5系统相关步骤 kvm是啥东西,亲们自行百度哇,一两句话也说不清楚,直接进主题使用宿主机虚拟出一台centos6.5的系统,当然其他系统也可以的,考虑到企业常用服务器系 ...

  5. 获取Java系统相关信息

    package com.test; import java.util.Properties; import java.util.Map.Entry; import org.junit.Test; pu ...

  6. Linux基础知识第八讲,系统相关操作命令

    目录 Linux基础知识第八讲,系统相关操作命令 一丶简介命令 2.磁盘信息查看. 3.系统进程 Linux基础知识第八讲,系统相关操作命令 一丶简介命令 时间和日期 date cal 磁盘和目录空间 ...

  7. 系统相关的信息模块: import sys

    系统相关的信息模块: import sys sys.argv 是一个 list,包含所有的命令行参数. sys.stdout sys.stdin sys.stderr 分别表示标准输入输出,错误输出的 ...

  8. JAVA获取系统相关信息

    Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00003596 获取JRE系统相关参数 java 通过S ...

  9. win8.1系统相关

    win8.1系统相关 信息时代,系统更新速度非常快,十一月初,同事在网上花5元买了一个win8.1系统激活码,之后两周,我电脑由于系统故障,准备重装系统,借助他的系统,但无法激活,借用他购买的账号也不 ...

  10. uname---用于打印当前系统相关信息

    uname命令用于打印当前系统相关信息(内核版本号.硬件架构.主机名称和操作系统类型等). 语法 uname(选项) 选项 -a或--all:显示全部的信息: -m或--machine:显示电脑类型: ...

随机推荐

  1. java中的几种锁

    一.公平锁/非公平锁 公平锁是指多个线程按照申请锁的顺序来获取锁. 非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁.有可能,会造成优先级反转或者饥饿 ...

  2. OBS直播抠绿插件(Matting123)

    一.产品概述 OBS直播抠绿插件(Matting123)是使用绿幕.蓝幕进行抠像的虚拟直播软件,本软件需要配合OBS30.0.0或以上版本进行使用.Matting123采用自研抠图算法,该算法已达到影 ...

  3. Vue Element-ui Table实现动态新增和删除

    达到效果:1.点击添加动态添加一行表格数据 2.点击移除删除一行 templete部分代码 <el-tab-pane label="股东情况"> <el-row& ...

  4. 搜索引擎用法 cheatsheet

    逻辑 写法 与 keyword1 keyword2 或 keyword1 OR keyword2 限定关键词的排列 "keyword" 限定搜索的网站 site:cnblogs.c ...

  5. [学习笔记] 2-SAT

    引入 有 \(n\) 个变量 \(x_1 \cdots x_n\),每个变量的取值范围为 \(\{0,1\}\),另有 \(m\) 个条件,每个条件都是对其中两个变量的取值限制,形如要么 \(x_i ...

  6. Redis 入门 - 简介

    Redis是Remote Dictionary Server的缩写,可以翻译成远程字典服务.Redis是用C语言编写的开源项目. Redis 最主要的特点就是高性能,对于简单的键值读取速度可以达到10 ...

  7. C++: 智能指针的自定义删除器 `Custom Deleter` 有什么用?

    C++11智能指针std::shared_ptr和std::unique_ptr都支持自定义删除器,本文将介绍自定义删除器的使用场景和使用方法.智能指针模板参数的第二个类型是删除器,一般是一个函数指针 ...

  8. Azure 入门系列 (第三篇 Publish Web Application to VM)

    本系列 这个系列会介绍从 0 到 1 搭建一个 Web Application 的 Server. 间中还会带上一些真实开发常用的功能. 一共 6 篇 1. Virtual Machine (VM) ...

  9. Java SE 23 新增特性

    Java SE 23 新增特性 作者:Grey 原文地址: 博客园:Java SE 23 新增特性 CSDN:Java SE 23 新增特性 源码 源仓库: Github:java_new_featu ...

  10. 系统编程-进程-ps命令、进程调度、优先级翻转、进程状态

    1.    ps详解 ps  : 只列出当前用户的进程 ps -ef : e表示有效, f 表示全面, 所以是列出后台的所有有效进程. ps -ef | more :   列出后台所有的有效进程,并且 ...