ImpersonateLoggedOnUser 関数 (securitybaseapi.h)

ImpersonateLoggedOnUser 関数を使用すると、呼び出し元のスレッドがログオン ユーザーのセキュリティ コンテキストを偽装できます。 ユーザーはトークン ハンドルによって表されます。

構文

BOOL ImpersonateLoggedOnUser(
  [in] HANDLE hToken
);

パラメーター

[in] hToken

ログオンしているユーザーを表すプライマリ アクセス トークンまたは偽装 アクセス トークン へのハンドル。 これは、LogonUserCreateRestrictedTokenDuplicateToken、DuplicateTokenExOpenProcessTokenまたは OpenThreadToken 関数の呼び出しによって返されるトークン ハンドルです。 hTokenプライマリ トークンのハンドルである場合、トークンにはTOKEN_QUERYとTOKEN_DUPLICATEアクセスが必要です。 hToken偽装トークンのハンドルである場合、トークンにはTOKEN_QUERYとTOKEN_IMPERSONATEアクセスが必要です。

戻り値

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

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

解説

偽装は、スレッドが終了するか、 RevertToSelf を呼び出すまで続きます。

呼び出し元のスレッドは、ImpersonateLoggedOnUser を呼び出すために特定の特権を持つ必要はありません。

ImpersonateLoggedOnUser の呼び出しが失敗した場合、クライアント接続は偽装されず、クライアント要求はプロセスのセキュリティ コンテキストで行われます。 プロセスが LocalSystem などの高い特権アカウントとして実行されている場合、または管理グループのメンバーとして実行されている場合、ユーザーは許可されないアクションを実行できる可能性があります。 したがって、呼び出しの戻り値を常にチェックすることが重要であり、失敗した場合はエラーを発生させます。クライアント要求の実行を続行しないでください。

ImpersonateLoggedOnUser を含むすべての偽装関数は、次のいずれかに該当する場合、要求された偽装を許可します。

  • トークンの要求された偽装レベルは、SecurityIdentificationSecurityAnonymous など、SecurityImpersonation よりも小さくなります。
  • 呼び出し元には SeImpersonatePrivilege 特権があります。
  • プロセス (または呼び出し元のログオン セッション内の別のプロセス) によって、 LogonUser または LsaLogonUser 関数を介して明示的な資格情報を使用してトークンが作成されました。
  • 認証された ID は呼び出し元と同じです。
SP1 以前の Windows XP: SeImpersonatePrivilege 特権はサポートされていません。

偽装の詳細については、「 クライアントの偽装」を参照してください。

要件

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

こちらもご覧ください

クライアント/サーバー Access Control関数

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

CreateProcessAsUser

CreateRestrictedToken

DuplicateToken

DuplicateTokenEx

LogonUser

OpenProcessToken

OpenThreadToken

Reverttoself