我正在尝试在 Windows 10(家庭版)上使用 python 创建符号链接,如下所示。代码:
import ctypes
kdll = ctypes.windll.LoadLibrary("kernel32.dll")
kdll.CreateSymbolicLinkW(src_dir, dst_dir, 1)
但我明白了。错误:
*** error: (1314, 'CreateSymbolicLink', 'A required privilege is not held by the client.')
如何解决这个问题?
如果启用了 UAC 并且您的用户是管理员,则本地安全机构(LSA,托管在 lsass.exe 中)使用受限访问令牌登录您的用户。对于此令牌,
BUILTIN\Administrators
组仅用于拒绝访问;完整性级别标签为中而不是高;通常授予管理员的权限已被过滤掉。
要创建符号链接,您需要使用无限制/提升的访问令牌(即从中完整性级别提升到高完整性级别)来创建进程。通过右键单击并选择“以管理员身份运行”来执行此操作。此提升的令牌将由子进程继承,因此只需从提升的命令提示符运行 Python 脚本即可,您可以通过键盘快捷键 Win+X A 打开该命令提示符。您可以通过运行
whoami /priv
并检查 SeCreateSymbolicLinkPrivilege
是否存在来验证 cmd shell 是否已提升。如果该状态被禁用,请不要惊慌。 Windows CreateSymbolicLink
功能会自动启用此权限。
也就是说,既然您正在创建一个 directory 符号链接,那么也许连接也可以正常工作。创建连接不需要特殊权限。您可以使用 cmd 的
mklink
命令创建连接。例如:
subprocess.check_call('mklink /J "%s" "%s"' % (link, target), shell=True)
https://www.scivision.dev/windows-symbolic-link-permission-enable/
打开gpedit.msc
计算机配置 → Windows 设置 → 安全设置 → 本地策略 → 用户权限分配 → 创建符号链接
输入用户名,然后单击“检查名称”,然后单击“确定”。
重新启动计算机
如今,创建符号链接的最简单方法是启用开发人员模式。
转到
Settings > System > For Developers
,然后将Developer Mode
转到on
。立即,应该可以创建符号链接。
(在 Windows 10 上,位于
Settings > Privacy & Security > For Developers
下)。