名前付きパイプ クライアントの偽装

偽装 とは、スレッドを所有するプロセスとは異なるセキュリティ コンテキストで実行するスレッドの機能です。 偽装により、サーバー スレッドはクライアントに代わって、クライアントのセキュリティ コンテキストの制限内でアクションを実行できます。 通常、クライアントのアクセス権のレベルは低くなります。 詳細については、「 偽装」を参照してください。

名前付きパイプ サーバー スレッドは 、ImpersonateNamedPipeClient 関数を呼び出して、パイプのクライアント側に接続されているユーザーのアクセス トークンを想定できます。 たとえば、名前付きパイプ サーバーは、パイプ サーバーが特権アクセス権を持つデータベースまたはファイル システムへのアクセスを提供できます。 パイプ クライアントがサーバーに要求を送信すると、サーバーはクライアントを偽装し、保護されたデータベースへのアクセスを試みます。 その後、システムは、クライアントのセキュリティ レベルに基づいて、サーバーのアクセスを許可または拒否します。 サーバーが完了すると、 RevertToSelf 関数を使用して元のセキュリティ トークンが復元されます。

偽装レベルは、クライアントの偽装中にサーバーが実行できる操作を決定します。 既定では、サーバーは SecurityImpersonation 偽装レベルで偽装します。 ただし、クライアントが CreateFile 関数を呼び出してパイプのクライアント側へのハンドルを開くと、クライアントは SECURITY_SQOS_PRESENT フラグを使用してサーバーの偽装レベルを制御できます。