怎么取消NTFS里文件的继承权限?

StarsunYzL 2009-04-19 02:14:06
假设有C:\test\1.txt文件,下面的代码可以添加Guest用户的完全控制权限到该文件,但是如果C:\test文件夹设置了其它用户的权限的话,那C:\test\1.txt文件就会继承到这些权限,怎么让C:\test\1.txt文件仅仅包含我添加的Guest权限,而不继承父文件夹的权限?


#include <windows.h>
#include <tchar.h>
#include <AclAPI.h>

int _tmain()
{
PACL pNewAcl;
EXPLICIT_ACCESS ea;

BuildExplicitAccessWithName(&ea, _T("Guest"), GENERIC_ALL, SET_ACCESS, NO_INHERITANCE);
SetEntriesInAcl(1, &ea, NULL, &pNewAcl);

SetNamedSecurityInfo(_T("C:\\test\\1.txt"), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, pNewAcl, NULL);

LocalFree(pNewAcl);

return 0;
}


MSDN说SetNamedSecurityInfo会自动传播继承权限,那哪个API才能做到不继承权限?
...全文
580 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
s393658806 2009-04-20
  • 打赏
  • 举报
回复

学习
StarsunYzL 2009-04-19
  • 打赏
  • 举报
回复
已经搞定了,虽然代码感觉不大优雅,谢谢大家帮助
先不结贴,希望有更好的代码


#include <windows.h>
#include <tchar.h>
#include <AclAPI.h>
#include <Lmcons.h>

int _tmain()
{
BOOL bRet = FALSE;
PSECURITY_DESCRIPTOR pSD;
PACL pNewDacl;
EXPLICIT_ACCESS ea;

GetNamedSecurityInfo(_T("C:\\test\\1.txt"), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION, NULL, NULL, NULL, NULL, &pSD);
SetSecurityDescriptorControl(pSD, SE_DACL_PROTECTED, SE_DACL_PROTECTED);

BuildExplicitAccessWithName(&ea, _T("Guest"), GENERIC_ALL, SET_ACCESS, NO_INHERITANCE);
SetEntriesInAcl(1, &ea, NULL, &pNewDacl);

//当Guest明确被设置拒绝权限时,本进程需要SE_TAKE_OWNERSHIP_NAME权限才能执行成功
if (SetFileSecurity(_T("C:\\test\\1.txt"), DACL_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION, pSD)
&& SetNamedSecurityInfo(_T("C:\\test\\1.txt"), SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, pNewDacl, NULL) == ERROR_SUCCESS)
bRet = TRUE;

LocalFree(pNewDacl);
LocalFree(pSD);

return bRet;
}
StarsunYzL 2009-04-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 suzhijie325 的回复:]
去掉父目录的权限继承,删除C:\\test\\1.txt的所有权限. 然后把设置你自己的权限.
[/Quote]

不一定是从父目录继承来的,有可能是从父父目录继承来的,得找到继承的源头
biweilun 2009-04-19
  • 打赏
  • 举报
回复
你只能判断下那个目录的权限,然后对文件重新设置权限,去除文件夹的权限。默认直接创建到那个文件夹下就是继承权限的
biweilun 2009-04-19
  • 打赏
  • 举报
回复
想不继承权限不可能,NTFS机制就是如此的
Jamy325 2009-04-19
  • 打赏
  • 举报
回复
去掉父目录的权限继承,删除C:\\test\\1.txt的所有权限. 然后把设置你自己的权限.
1、 如何将FAT文件系统无损转换为NTFS文件夹系统? 答:“计算机→附件→命令提示符”打开命令提示符,或“开始→运行”输入“cmd”打开命令提示符。在命令提示符中输入:convert f:/fs:ntfs即可将F盘文件系统转换为NTFS文件系统 2、 简述NTFS文件文件夹标准权限及特殊权限之间的关系是怎样的?删除文件起码需要什么标准权限? 标准权限文件夹:完全控制,修改,读取和运行,写入,列出文件夹目录,读取 文件:完全控制,修改,读取和运行,写入,读取 特殊权限:“遍历文件夹”权限,“运行文件权限,“列出文件夹”权限,“读取数据”权限,“读取属性”,“读取扩展属性”,“创建文件权限,“写入数据”权限,“创建文件夹”权限,“附加数据”权限,“写入属性”权限,“写入扩展属性”权限,“删除子文件夹和文件权限,“删除”权限,“取得所有权”权限 标准权限及特殊权限之间的关系: 标准权限 特殊权限 完全控制 修改 读取及执行 列出文件夹内容(仅文件夹) 读取 写入 遍历文件夹/执行文件 x x x x 列出文件夹/读取数据 x x x x x 读取属性 x x x x x 读取扩展属性 x x x x x 创建文件/写入数据 x x x 创建文件夹/附加数据 x x x 写入属性 x x x 写入扩展属性 x x x 删除子文件夹及文件 x 删除 x x 读取权限 x x x x x x 更改权限 x 取得所有权 x 删除文件起码需要“修改”权限 3、 取消文件夹的继承权限,需要如何操作? 打开文件夹的“属性”“安全”对话框 点击“高级”—“权限”—“编辑”。 在“权限”选项卡中清除“包括可从该对象的父项继承下来的权限”,清除之系统提示以前从上一级继承下来的权限是保留还是全部删除,复制——只切断继承,保留原权限;删除——删除所有用户和权限,重新设置权限; 4、 在某分区上设置共享文件夹jmwj,设置允许所有用户读取、管理员可修改的共享权限。 如果该文件夹位于NTFS分区,权限至少为“读取” 设置共享权限: (1)打开“计算机管理”窗口,然后单击“共享文件夹 | 共享”子结点。 (2)在窗口的右边显示出了计算机中所有共享文件夹的信息。如果要建立新的共享文件夹,可通过选择主菜单“操作”中的“新建共享”子菜单,或者在左侧窗口鼠标右击“共享”子结点,选择“新建共享”,打开“共享文件夹向导”,单击“下一步”按钮,打开对话框输入要共享的文件夹路径。 (3)单击“下一步”按钮,输入共享名称、共享描述。 (4)单击“下一步”按钮,设置网络用户的访问权限为“管理员有完全访问权限,其他用户有只读权限”。 5、 设置某文件允许任何域用户阅读、只有网络登录的用户可修改的NTFS权限。 (1)右击文件,选择共享——用户选择“everyone”,权限选择“参与者” (2)右击该文件,选择属性——安全 (3)编辑各个组或用户名,设置所有域用户为“只读”,Network组为“只读”和“修改” 6、 NTFS加密与压缩可同时选用吗?删除用户之前需要注意什么? 答:不能。需要备份加密证书,否则一旦删除用户,他加密的文件就不能打开。 实验: 设置允许所有用户在E盘上最多有500MB的存储空间。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