クローキング (コンポーネント サービス)
権限借用の動作を決定する要素は 2 つあります。1 つは、クライアントが権限借用レベルを通してサーバーに明示的に付与する権限と、もう 1 つは、クライアントに代わ って呼び出しを行うときに、サーバーが自身の ID をマスクする機能です。 この後者の機能はクローキングと呼ばれます。 クローキングは、サーバーが呼び出しを行うセキュリティ ID と関係があります。
サーバーはクライアントの権限を借用すると、クライアントのセキュリティ資格情報に直接アクセスすることができます。 非常にローカルな意味では、サーバー スレッドがクライアントの ID を受け取ります。 ただし、サーバーがプロセスの外部で呼び出しを行う場合は、クライアント ID は必ずしも呼び出しが行われる ID として投影されるとは限りません。
クローキングが有効になっている場合、クライアントの権限を借用するサーバーによって行われた呼び出しは、クライアントの ID で行うことができます。 クローキングが無効になっている場合、サーバーによる呼び出しはサーバーの ID で行われます。
さらに、2 つの形態のクローキング、静的クローキングと動的クローキングがあり、これらは次のように記述することができます。
- 静的クローキングを使用した権限借用。 元のクライアント ID (サーバー スレッド トークンとして実現) は、元のクライアント ID をプロキシで 1 回設定して、CoSetProxyBlanket を使用した呼び出しでダウンストリーム サーバーに 1 回提示することができます。そのスレッド トークンは、後続のメソッド呼び出しで使用されます。
- 動的クローキングでの権限借用。 元のクライアント ID は、ダウンストリーム サーバーへの各メソッド呼び出しで、サーバー スレッド トークンとして検出されます。 実際には、提示される ID は動的に決定することができます。 これを行うために必要なオーバーヘッドは、かなり高くなる可能性があります。
COM+ アプリケーションの場合、既定の構成は動的クローキング機能用の構成です。 これは、プログラム上でも管理上でも変更することができます。 動的クローキングはパフォーマンスのオーバーヘッドを伴う可能性がある一方で、最初に権限借用を使用する必要がある状況で通常必要とされる柔軟性を備えています。
クローキングについての詳細と考えられる動作の詳細な説明については、COM ドキュメントの「クローキング」を参照してください。
関連トピック