レジストリを使用したプロセス全体のセキュリティの設定
プロセス全体にセキュリティを設定する場合、解決策の 1 つは、必要なセキュリティ レベルをレジストリに設定することです。 アプリケーションで CoInitializeSecurity を呼び出すことができない場合、またはプログラムによるセキュリティを使用しない場合は、これが適切なオプションである可能性があります。 レジストリを使用してプロセス全体のセキュリティを設定する場合は、プログラム COM 内で CoInitializeSecurity を呼び出すと、CoInitializeSecurity の値が使用され、レジストリ値が無視されることに注意する必要があります。
アプリケーションのレジストリにセキュリティを設定するには、次の 2 つの方法があります。
- Dcomcnfg.exe を使用すると、セキュリティ値を変更するための簡単なユーザー インターフェイスが提供されます。 すべての COM サーバーは、Dcomcnfg.exe を使用して構成できます。 詳細については、「DCOMCNFG を使用したプロセス全体のセキュリティの設定」を参照してください。 ただし、クライアントが GUID を作成してレジストリに入力しない限り、クライアント アプリケーションは通常 Dcomcnfg.exe に表示されません。
- アプリケーションの AppID キーの下にセキュリティ値を設定できます。 このトピックの残りの部分では、AppID キーを使用してレジストリのセキュリティを設定する方法について説明します。
AppID は、1 つ以上のクラスのサーバー プロセスを表す GUID です。 各クラスは 1 つの AppID に厳密に関連付けられます。AppID は EXE にのみ割り当てることができます。 DLL は、サロゲートで実行されていない限り、AppID を取得しません。その場合、AppID を持つのはサロゲート プロセスです。 複数の DLL がサロゲートにロードされる場合、各サロゲートには AppID が 1 つだけあります。
一部の COM サーバーでは、登録コードによって AppID が生成され、AppID を実行可能ファイルの名前にマップするエントリがレジストリに配置されます。 ただし、一部の COM サーバーではこの機能は提供されません。 ただし、dcomcnfg.exe の実行時にサーバーの登録コードによって HKCR\CLSID{ServerCLSID}\LocalServer32 のエントリが追加されると、CLSID の AppID が自動的に追加されます。
サーバーではない COM クライアントの場合、クライアントは登録されないため、このマッピングは作成されません。 そのため、AppID キーを使用してセキュリティを設定するには、レジストリ関数を使用するか regedit を使用して、必要なレジストリ エントリをプログラムで作成する必要があります。
AppID キーの下でレジストリにプロセス全体のセキュリティを設定する場合は、管理者アクセス許可を持たずに設定できる名前付き値が AppID キーの下に 2 つあることに注意してください。
AuthenticationLevel と AccessPermission の値は個別に設定され、個別の既定値があります。 AuthenticationLevel 値が存在しない場合は、LegacyAuthenticationLevel 値が既定値として使用されます。 同様に、AccessPermission 値が存在しない場合は、DefaultAccessPermission 値が既定値として使用されます。 ただし、AuthenticationLevel と AccessPermission の値は、次の点で相互に関連しています。
- AuthenticationLevel が none の場合、そのアプリケーションの AccessPermission と DefaultAccessPermission の値は無視されます。
- AuthenticationLevel が存在せず、LegacyAuthenticationLevel が none の場合、そのアプリケーションの AccessPermission と DefaultAccessPermission の値は無視されます。
関連トピック