クライアントの偽装 (承認)
偽装 は、スレッドを所有するプロセスとは異なるセキュリティ情報を使用して実行するスレッドの機能です。 通常、サーバー アプリケーション内のスレッドはクライアントを偽装します。 これにより、サーバー スレッドは、そのクライアントに代わって、サーバー上のオブジェクトにアクセスしたり、クライアント独自のオブジェクトへのアクセスを検証したりできます。
Microsoft Windows API には、偽装を開始するための次の関数が用意されています。
- DDE サーバー アプリケーションは、DdeImpersonateClient 関数を呼び出して、クライアントを偽装できます。
- 名前付きパイプ サーバーは、ImpersonateNamedPipeClient 関数を呼び出すことができます。
- ImpersonateLoggedOnUser 関数を呼び出して、ログオンしているユーザーの アクセス トークンのセキュリティ コンテキストを偽装できます。
- ImpersonateSelf 関数を使用すると、スレッドは独自のアクセス トークンのコピーを生成できます。 これは、アプリケーションが 1 つのスレッドのセキュリティ コンテキストを変更する必要がある場合に便利です。 たとえば、特権を有効にする必要があるプロセスのスレッドが 1 つだけ場合があります。
- SetThreadToken 関数を呼び出して、指定された 偽装トークンのセキュリティ コンテキストでターゲット スレッドを実行させることができます。
- Microsoft リモート プロシージャ コール (RPC) サーバー アプリケーションは、RpcImpersonateClient 関数を呼び出してクライアントを偽装できます。
- セキュリティ パッケージ またはアプリケーション サーバーは、ImpersonateSecurityContext 関数を呼び出してクライアントを偽装できます。
これらの偽装のほとんどでは、偽装スレッドは、RevertToSelf 関数を呼び出すことによって、独自のセキュリティ コンテキストに戻すことができます。 RPC サーバー アプリケーションが RpcRevertToSelf呼び出すか、RpcRevertToSelfExをして独自のセキュリティ コンテキストに戻す RPC 偽装は例外です。
注: Win32 サービスからユーザーを偽装していて、ユーザー環境変数に依存する API を呼び出している場合は、偽装を行う前に RegDisablePredefinedCache呼び出す必要があります。