C/C++知识点之windows c++ 修改用户的文件夹操作权限
小标 2018-12-26 来源 : 阅读 4047 评论 0

摘要:本文主要向大家介绍了 C/C++知识点之windows c++ 修改用户的文件夹操作权限,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了 C/C++知识点之windows c++ 修改用户的文件夹操作权限,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

一般Windows下的系统文件(夹)只让受限帐户读取而不让写入和修改。如果要开启写操作权限就需要手动修改文件(夹)的用户帐户安全权限(这操作当然要在管理员帐户下执行).以下用程序封装了一下该操作:


#include "stdafx.h"
#include 
#include 
#include 
#include 
#include 
#include 

int EnableFileAccountPrivilege (PCTSTR pszPath, PCTSTR pszAccount)
{
BOOL bSuccess = TRUE;
EXPLICIT_ACCESS ea;
PACL pNewDacl = NULL;
PACL pOldDacl = NULL;
do
{
// 获取文件(夹)安全对象的DACL列表

if (ERROR_SUCCESS != GetNamedSecurityInfo ((LPTSTR)pszPath, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, &pOldDacl, NULL, NULL))
{
bSuccess = FALSE;
break;

}

// 此处不可直接用AddAccessAllowedAce函数,因为已有的DACL长度是固定,必须重新创建一个DACL对象

// 生成指定用户帐户的访问控制信息(这里指定赋予全部的访问权限)

::BuildExplicitAccessWithName (&ea, (LPTSTR)pszAccount, GENERIC_ALL, GRANT_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);

// 创建新的ACL对象(合并已有的ACL对象和刚生成的用户帐户访问控制信息)

if (ERROR_SUCCESS != ::SetEntriesInAcl(1, &ea, pOldDacl, &pNewDacl))
{
bSuccess = FALSE;
break;
}

// 设置文件(夹)安全对象的DACL列表
if (ERROR_SUCCESS != ::SetNamedSecurityInfo ((LPTSTR)pszPath, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, pNewDacl, NULL))
{
bSuccess = FALSE;
}
}while(FALSE);

if (NULL != pNewDacl)
{
::LocalFree(pNewDacl);
}

return bSuccess;
}

int _tmain(int argc, _TCHAR* argv[])
{

// 获取当前登录用户的名称
wchar_t strBuffer[256] ={0};
DWORD dwSize = 256;
GetUserName(strBuffer,&dwSize);

const wchar_t z_wszPath[MAX_PATH] = L"H:\\test2";
const wchar_t z_wszAccountName[MAX_PATH] = L"Users"; 
if (!EnableFileAccountPrivilege(z_wszPath, z_wszAccountName))
{
printf("change file account Privilege fail : %s", "H:\\test1");
}

//int z_Flag = GetFileAttributes(L"H:\\test");

//if (!(z_Flag&FILE_ATTRIBUTE_DIRECTORY))
//{
// return 0;
//}
//
//if (z_Flag&FILE_ATTRIBUTE_READONLY)
//{
// printf("wangjian");
//}
//SetFileAttributes(L"H:\\test", FILE_ATTRIBUTE_NORMAL);

return 0;
}
 
通用访问权限
  安全对象使用Windows 访问掩码格式,四个高位说明通用访问权限。每个安全对象类型映射到这些位到一系列标准和对象特殊访问权限。例如:一个Window文件对象映射GENERIC_READ位到READ_CONTROL和SYNCHRONIZE 标准访问权限和FILE_READ_DATA、FILE_READ_EA和FILE_READ_ATTRIBUTES对象指定访问权限。其他类型对象映射GENERIC_READ位到与类型对象适应的一些访问权限。  你可以在你打开一个对象句柄的时候使用通用访问权限来指定需要的访问类型;这通常比指定所有对应标准和特指权限要简单。 
  下表显示了通用访问权限定义的常量。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程