ImpersonateNamedPipeClient 関数 (namedpipeapi.h)

ImpersonateNamedPipeClient 関数は、名前付きパイプ クライアント アプリケーションを偽装します。

構文

BOOL ImpersonateNamedPipeClient(
  [in] HANDLE hNamedPipe
);

パラメーター

[in] hNamedPipe

名前付きパイプへのハンドル。

戻り値

関数が成功すると、戻り値は 0 以外になります。

関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。

解説

ImpersonateNamedPipeClient 関数を使用すると、名前付きパイプのサーバー側でクライアント側を偽装できます。 この関数が呼び出されると、名前付きパイプ ファイル システムによって呼び出し 元プロセス のスレッドが変更され、パイプから読み取られた最後のメッセージの セキュリティ コンテキスト の偽装が開始されます。 この関数を呼び出すことができるのは、パイプのサーバー側だけです。

偽装が完了すると、サーバーは RevertToSelf 関数を呼び出すことができます。

大事なImpersonateNamedPipeClient 関数が失敗した場合、クライアントは偽装されず、後続のすべてのクライアント要求は、関数を呼び出したプロセスのセキュリティ コンテキストで行われます。 呼び出し元のプロセスが特権アカウントとして実行されている場合は、クライアントが実行を許可されないアクションを実行できます。 セキュリティ リスクを回避するには、呼び出し元のプロセスで常に戻り値をチェックする必要があります。 戻り値が関数呼び出しに失敗したことを示す場合は、クライアント要求を実行する必要はありません。
 
ImpersonateNamedPipeClient を含むすべての偽装関数では、次のいずれかが当てはまる場合、要求された偽装が許可されます。
  • トークンの要求された偽装レベルは、SecurityIdentificationSecurityAnonymous など、SecurityImpersonation よりも小さくなります。
  • 呼び出し元には SeImpersonatePrivilege 特権があります。
  • プロセス (または呼び出し元のログオン セッション内の別のプロセス) は、 LogonUser または LsaLogonUser 関数を介して明示的な資格情報を使用してトークンを作成しました。
  • 認証された ID は呼び出し元と同じです。
SP1 以前の Windows XP: SeImpersonatePrivilege 特権はサポートされていません。

この関数を使用する例については、「 ACL を使用したクライアント アクセスの確認」を参照してください。

要件

要件
サポートされている最小のクライアント Windows XP (デスクトップ アプリのみ)
サポートされている最小のサーバー Windows Server 2003 (デスクトップ アプリのみ)
対象プラットフォーム Windows
ヘッダー namedpipeapi.h
Library Advapi32.lib
[DLL] Advapi32.dll

こちらもご覧ください

承認関数

クライアント/サーバー Access Controlの概要

DdeImpersonateClient

DuplicateToken

Reverttoself