c++怎么在Windows下设置文件的安全访问控制列表(ACL)权限【底层】

SetNamedSecurityInfo 是 Windows 底层直接设置文件 ACL 的标准 API,需管理员权限、绝对路径,全量替换 DACL;构造时用 EXPLICIT_ACCESS 数组经 SetEntriesInAcl 生成 ACL,注意权限掩码、Trustee 形式及 SID 使用。怎么用 SetNamedSecurityInfo 设置文件 ACL(Windows 底层)直接调用 SetNamedSecurityInfo 是 Windows 下最接近"底层"的标准方式------它绕过 Shell、不依赖 PowerShell,也不走 .NET 封装,直接和 LSASS 通信。但必须注意:这不是"设置权限",而是"替换整个 DACL",搞错结构体或参数会直接锁死文件。必须以管理员权限运行进程,否则 ERROR_ACCESS_DENIED(即使你是文件所有者)SE_PRIVILEGE_ENABLED 权限不是默认开启的,得先用 AdjustTokenPrivileges 提权目标路径必须是绝对路径,相对路径会导致 ERROR_INVALID_PARAMETERACL 不是"追加"而是"全量替换",原 ACL 里已有的 ACE(比如 SYSTEM 的 FullControl)若没显式写进新 DACL,就会被删掉怎么构造正确的 EXPLICIT_ACCESS 并转成 ACL很多人卡在把"给 Users 组加读取"这种自然语言,翻译成 Win32 安全描述符结构。核心是两步:填 EXPLICIT_ACCESS 数组 → 调 SetEntriesInAcl 合成 ACL*。grfAccessMode 选 GRANT_ACCESS(不是 SET_ACCESS,后者会清空同类型旧 ACE)Trustee.TrusteeForm 必须是 TRUSTEE_IS_NAME,不能用 TRUSTEE_IS_SID 直接传字符串 SID,否则解析失败用户/组名必须用本地化名称(如中文系统写 "Users" 不行,得写 "用户" 或更稳妥的 SID 字符串 "S-1-5-32-545")dwAccessPermissions 推荐用 GENERIC_READ | GENERIC_EXECUTE,别硬凑 FILE_READ_DATA | FILE_EXECUTE,容易漏 FILE_LIST_DIRECTORY 导致目录打不开为什么 GetNamedSecurityInfo 返回的 DACL 总是 NULL不是代码写错了,大概率是没请求 OWNER_SECURITY_INFORMATION | GROUP_SECURITY_INFORMATION | DACL_SECURITY_INFORMATION 这三个 flag 的组合。单独传 DACL_SECURITY_INFORMATION 会被系统忽略,返回空 DACL。调用 GetNamedSecurityInfo 时,securityInfo 参数必须至少包含 DACL_SECURITY_INFORMATION + OWNER_SECURITY_INFORMATION返回的 PACL 是只读副本,不能直接修改,必须用 CopySid 和 InitializeAcl 新建一个如果文件继承自父目录,GetNamedSecurityInfo 返回的 DACL 可能含 INHERITED_ACE 标志,但 SetEntriesInAcl 不识别这个标志,得手动清除 ACE_INHERITED_ACE 位再添加用 icacls 验证或回滚时要注意什么命令行工具是调试 ACL 最快的手段,但它和 API 行为不完全一致------比如 icacls file /grant Users:(RX) 默认开启继承,而 SetNamedSecurityInfo 默认关闭继承。 Vozo Vozo是一款强大的AI视频编辑工具,可以帮助用户轻松重写、配音和编辑视频。

相关推荐
青 春 记 忆4 小时前
零基础入门python30:Flask个人账本从空目录运行与阶段验收
python·flask·后端开发
Nontee4 小时前
MySQL 插入冲突了怎么办?两种处理方式入门笔记
数据库·笔记·mysql
ltl4 小时前
Parquet 文件格式:row group、编码与谓词下推索引
数据库
l1258654 小时前
# LangGraph Memory机制深度解析:短期记忆与长期记忆的工程实践
前端·人工智能·python·langchain·bootstrap
ltl4 小时前
PostgreSQL Join 路径:优化器如何选中 Nested Loop
数据库
ltl5 小时前
RocksDB 生产嵌入:Flink、TiKV 与 Kafka Streams 怎么用
数据库
金銀銅鐵6 小时前
斐波那契数列的个位数出现的周期是多少?
python·数学
devilnumber6 小时前
MySQL 性能优化・诗意化记忆
数据库·mysql·性能优化
瀚高PG实验室7 小时前
PostgreSQL pg_basebackup 和 pg_rewind 可覆盖源端超级用户选择的无关文件HGVE-2026-E010
数据库·postgresql·瀚高数据库
whcyhhh7 小时前
头歌实践教学平台:数据科学与大数据技术导论(十二)
大数据·开发语言·python·数据清洗