1

説明

1 つのドライバーがレジストリに混乱を残しました (システムからアンインストールしても)。セキュリティ設定を確認すると、「グループまたはユーザー名」に何も表示されません。そして、所有者を確認すると、「現在の所有者を表示できません。」としか表示されません。レジストリキーを削除したいときは、次のことを行う必要があります。

  1. 所有権を取得します。

  2. グループを追加します。

  3. キーを削除します。

問題は、各レジストリに複数のサブ キーがあり、キーごとにプロセスを繰り返さなければならないことです。権限の継承オプションは、レジストリ エディターでは機能しません。はい、レジストリ エディタを管理者モードで実行しています。

問題

ループしてすべてのキーを削除する単純な C# コードを書きたかったのです。いくつかのコード サンプルを見つけましたが、私の場合、OpenSubKey 呼び出しは次のエラーで失敗します: System.Security.SecurityException: Requested registry access is not allowed. OpenSubKey 関数の呼び出しが失敗した場合、所有権を変更するにはどうすればよいですか? 所有権を主張してからレジストリ キーを削除できる他のコマンドはありますか?

サポートしてくれてありがとう

4

3 に答える 3

2

レジストリ キーを変更/削除するための適切な権限を確実に得るために、レジストリ エディターを管理者として実行することを知っていたように、C# アプリケーションに対しても同じことを行う必要があります。

これをするのを忘れたのでSystem.Security.SecurityException、リマインダーとして がスローされています。例外メッセージにあるように、レジストリ キーを変更または削除する権限がありません。

この問題を解決するには、C# アプリケーションを管理者権限で実行する必要があります。これは手動で行うか、アプリケーションにマニフェストを追加して、管理者特権を自動的に要求するようにすることができます。

于 2013-03-10T11:11:45.713 に答える
0

明確にするために、管理者モードでの実行について話すときは、右クリックして管理者として実行します。これは昇格された特権であり、ダブルクリックするだけでは起こりません。管理者としてログインした場合でも、昇格するには右クリックして管理者として実行する必要があります。

LOCAL_MACHINEではなくCURRENT_USERに書き込むことで修正した私の問題は、昇格と付与によって実際に解決されていないことがわかりました。レジストリに保存されているセキュリティ記述子は、AWOL ドライバーからのガベージ書き込みなどによって破損した可能性があります。これは、自分自身や新しいユーザーを修正するなど、多くのことを行うことができないことを意味します.

権限の問題が解決されるまで、CCleaner を実行できない場合があります。ただし、セーフ モードで起動して sfc /scannow および chkdsk を実行することはできます。sfc は 1 人の問題を同様に修正しましたが、リスクが高い可能性があるため、自己責任で行ってください。 . セーフモード + sfc/scannow

データをバックアップして、できるだけ早く消去します。セキュリティ記述子の破損に関するさまざまな OS の手順を見つけました。

幸運を!

于 2014-04-20T06:09:30.153 に答える
0

これは半分の答えです。

このナレッジ ベース記事では、アクセス権のないキーの所有権を取得する方法について説明します。

つまり、「所有権の取得」権限を有効にして、WRITE_OWNERアクセスできるキーを開く必要があります。その後、所有者を設定できます。

これは、管理者としてコードを実行した場合にのみ機能することに注意してください。

ただし、組み込み関数を使用して C# でこれを実行できるかどうか、または相互運用機能を使用してネイティブ API を呼び出す必要があるかどうかはわかりません。後者の場合、おそらく C/C++ を使用する方が速いでしょう。

または、 SubInAclツールを使用することもできます。ファイル、レジストリ キーなどの所有権を取得できます。

于 2013-03-10T11:35:28.650 に答える