次の方法で共有


ImpersonateLoggedOnUser 関数 (securitybaseapi.h)

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

構文

BOOL ImpersonateLoggedOnUser(
  [in] HANDLE hToken
);

パラメーター

[in] hToken

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

戻り値

関数が成功した場合、戻り値は 0 以外です。

関数が失敗した場合、戻り値は 0 です。 拡張エラー情報を取得するには、 GetLastError を呼び出します。

注釈

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

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

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

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

  • 呼び出し元には SeImpersonatePrivilege 特権があります。
  • プロセス (または呼び出し元のログオン セッション内の別のプロセス) は、 LogonUser または LsaLogonUser 関数を介して明示的な資格情報を使用してトークンを作成しました。
  • 認証された ID は呼び出し元と同じです。

Important

偽装を成功させるには、トークンの偽装レベルが SecurityImpersonation 以上である必要があります。 呼び出し元に SeImpersonatePrivilege がある場合でも、SecurityIdentification レベルまたは SecurityAnonymous レベルのトークンを偽装に使用することはできません。 SecurityIdentification トークンは、ID 検証と ACL チェックを許可しますが、偽装は許可しません。

偽装レベルの要件

動作は、トークンの偽装レベルによって異なります。

  • SecurityAnonymous: サーバーはクライアント ID 情報を取得できず、クライアントを偽装できません。
  • SecurityIdentification: サーバーはクライアントの ID を取得してアクセス検証を実行できますが、クライアントを偽装することはできません。 これは、多くのシナリオの既定のレベルです。
  • SecurityImpersonation: サーバーは、ローカル システムでクライアントのセキュリティ コンテキストを偽装できます。 これは、 ImpersonateLoggedOnUser が成功するために必要な最小レベルです。
  • SecurityDelegation: サーバーは、リモート システムおよびローカルでクライアントを偽装できます。

SP1 以前の Windows XP:SeImpersonatePrivilege 特権はサポートされていません。

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

Requirements

Requirement 価値
サポートされる最小クライアント Windows XP [デスクトップ アプリのみ]
サポートされている最小のサーバー Windows Server 2003 [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
Header securitybaseapi.h (Windows.h を含む)
Library Advapi32.lib
DLL Advapi32.dll

こちらも参照ください

クライアント/サーバー アクセス制御関数

クライアント/サーバー のアクセス制御の概要

CreateProcessAsUser

CreateRestrictedToken

DuplicateToken

DuplicateTokenEx

LogonUser

OpenProcessToken

OpenThreadToken

RevertToSelf