IServerSecurity::ImpersonateClient メソッド (objidlbase.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 |
ヘッダー | objidlbase.h (ObjIdl.h を含む) |