ImpersonateSecurityContext
呼び出し元のスレッドまたはプロセス全体で、クライアントを偽装してサーバー上で呼び出しています。ドキュメントは、 「関数は偽装トークンを作成し、スレッドまたはプロセスが偽装コンテキストで実行できるようにする」と述べているため、この問題について少しあいまいです。
なりすましは呼び出し元のスレッドのみを対象としており、それ以外は奇妙だと思いますが、確認したいと思います。
ImpersonateSecurityContext
呼び出し元のスレッドまたはプロセス全体で、クライアントを偽装してサーバー上で呼び出しています。ドキュメントは、 「関数は偽装トークンを作成し、スレッドまたはプロセスが偽装コンテキストで実行できるようにする」と述べているため、この問題について少しあいまいです。
なりすましは呼び出し元のスレッドのみを対象としており、それ以外は奇妙だと思いますが、確認したいと思います。
MSDN によると:
偽装とは、スレッドを所有するプロセスとは異なるセキュリティ情報を使用して実行するスレッドの機能です。通常、サーバー アプリケーションのスレッドはクライアントを偽装します。これにより、サーバースレッドはそのクライアントに代わってサーバー上のオブジェクトにアクセスしたり、クライアント自身のオブジェクトへのアクセスを検証したりできます。
Microsoft Windows API は、偽装を開始する次の関数を提供します。
...
- セキュリティ パッケージまたはアプリケーション サーバーは、ImpersonateSecurityContext
関数を呼び出してクライアントを偽装できます。
そのため、偽装はスレッドごとに行われます。
偽装を使用して、偽装されたユーザーとして新しいプロセスを生成することができます (DuplicateTokenEx()
およびを使用CreateProcessAsUser()
)。ただし、偽装では、呼び出し元のプロセスが偽装されたユーザーとして実行されることはなく、呼び出し元のスレッドのみが実行されます。
複数のクライアントが同時に接続できるサーバー コンテキストでは、クライアントの偽装がプロセス全体の基本に適用されると非常に危険です。