Почему я получаю ошибку привилегии при запуске «takeown» из командной строки?

501
Zhro

Я являюсь частью группы администраторов. У меня есть файл, который я могу поменять владельцем на 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". 

Почему мне нужно вызывать явное административное разрешение в командной строке с повышенными правами, когда этот параметр реестра, вызываемый из непривилегированного окна обозревателя, может изменить ситуацию без проблем?

2

1 ответ на вопрос

1
harrymc

Чтобы стать владельцем, любая программа должна явно запросить у себя SeTakeOwnershipPrivilegeразрешение Windows.

Посмотрите Привилегии Процесса, где это определено как:

image

Поэтому кажется, что Windows Explorer позаботился о том, чтобы выделить себе это разрешение, но cmdоно предоставляется только при выполнении с повышенными разрешениями. cmdЗапущен изнутри Windows Explorer, унаследует его родительские права, и так будет в состоянии взять на себя ответственность.