次の方法で共有


IServerSecurity::ImpersonateClient メソッド (objidl.h)

呼び出し中にサーバーがクライアントを偽装できるようにします。

構文

HRESULT ImpersonateClient();

戻り値

メソッドが成功した場合、戻り値はS_OK。 それ以外の場合は、E_FAIL。

注釈

通常、メソッドはプロセスのアクセス トークンを使用するスレッドで実行されます。 ただし、クライアントを偽装する場合、サーバーはクライアントのセキュリティ コンテキストで実行されるため、サーバーはクライアントがアクセスできるリソースにアクセスできます。 偽装が必要な場合、サーバーは ImpersonateClient メソッドを呼び出して、クライアントの資格情報を表すアクセス トークンを現在のスレッドに割り当てます。 このスレッド トークンは、アクセス チェックに使用されます。 RevertToSelf は、現在のスレッドのアクセス トークンを復元します。

サーバーがクライアントに代わって実行できることは、偽装レベルの定数のいずれかを使用して指定される、クライアントによって設定された 偽装レベルによって異なります。 サーバーは、識別、偽装、または委任レベルで、暗号化された呼び出しでクライアントを偽装する場合があります。 これらの権限借用レベルの詳細については、「偽装 レベル」を参照してください。

偽装時に呼び出されるサーバーに提示される ID は、クライアントによって設定されるクローキング値の種類 (存在する場合) によって異なります。 詳細については、「クローキング」を参照してください。

各メソッド呼び出しの最後に、アプリケーションが呼び出されない場合、COM は RevertToSelf を呼び出します。

従来、偽装情報は入れ子になりません。偽装メカニズムの最後の呼び出しは、以前の偽装をオーバーライドします。 ただし、アパートメント モデルでは、入れ子になった呼び出し中に偽装が維持されます。 したがって、サーバー A が B からの呼び出しを受信し、偽装し、C を呼び出し、D からの呼び出しを受信し、偽装、元に戻し、C から応答を受信した場合、偽装トークンは A ではなく B に設定されます。

非同期呼び出しで偽装を使用する方法については、「偽装 と非同期呼び出し」を参照してください。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリのみ]
対象プラットフォーム Windows
ヘッダー objidl.h (ObjIdl.h を含む)

こちらもご覧ください

CoImpersonateClient

IServerSecurity