Programming Field

Reg Flags - DOS/コマンドプロンプト コマンド一覧

[Windows Vista 以降] レジストリ仮想化に関するフラグを取得・設定します。Regの操作の1つです。

構文

reg[.exe] flags <key> query [/reg:[32|64]]
reg[.exe] flags <key> set
  [DONT_VIRTUALIZE] [DONT_SILENT_FAIL] [RECURSE_FLAG] [/reg:[32|64]]

オプション一覧

<key> フラグを取得または設定するキーを指定します。キーは HKEY_LOCAL_MACHINE\Software\ (または HKLM\Software\) で始まるキーである必要があります。
query キーに設定されているフラグの状態を出力します。REG_KEY_DONT_VIRTUALIZEREG_KEY_DONT_SILENT_FAILREG_KEY_RECURSE_FLAG の3つの状態が出力されます。(種類については解説を参照)
set [DONT_VIRTUALIZE] [DONT_SILENT_FAIL] [RECURSE_FLAG]

キーにフラグを設定します。DONT_VIRTUALIZEDONT_SILENT_FAILRECURSE_FLAG の中から0個以上選んで設定します(フラグを設定する場合は指定、設定しない場合は未指定にします)。1つも選ばなかった場合はすべてのフラグがCLEAR(設定なし)状態になります。

※ フラグ名は大文字・小文字は問われません。

/reg:[32|64]

64ビット版と32ビット版(WOW64)の環境がある場合、「/reg:32」を指定すると32ビット版アプリケーションが使用するレジストリデータ(HKLMの場合は「HKLM\Software\WOW6432Node」以下など)、「/reg:64」を指定すると64ビット版アプリケーションが使用するレジストリデータを参照します。

なおこのオプションを省略した場合は、実行されるReg.exeが64ビット版であれば64ビット版、32ビット版(%SystemRoot%\SysWOW64 以下にあるもの)であれば32ビット版のレジストリを参照します。何らかのアプリケーションのレジストリデータを参照する場合は、そのアプリケーションの32ビット/64ビットが分かっているのであれば明示的にこのオプションを指定して曖昧さを回避することができます。

※ Reg.exeが32ビット版であっても「/reg:64」によって64ビット版のレジストリを参照することができます。
※ 64ビット版Reg.exeであれば、32ビット版のレジストリを参照する際に直接「HKLM\Software\WOW6432Node」以下などのキーを指定することも可能です。

解説

Regの「FLAGS」コマンドはWindows Vista以降で導入された「レジストリ仮想化」において利用されるフラグを管理する際に用います。レジストリ仮想化においては、32ビットアプリケーションが管理者権限などを持たない状況下で「HKEY_LOCAL_MACHINE\Software」以下のキーに書き込みを行おうとしたときに、代わりに仮想化ストアである「HKEY_USERS\<sid>_Classes\VirtualStore\Machine\Software」以下のキーに書き込みが行われます。(読み取る際は元のキーと VirtualStore 以下のキーのデータがマージ(VirtualStore 以下が優先)された状態で扱われます。)

仮想化においてはキーごとにフラグを持っています。フラグは3種類あり、それぞれ以下の意味があります。

※ 「set」で設定する場合は先頭の「REG_KEY_」を省略して指定します

REG_KEY_DONT_VIRTUALIZE アプリケーションが(HKEY_LOCAL_MACHINE\Software以下の)レジストリに書き込もうとしたとき、権限がない場合に仮想ストアを使わずに失敗させるようにします。つまるところ「仮想化を無効」にします。
REG_KEY_DONT_SILENT_FAIL アプリケーションが(HKEY_LOCAL_MACHINE\Software以下の)レジストリをオープンしようとしたときに、権限不足などの理由で失敗した際、仮想化の対象であれば通常はMAXIMUM_ALLOWEDの権限で再度オープンしますが、このフラグを設定した場合それをせずに失敗扱いになるようにします。
REG_KEY_RECURSE_FLAG 仮想化のフラグ(このフラグを含む)を子キーに伝播させるようにします。伝播対象はこのフラグがセットされてから作成された子キーとなり、既に作成済みのキーに対しては伝播しません。

サンプル

reg flags HKLM\Software\MyApp set DONT_VIRTUALIZE

「HKEY_LOCAL_MACHINE\Software\MyApp」キーを仮想化の対象から外すようにします。このキー以下に権限のないアプリケーションがキーや値を書き込もうとした場合、失敗するようになります。