ImpersonateLoggedOnUser 関数を使用すると、呼び出し元のスレッドはログオンしているユーザーのセキュリティ コンテキストを偽装できます。 ユーザーはトークン ハンドルによって表されます。
構文
BOOL ImpersonateLoggedOnUser(
  [in] HANDLE hToken
);
パラメーター
[in] hToken
ログオンしているユーザーを表すプライマリ アクセス トークンまたは偽装 アクセス トークン へのハンドル。 これは、LogonUser、CreateRestrictedToken、DuplicateToken、DuplicateTokenEx、OpenProcessToken、または OpenThreadToken 関数の呼び出しによって返されるトークン ハンドルです。 hToken がプライマリ トークンのハンドルである場合、トークンにはTOKEN_QUERYとTOKEN_DUPLICATEアクセス権が必要です。 hToken が偽装トークンのハンドルである場合、トークンにはTOKEN_QUERYとTOKEN_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 |