13

新しいプロパティ ページを Active Directory スナップインにインストールするには、W2K8 R2 の次のレジストリ キーに書き込む必要があります ( Microsoft の文書によると) 。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MMC\SnapIns{E355E538-1C2E-11D0-8C37-00C04FD8FE93}\NodeTypes

このキーは、TrustedInstallerという特別なユーザーが所有しています。私はそれについてNET上でたくさんのものを見つけました。

現時点では、次のように動作します (ユーザーは管理者グループのメンバーです)。

  1. ユーザーに所有権を取得する権限を与えます。
  2. ユーザーが所有権を取得
  3. ユーザーはレジストリを書き込みます
  4. ユーザーは管理者グループに所有権を与えます。

私のプロジェクトは完全に C# で書かれており、私のやり方には気に入らない点が 2 つあります。

  • InteropServices を使用して Win32 AdjustTokenPrivileges API を呼び出します。純粋な C# でそれを行う方法を知っている人はいますか?
  • 最終的に、TrustedInstaller はキーの所有者ではなくなり、私は彼に所有権を与えることができません。彼は完全な制御を保持していますが、スナップインのインストール後にサーバーが破損していると分類されたくありません。

だから私の質問は:私は何かを見逃していますか、変更可能として文書化されているそのようなキーを変更する文書化された方法はありますか?

それについてはスタックオーバーフローの質問があります.TrustedInstallerの所有権は、キーがアプリケーションのインストールではなくシステムのインストールの一部であることを意味します。私にとって、Microsoft がキーを変更する方法を文書化する場合、それはアプリケーションのインストールです。

前もって感謝します。

4

3 に答える 3

6

だから私は私の問題の1つを見つけました。

リソースの所有権を取得する場合は、SeTakeOwnershipPrivilegeを有効にするために追加して、所有者の SID を変更できます。ただし、新しい所有者 Sid は呼び出し元のトークンに含まれている必要があり、さらに、その Sid には属性 SE_GROUP_OWNER が含まれている必要があります。したがって、私の場合、SID 所有者をS-1-5-80-956008885-3418522649-1831038044-1853292631-2271478464 (TrustedInstaller) に戻すことができませんでした。所有権を取得するか、グループ「管理者」に所有権を与えることができました。SID がトークンに含まれていなくても、任意のユーザーを所有者として割り当てることができる回避策の王様がいることがわかりました。管理者とバックアップ オペレータに付与されているが、有効になっていないSeRestorePrivilege特権デフォルトで。これを有効にすると、所有権を TrustedInstaller に戻すことができます。

したがって、次のように動作します(ユーザーは管理者グループのメンバーです):

  1. ユーザーに所有権を取得する権限を与え、復元の権限を有効にします
  2. ユーザーが所有権を取得
  3. ユーザーがレジストリを書き込みます
  4. ユーザーは以前の所有者 TrustedInstaller に所有権を与えます。

InteropServices を使用して Win32 AdjustTokenPrivileges API を呼び出していますが、C# でそれを行う唯一の方法のようです。

TrustedInstaller に所有権を返還できる小さなツールをブログに投稿する予定です。


編集済み: 遅れて申し訳ありませんが、忘れてしまいました。Gistでコードを見つけることができます。

于 2011-05-24T17:18:06.377 に答える
3

MSIインストーラでレジストリテーブルを使用する場合は、問題なくエントリを記述できるはずです。これは、インストールプロセスがTrustedInstallerアカウントで実行されるためです(所有権を変更する必要はありません)。

編集:Windows保護システムの下にあるレジストリキーに書き込もうとしているようです。この場合、TrustedInstallerアカウントは重要ではありません。

基本的に、通常のMSIは、Windowsによって保護されているため、そのキーに書き込むことはできません。プロパティページをインストールするための別のアプローチを見つける必要があります。

于 2011-03-29T06:31:40.727 に答える
3

管理者 (マニフェストで UAC 実行レベルとして有効にすることを忘れないでください'requireAdministrator') または特権を持つ他のユーザーとしてプログラムを実行する場合は、SE_RESTORE_NAME特権を有効にしてからフラグ付きでRegCreateKeyExを使用できREG_OPTION_BACKUP_RESTOREます。RegOpenKeyEx (ulOptionsパラメーターを参照) で同じフラグを使用できますが、文書化されていないため、代わりにRegCreateKeyExを使用することをお勧めします。RegSetValueEx返されたキーハンドルを使用して、たとえばに関して値を設定できます。このようにして、任意のレジストリ キーを設定できます。さらに特権を有効にするSE_BACKUP_NAMEと、任意のレジストリ キーを読み取ることができます (たとえば、HKEY_LOCAL_MACHINE\SECURITYまたはからHKEY_LOCAL_MACHINE\SAM\SAM)。

于 2011-05-02T09:36:50.333 に答える