我是管理员组的成员。我有一个文件,我可以使用文件属性中的“安全”选项卡将其所有权从我自己更改为 HOSTNAME\Administrators,然后再改回来。
我还可以使用互联网上的这个优秀脚本来获取所有权,该脚本在右键单击文件时会提供一个上下文菜单。
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\runas]
@="Take Ownership"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\*\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
[HKEY_CLASSES_ROOT\Directory\shell\runas]
@="Take Ownership"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\Directory\shell\runas\command]
@="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"
"IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"
但是,当我从目录中打开一个非特权命令提示符时,却拒绝了我的权限,因为我从该命令提示符中调用“takeown”:
C:\path>takeown /f "file"
ERROR: The current logged on user does not have ownership privileges on
the file (or folder) "C:\path\file".
当从非特权资源管理器窗口调用的注册表项可以毫无问题地更改内容时,为什么我需要使用提升的命令提示符来调用明确的管理权限?
答案1
要获得所有权,任何程序都需要明确向 Windows 请求许可SeTakeOwnershipPrivilege
。
看进程权限其定义为:
因此,Windows 资源管理器似乎很小心地为自己分配了此权限,但cmd
只有在以提升的权限执行时才会授予此权限。cmd
从 Windows 资源管理器内部启动的程序将继承其父权限,因此将能够取得所有权。