问题描述
遇到一个奇怪的问题,在磁盘分区根目录(如D盘),可以正常新建文件夹,但新建或复制文件到该根目录时会提示错误0x80070522:客户端没有所需的特权。如下图1.
检查磁盘安全选项卡,确定不是用户或用户组权限不足的问题(测试时,添加并赋予Everyone用户组完全控制的权限,也还是会提示错误)。
原因分析
这个问题出现的原因有很多,比较常见的有人为不恰当的修改磁盘权限、病毒程序破坏性修改删除系统文件/文件夹等等,这些高危操作一旦触发 Windows 底层安全机制,系统对磁盘、文件夹、文件的安全保护会显著得到增强,增强到甚至可能会干扰到用户正常使用的地步。
磁盘根目录无法创建文件的原因是 Windows 底层安全机制之一的强制完整性控制(Mandatory Integrity Control,MIC)在发挥作用。正常情况下,磁盘、文件夹、文件的默认完整性级别为“Midium”(中等),触发防御机制后会被自动调整到“High”或者“System”级别,出现低安全级别的进程无法访问其他对象的异常现象。
解决办法
以管理员身份运行 cmd, 然后输入以下命令:
icacls D: /setintegritylevel M[edium]
::“D:”可以替换为任何无法正常创建文件并提示0x80070522错误的盘符或文件夹路径;
::完整性级别有:L[ow]、M[edium]、H[igh]、S[ystem],可以输入完整单词或单词首字母大写
扩展知识
强制完整性控制、完整性级别不是传统意义上的权限概念(如读、写、执行等),是安全控制属性,它同样会影响权限的实际应用。即,如本文“问题描述”所述,用户即使具有对某个磁盘分区、文件夹、文件的完全控制权限,如果用户进程完整性级别低于文件的完整性级别,那么该用户仍然无法创建或写入文件。
Windows 系统上的每个对象(用户进程、磁盘、文件夹、文件、设备等等)都有自己的完整性级别,类似防火墙 Zone 的概念,只有高完整性级别的对象才能访问/调用低完整性级别的对象。