ImpersonateLoggedOnUser 関数 (securitybaseapi.h)
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 を含むすべての偽装関数は、次のいずれかに該当する場合、要求された偽装を許可します。
- トークンの要求された偽装レベルは、SecurityIdentification や SecurityAnonymous など、SecurityImpersonation よりも小さくなります。
- 呼び出し元には SeImpersonatePrivilege 特権があります。
- プロセス (または呼び出し元のログオン セッション内の別のプロセス) によって、 LogonUser または LsaLogonUser 関数を介して明示的な資格情報を使用してトークンが作成されました。
- 認証された ID は呼び出し元と同じです。
偽装の詳細については、「 クライアントの偽装」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows XP (デスクトップ アプリのみ) |
サポートされている最小のサーバー | Windows Server 2003 (デスクトップ アプリのみ) |
対象プラットフォーム | Windows |
ヘッダー | securitybaseapi.h (Windows.h を含む) |
Library | Advapi32.lib |
[DLL] | Advapi32.dll |