Chr*_*ris 2 winapi symlink uac kernel32 mklink
我正在尝试使用CreateSymbolicLinkW()函数(来自Kernel32.dll)来创建符号链接.
在相应的计算机上(Win7 Pro x64 SP1):
现在的情况是:
最后一个案例是实际问题.GetLastError返回的错误是:1314(="客户端未保留所需的权限").
为什么在没有升级的进程中管理员用户失败,而它适用于未高效的shell中的任何非管理员用户?
我的代码旨在由任何类型的用户运行,最好是在一个不高的过程中.要求管理员用户提升流程作为一种解决方法是我在任何情况下都要避免的.
使用Windows shell btw中的MKLINK命令也可以重现相同的行为(非升级shell中的admin用户失败,而非升级shell中的所有非管理员用户都失败).
我非常感谢任何想法/建议.提前谢谢了!
编辑:Python 2.7的示例代码:
import ctypes
CreateSymbolicLinkW = ctypes.WinDLL("Kernel32").CreateSymbolicLinkW
CreateSymbolicLinkW(u"c:\\linktest\\testlink.txt", u"c:\\linktest\\testtarget.txt",0)
print(ctypes.WinDLL("Kernel32").GetLastError())
Run Code Online (Sandbox Code Playgroud)
您观察到的行为是由于UAC和默认情况下给予管理员用户的受限令牌.此令牌是通过获取普通管理员用户的令牌并对其进行过滤以删除各种管理员权限而自动创建的.
您可以通过whoami /priv在DOS提示符下运行该命令来查看令牌具有的特权.从提升的提示中,您的令牌将具有比未提升的提示更大的权限集,包括创建符号链接权限.
不幸的是,我不相信有这种方法,因为这正是UAC的设计运作方式.我认为没有办法控制管理令牌的过滤方式,这是关键问题 - 除了完全禁用UAC之外.
| 归档时间: |
|
| 查看次数: |
829 次 |
| 最近记录: |