したがって、ご存知かもしれませんが、レジストリHive HKEY_LOCAL_MACHINE\BCD00000000
は実際にはシステムBCDストアです。これは、(管理者として)BCDEDIT
コマンドを実行したときに表示される情報と同じです。
ただし、管理者としてregeditを実行し、そこにある値のいずれかを手動で編集しようとすると、エラーCannot edit <value_name>: Error writing the value's new contents
が発生します。同様に、Windows API関数 RegSetValueEx
がこのサブキーの値を変更しようとすると、管理者として実行されているアプリケーションであっても失敗します。
それでも、BCDEDIT
コマンドはこのストアからアイテムを問題なく挿入、更新、削除でき、変更はレジストリにも表示されます。
BCDEDIT
が行うことと、レジストリを手動で編集することの違いは何ですか?
一言で言えば:パーミッション。
詳述する…
BCDはブートドライブ(通常は約100MBのNTFSボリューム)に保存されます。デフォルトでは非表示になっていますが、ディスクの管理MMCスナップイン(diskmgmt.msc
)を使用してドライブ文字を割り当てることができます。次に、Boot
ディレクトリを確認できます。ブート構成データを含む通常のレジストリハイブ形式のファイルであるファイルBCD
を参照してください。
明らかに、ブートデータは非常に機密性が高く、失敗の最初の行です。システムファイルの混乱は比較的簡単に修正できますが、修復を行うには何かを実行する必要があります。ブートファイルがめちゃくちゃになると、何も実行されず、消灯します。 (それでも修正可能ですが、自動的ではありません。ブートディスクやインストールディスクを使用するなど、意図的な手動の介入が必要になります。)
起動データは重要であるため、Windowsでは簡単に混乱することはありません。レジストリエディタを使用してブートデータを直接編集すると、無効または競合する値の設定、無効または無効な全体の追加、必須エントリの削除などが可能になります。BCDの変更をbcdedit
に制限すると、実行可能な損傷を制限するのに役立つ有効な値への変更(問題を完全に排除するわけではありません。システムを強制終了することはできますが、少なくとも考えられる問題の大部分を排除します)。
BCD00000000
ブランチの権限を調べると、SYSTEMアカウントにFull Control
が設定されていることがわかりますが、管理者グループにはSpecial
権限があり、これはRead-Only
とWriteDac
を付与するだけです。権限を設定する機能。 (基本ダイアログにはSYSTEMにもSpecial
アクセスがあることが示されているため、[Advanced]
ボタンをクリックする必要がある場合がありますが、高度なセキュリティ設定ダイアログには、Full Control
に正しく設定されていることが表示されます。)
Regedit(昇格された特権が必要)を実行すると、ユーザーアカウントのコンテキストで実行され、管理者グループのアクセス許可を取得するため、書き込みはできません。 bcdedit
コマンドを使用すると、書き込み権限を持つSYSTEMアカウントコンテキストで実行されます。タスクマネージャーでユーザー名列を有効にすると、Regeditがユーザーアカウントによって実行され、bcdedit
が実行されていることがわかります。システムによる。
Regeditを使用してBCDを直接編集することはお勧めできません。必要になることはめったにありませんが、本当に必要な場合は、BCD00000000
ブランチへの書き込みアクセスを自分に許可する方法があります。もちろん、後で許可を取り消すことを忘れないようにする必要があるため、これはお勧めしません。より簡単な方法は、単純に SYSTEMコンテキストでRegeditを実行する です。
@Synetechは回避策を提案しました。特に、runasシステムを備えたもの。しかし、私は編集するための1つの簡単な方法を提案したいと思います。
BCD00000000
ハイブ。起動時にのみ必要になるため、これを行うことができます。 (選択->ファイル->ハイブのアンロード...)再度ロードする必要はありません。ただし、BCDファイルのバックアップコピーを作成し、編集後に再起動することをお勧めします。
レジストリエディタを使用して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つの「場所」の同期があります。
NVRAM(その一部)
EFIシステムパーティションのBCD
レジストリのHKLM\BCD00000000ブランチ
Microsoftのドキュメントによると、これはBCDを編集するための2つの「合法的な」方法にすぎません。
bcdeditの使用(単一のコマンドまたはスクリプトによる)
bCD WMIプロバイダーインターフェイスの使用(プログラムによる編集方法)
Regeditを使用して、アクセス許可を確認します。デフォルトでは、管理者はその1つまたは複数のサブキーへの書き込みアクセス権を持っていないことに注意してください。管理者にはDACを変更する権限、つまり権限があるように思われるので、それを試してみてください。