こんにちは、阿久津です。Windows 7では、ファイルやフォルダ、レジストリキーおよびエントリといった各オブジェクトに対する所有権が厳格化しました。本来はAdministrationsグループに属する管理者権限を持っていれば、OS全体の操作を容易に行なえるのが通例です。

しかしWindows 7では、セキュリティレベルを高めるため、WRP(Windows Resource Protection: Windowsリソース保護)という仕様に基づいて、システムに直結するオブジェクトの所有者を「TrustedInstaller」という特殊なユーザーが持つようになりました。厳密にはWindows Vistaから導入された機能ですが、Windows 7では更に強化されています。

ただしTrustedInstallerは、実在するユーザーやグループではなく、同名のサービスとして起動し、必要に応じて稼働する仕組みです。同サービスの稼働を確認するには、管理ツールからたどって起動する「サービス」ではなく、HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ TrustedInstallerキーをご覧ください(図01~02)。

図01: HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ TrustedInstallerキーを確認しますと、TrustedInstallerが特殊なサービスとして稼働していることを確認できます

図02: TrustedInstallerの実体は「%windir% \ servicing \ TrustedInstaller.exe」。各所に影響を及ぼすため、サービスの稼働状態に対するカスタマイズは避けましょう

TrustedInstallerに関する概略は、本連載の第88回でも述べましたが、コンテキストメニューを自由に拡張できるエクスプローラであれば、コマンドライン操作を埋め込むことが可能です。そこで今回は、エクスプローラのコンテキストメニューに、ファイル・フォルダの所有権を取得する項目を追加するチューニングを紹介しましょう。

