web-dev-qa-db-ja.com

コマンドラインから「takeown」を実行すると、特権エラーが発生するのはなぜですか?

私はAdministratorsグループの一員です。所有権を自分から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
Zhro

所有権を取得するには、プログラムはWindowsからSeTakeOwnershipPrivilege権限を明示的に要求する必要があります。

プロセス特権 を参照してください。ここで、これは次のように定義されます。

image

したがって、Windowsエクスプローラーが自分自身にこのアクセス許可を割り当てるように注意したように見えますが、cmdの場合、昇格されたアクセス許可で実行する場合にのみ許可されます。 Windowsエクスプローラー内から起動されたcmdは、その親のアクセス許可を継承するため、所有権を取得できます。

1
harrymc