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 を含む) |