クライアントの偽装 (承認)

偽装とは、スレッドを所有するプロセスとは異なるセキュリティ情報を使用してスレッドを実行する機能です。 通常、サーバーアプリケーションのスレッドはクライアントを偽装します。 これにより、サーバースレッドは、そのクライアントに代わって、サーバー上のオブジェクトにアクセスしたり、クライアント独自のオブジェクトへのアクセスを検証したりすることができます。

Microsoft Windows APIには、偽装を開始するための次の関数が用意されています。

  • DDEサーバーアプリケーションは、DdeImpersonateClient関数を呼び出してクライアントを偽装できます。
  • 名前付きパイプサーバーは、ImpersonateNamedPipeClient関数を呼び出すことができます。
  • ImpersonateLoggedOnUser関数を呼び出して、ログオンしているユーザーのアクセストークンのセキュリティコンテキストを偽装することができます。
  • ImpersonateSelf関数を使用すると、スレッドは独自のアクセストークンのコピーを生成できます。 これは、アプリケーションが単一のスレッドのセキュリティコンテキストを変更する必要がある場合に便利です。 たとえば、プロセスの1つのスレッドだけが特権を有効にする必要がある場合があります。
  • SetThreadToken関数を呼び出して、指定された偽装トークンのセキュリティコンテキストでターゲットスレッドを実行することができます。
  • Microsoftリモートプロシージャコール (RPC) サーバーアプリケーションは、RpcImpersonateClient関数を呼び出してクライアントを偽装することができます。
  • セキュリティパッケージまたはアプリケーションサーバーは、ImpersonateSecurityContext関数を呼び出してクライアントを偽装することができます。

これらの偽装のほとんどでは、偽装スレッドはRevertToSelf関数を呼び出すことによって、独自のセキュリティコンテキストに戻すことができます。 例外は RPC の偽装で、RPC サーバー アプリケーションは RpcRevertToSelf または RpcRevertToSelfEx を呼び出して、独自のセキュリティコン テキストに戻すことができます。

注記: Win32 サービスからユーザーを偽装し、ユーザー環境変数に依存する API を呼び出す場合は、偽装を行う前に RegDisablePredefinedCache を呼び出す必要がある場合があります。