1.[Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力してから<OK>ボタンをクリックします。
2.レジストリエディターが起動したら、HKEY_CLASSES_ROOT \ * \ shell \ runasキーまでたどって開きます(ない場合は作成します)。
3.右ペインにある「(既定)」をダブルクリックで開き、値のデータに「所有権の取得」と入力して<OK>ボタンをクリックします。
4.右ペインの何もないところを右クリックし、メニューから<新規>→<文字列値>と選択します。
5.文字列値名を「NoWorkingDirectory」に変更します。
6.ステップ04~05の手順を参考に文字列値「Extended」を作成します。
7.次にHKEY_CLASSES_ROOT \ * \ shell \ runas \ commandキーを開きます(ない場合は作成します)。
8.右ペインにある「(既定)」をダブルクリックで開き、値のデータに「cmd.exe /c takeown /f "%1" /a && icacls "%1" /grant administrators:F」と入力して<OK>ボタンをクリックします。
9.右ペインの何もないところを右クリックし、メニューから<新規>→<文字列値>と選択します。
10.文字列値名を「IsolatedCommand」に変更し、同値をダブルクリックします。
11.ダイアログが起動したら、値のデータに「cmd.exe /c takeown /f "%1" && /a icacls "%1" /grant administrators:F」と入力して<OK>ボタンをクリックします。
12.ステップ02~11と同様の操作を、HKEY_CLASSES_ROOT \ Directory \ shell \ runasキー、およびHKEY_CLASSES_ROOT \ Directory \ shell \ runas \ commandキーに対して行ないます。ただし、「(既定)」「IsolatedCommand」のデータ値に入力するコマンドは「cmd.exe /c takeown /f "%1" /a /r /d y && icacls "%1" /grant administrators:F /t」に変更してください。
13.レジストリエディターを終了させてから、Windows 7に再ログオンします。

これでチューニング終了です(図03~30)。

図03: [Win]+[R]キーを押して「ファイル名を指定して実行」を起動し、テキストボックスに「regedit」と入力して<OK>ボタンをクリックします

図04: レジストリエディターが起動したら、HKEY_CURRENT_ROOT \ *キーまでたどって開き、shellキーを右クリック。メニューから<新規>→<キー>とクリックします

図05: 先ほど作成したキー名を「新しいキー #1」から「runas」に変更してください。続いて同キーを選択し、右ペインの「(既定)」をダブルクリックします

図06: ダイアログが起動したら、値のデータに「所有権の取得」と入力して<OK>ボタンをクリックします

図07: runasキーを選択した状態で、右ペインの何もないところを右クリック。メニューから<新規>→<文字列値>と選択します

図08: 先ほど作成した文字列値名を「新しい値 #1」から「NoWorkingDirectory」に変更します

図09: runasキーを選択した状態で、右ペインの何もないところを右クリック。メニューから<新規>→<文字列値>と選択します

図10: 先ほど作成した文字列値名を「新しい値 #1」から「Extended」に変更します

図11: 今度はrunasキーを右クリックし、メニューから<新規>→<キー>とクリックします

図12: 先ほど作成したキー名を「新しいキー #1」から「command」に変更してください。続いて同キーを選択し、右ペインの「(既定)」をダブルクリックします

図13: ダイアログが起動したら、値のデータに「cmd.exe /c takeown /f "%1" /a && icacls "%1" /grant administrators:F」と入力して<OK>ボタンをクリックします

図14: commandoキーを選択した状態で、右ペインの何もないところを右クリック。メニューから<新規>→<文字列値>と選択します

図15: 先ほど作成した文字列値名を「新しい値 #1」から「IsolatedCommand」に変更してください。続いて同文字列値をダブルクリックします

図16: ダイアログが起動したら、値のデータに「cmd.exe /c takeown /f "%1" /a && icacls "%1" /grant administrators:F」と入力して<OK>ボタンをクリックします

図17: 今度はHKEY_CLASSES_ROOT \ Directoryキーを開き、shellキーを右クリック。メニューから<新規>→<キー>とクリックします

図18: 先ほど作成したキー名を「新しいキー #1」から「runas」に変更してください。続いて同キーを選択し、右ペインの「(既定)」をダブルクリックします

図19: ダイアログが起動したら、値のデータに「所有権の取得」と入力して<OK>ボタンをクリックします

図20: runasキーを選択した状態で、右ペインの何もないところを右クリック。メニューから<新規>→<文字列値>と選択します

図21: 先ほど作成した文字列値名を「新しい値 #1」から「NoWorkingDirectory」に変更します

図22: runasキーを選択した状態で、右ペインの何もないところを右クリック。メニューから<新規>→<文字列値>と選択します

図23: 先ほど作成した文字列値名を「新しい値 #1」から「Extended」に変更します

図24: 今度はrunasキーを右クリックし、メニューから<新規>→<キー>とクリックします

図25: 先ほど作成したキー名を「新しいキー #1」から「command」に変更してください。続いて同キーを選択し、右ペインの「(既定)」をダブルクリックします

図26: ダイアログが起動したら、値のデータに「cmd.exe /c takeown /f "%1" /r /d y && icacls "%1" /grant administrators:F /t」と入力して<OK>ボタンをクリックします

図27: commandoキーを選択した状態で、右ペインの何もないところを右クリック。メニューから<新規>→<文字列値>と選択します

図28: 先ほど作成した文字列値名を「新しい値 #1」から「IsolatedCommand」に変更してください。続いて同文字列値をダブルクリックします

図29: ダイアログが起動したら、値のデータに「cmd.exe /c takeown /f "%1" /r /d y && icacls "%1" /grant administrators:F /t」と入力して<OK>ボタンをクリックします

図30: 一連の操作を終えたら、<×>ボタンをクリックしてレジストリエディターを終了し、<スタート>メニューの電源ボタンから<ログオフ>を選択して、Windows 7に再ログオンします

それでは結果を確認しましょう。所有権を変更したいファイルもしくはフォルダを[Shift]キーを押しながら右クリックし、メニューから<所有権の取得>をクリックします。今回は例としてInternet Explorerフォルダを使用していますが、容易に環境を復元できない場合は任意のフォルダを作成し、以前の記事を参考に所有権をadministratorsグループに属していないユーザーに変更してからお試しください(図31)。

図31: 所有権を変更するファイルやフォルダを[Shift]キーを押しながら右クリックし、メニューから<所有権の取得>をクリックします。これでコマンドプロンプトが起動し、各コマンドが実行されます

これでコマンドプロンプトが起動し、チューニングで行なった「takeown.exe」「icacls.exe」コマンドが順番に実行されます。続いてプロパティダイアログを起動し、セキュリティの詳細設定ダイアログから所有者を確認してください。「Internet Explorer」フォルダの初期所有者は「TrustedInstaller」ですが、前述のコマンドを実行することで「Administrators」グループに変更されます(図32~34)。

図32: 所有権を確認するには、ファイルやフォルダを右クリックし、メニューから<プロパティ>をクリックします

図33: プロパティダイアログが起動したら、<セキュリティ>タブにある<詳細設定>ボタンをクリックします

図34: 「~セキュリティの詳細設定」ダイアログが起動したら<所有者>タブをクリックして開きましょう。「現在の所有者」が「TrustedInstaller」から「Administrators」グループに変更されていれば正しく動作しています

さて、本チューニングを簡単に解説しましょう。まず「takeown.exe」は、ファイルやフォルダの所有権を割り当て直すコマンドです。ファイルに対しては、管理者に所有権を与える「/a」オプション。フォルダに対しては、フォルダ内のファイルやサブフォルダに対しても所有権の割り当て直す「/r」オプションと、確認メッセージの自動応答を行なう「/d」オプションを使用しました。

次に実行している「icacls」は、アクセス権の変更を行なうコマンドです。そもそも所有権を変更する時点で、そのファイルやフォルダに対して変更などの操作を行なうのが常となりますので、今回はAdministratorsグループに対してすべての操作を許可する「/grant administrators:F」を追加しました。なお、フォルダに対する操作は、フォルダ内のファイルやサブフォルダに対してもアクセス権を変更する「/t」オプションを使用しています。

なお、今回のチューニングで行なっている内容自体は簡単ですが、操作が煩雑になりましたので、レジストリファイルを用意しました(ファイルはこちら)。ファイルをダウンロードしてチューニングの補助にお使いください。また、本チューニングを無効にする場合は、HKEY_CLASSES_ROOT \ * \ shell \ runasキーおよび、HKEY_CLASSES_ROOT \ Directory \ shell \ runasキーを削除し、Windows 7に再ログオンします。

それでは、また次号でお会いしましょう。

阿久津良和(Cactus)