0

私はこれに対する解決策についてかなり長い間検索してきました。少なくとも私は問題を理解していると思いますが、まだ解決には至っていません。

必要なのは、ある種の実行可能ファイルか、いくつかのレジストリ エントリを削除するスクリプトです。問題は、問題のレジストリ エントリが SYSTEM への読み取り/書き込みアクセスのみを許可し、それ以外のアクセスを許可しないことです。私がそれらを削除できる唯一の方法は、regedit に入り、自分自身を所有者として設定し、最後に全員にフル コントロールを設定することです。そうして初めて、キーを削除できます。ただし、このプロセスを何らかのスクリプトにする必要があります。

そのため、C# では、まずソフトウェアに管理者権限があることを確認します。次に、次のことを実行しようとします。

    RegistryKey reg_localmachine = RegistryKey.OpenRemoteBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, "");
    RegistryKey key = reg_localmachine.OpenSubKey(@"SYSTEM\path to subkey", true);

2 行目で、書き込みアクセスでサブ キーにアクセスしようとすると、「要求されたレジストリ アクセスは許可されていません」という例外が発生します。所有者を変更したり、アクセス許可を付与したりするには、RegistryKey に対して SetAccessControl() を実行する必要があります。アクセス制御を設定するには、キーに対する書き込み権限が必要です。だから私はこのパラドックスにいます。

4

1 に答える 1

1

セキュリティには理由があります。

古いプログラムが入ってきて、レジストリでハッキングを開始できるようにしたくありません。

レジストリの各エントリには、独自のDACLSのセットがあります。解決策は 2 つだけです。

  1. プログラムを実行しているアカウントを、レジストリ エントリを削除する権限を持つアカウントに変更します。

  2. レジストリ エントリのDACLSを変更して、プログラムを実行しているアカウントを含めます。

于 2013-04-16T00:57:03.883 に答える