web-dev-qa-db-ja.com

regeditを使用してシステムBCDストアを編集できないのはなぜですか?

したがって、ご存知かもしれませんが、レジストリHive HKEY_LOCAL_MACHINE\BCD00000000は実際にはシステムBCDストアです。これは、(管理者として)BCDEDITコマンドを実行したときに表示される情報と同じです。

ただし、管理者としてregeditを実行し、そこにある値のいずれかを手動で編集しようとすると、エラーCannot edit <value_name>: Error writing the value's new contentsが発生します。同様に、Windows API関数 RegSetValueEx がこのサブキーの値を変更しようとすると、管理者として実行されているアプリケーションであっても失敗します。

それでも、BCDEDITコマンドはこのストアからアイテムを問題なく挿入、更新、削除でき、変更はレジストリにも表示されます。

BCDEDITが行うことと、レジストリを手動で編集することの違いは何ですか?

6
Govind Parmar

一言で言えば:パーミッション。

詳述する…

ロケーション

BCDはブートドライブ(通常は約100MBのNTFSボリューム)に保存されます。デフォルトでは非表示になっていますが、ディスクの管理MMCスナップイン(diskmgmt.msc)を使用してドライブ文字を割り当てることができます。次に、Bootディレクトリを確認できます。ブート構成データを含む通常のレジストリハイブ形式のファイルであるファイルBCDを参照してください。

理論的根拠

明らかに、ブートデータは非常に機密性が高く、失敗の最初の行です。システムファイルの混乱は比較的簡単に修正できますが、修復を行うには何かを実行する必要があります。ブートファイルがめちゃくちゃになると、何も実行されず、消灯します。 (それでも修正可能ですが、自動的ではありません。ブートディスクやインストールディスクを使用するなど、意図的な手動の介入が必要になります。)

起動データは重要であるため、Windowsでは簡単に混乱することはありません。レジストリエディタを使用してブートデータを直接編集すると、無効または競合する値の設定、無効または無効な全体の追加、必須エントリの削除などが可能になります。BCDの変更をbcdeditに制限すると、実行可能な損傷を制限するのに役立つ有効な値への変更(問題を完全に排除するわけではありません。システムを強制終了することはできますが、少なくとも考えられる問題の大部分を排除します)。

方法

BCD00000000ブランチの権限を調べると、SYSTEMアカウントにFull Controlが設定されていることがわかりますが、管理者グループにはSpecial権限があり、これはRead-OnlyWriteDacを付与するだけです。権限を設定する機能。 (基本ダイアログにはSYSTEMにもSpecialアクセスがあることが示されているため、[Advanced]ボタンをクリックする必要がある場合がありますが、高度なセキュリティ設定ダイアログには、Full Controlに正しく設定されていることが表示されます。)

Regedit(昇格された特権が必要)を実行すると、ユーザーアカウントのコンテキストで実行され、管理者グループのアクセス許可を取得するため、書き込みはできません。 bcdeditコマンドを使用すると、書き込み権限を持つSYSTEMアカウントコンテキストで実行されます。タスクマネージャーでユーザー名列を有効にすると、Regeditがユーザーアカウントによって実行され、bcdeditが実行されていることがわかります。システムによる。

回避策

Regeditを使用してBCDを直接編集することはお勧めできません。必要になることはめったにありませんが、本当に必要な場合は、BCD00000000ブランチへの書き込みアクセスを自分に許可する方法があります。もちろん、後で許可を取り消すことを忘れないようにする必要があるため、これはお勧めしません。より簡単な方法は、単純に SYSTEMコンテキストでRegeditを実行する です。

6
Synetech

@Synetechは回避策を提案しました。特に、runasシステムを備えたもの。しかし、私は編集するための1つの簡単な方法を提案したいと思います。

  1. アンロードBCD00000000ハイブ。起動時にのみ必要になるため、これを行うことができます。 (選択->ファイル->ハイブのアンロード...)
  2. レジストリハイブとしてディスクからBCDファイルをロードします。 (そのファイルが見つからない場合は、 ボリュームにドライブ文字を割り当てます。
  3. 簡単に編集してください。

再度ロードする必要はありません。ただし、BCDファイルのバックアップコピーを作成し、編集後に再起動することをお勧めします。

2
ST3

レジストリエディタを使用してBCD00000000ブランチを直接編集することはお勧めしません。

このブランチの下には、保護されたシステムファイルである「システムBCD」のコピーがあります。

システムは、「システムBCD」ファイルとレジストリブランチBCD00000000の同期を維持します。

BCDにはいくつかの構造があります。オブジェクトのコレクションであり、各オブジェクトには再びその構造(要素のリスト)があります。

ほとんどの要素は単純な文字列または数値(整数、16進数)です。ただし、一部の整数は列挙型であり、コンテキスト(!)に依存します。

一部の要素は、たとえばVHDデバイスのデバイス要素のように複雑な構造を持つオブジェクトにすることができます。

BCDのすべての要素またはオブジェクトを編集するには、コマンドラインツール "bcdedit"を使用するか、 "Visual BCD Editor" -完全なGUIBCDエディターを使用できます。

Visual BCD Editorは、BCDアクセス用のBCD WMIプロバイダーインターフェイス(BCDアクセス用のAPI)を使用します。

UEFIシステムでは、状況はさらに複雑になります(BCDはNVRAMの一部もミラーリングします)。したがって、3つの「場所」の同期があります。

  1. NVRAM(その一部)

  2. EFIシステムパーティションのBCD

  3. レジストリのHKLM\BCD00000000ブランチ

Microsoftのドキュメントによると、これはBCDを編集するための2つの「合法的な」方法にすぎません。

  1. bcdeditの使用(単一のコマンドまたはスクリプトによる)

  2. bCD WMIプロバイダーインターフェイスの使用(プログラムによる編集方法)

1
snayob

Regeditを使用して、アクセス許可を確認します。デフォルトでは、管理者はその1つまたは複数のサブキーへの書き込みアクセス権を持っていないことに注意してください。管理者にはDACを変更する権限、つまり権限があるように思われるので、それを試してみてください。

1
kreemoweet