LoadUserProfileW

指定したユーザーのプロファイルを読み込む。プロファイルはローカルユーザープロファイルまたは移動ユーザープロファイルのいずれかである。(Unicode)

LoadUserProfileW hToken, lpProfileInfo

hToken : [intptr] 型: HANDLE LogonUser、CreateRestrictedTokenDuplicateTokenOpenProcessTokenOpenThreadToken 関数から返されるユーザーのトークン。このトークンには TOKEN_QUERY、TOKEN_IMPERSONATE、TOKEN_DUPLICATE のアクセス権が必要である。詳細は Access Rights for Access-Token Objects を参照。
lpProfileInfo : [var] 型: LPPROFILEINFO PROFILEINFO 構造体へのポインタ。構造体の dwSize メンバーが sizeof(PROFILEINFO) に設定されていない場合、または lpUserName メンバーが NULL の場合、LoadUserProfile は失敗して ERROR_INVALID_PARAMETER を返す。詳細は解説を参照。

(プラグイン / モジュール : userenv.dll)

解説

指定したユーザーのプロファイルを読み込む。プロファイルはローカルユーザープロファイルまたは移動ユーザープロファイルのいずれかである。(Unicode)

[戻り値]
型: BOOL 成功した場合は TRUE、それ以外は FALSE を返す。拡張エラー情報を取得するには GetLastError
を呼び出す。
lpProfileInfo の構造体の dwSize メンバーが sizeof(PROFILEINFO) に設定されていない場合、または
lpUserName メンバーが NULL の場合、関数は失敗して ERROR_INVALID_PARAMETER を返す。

[備考]

ユーザーが対話的にログオンすると、システムは自動的にユーザープロファイルを読み込む。サービスやアプリケーションがユーザーを偽装している場合、システムはユーザープロファイルを読み込まない。そのためサービスやアプリケーションは
LoadUserProfile を使ってユーザープロファイルを読み込む必要がある。LoadUserProfile
を呼び出すサービスやアプリケーションは、ユーザーが移動プロファイルを持っているかどうかを確認するべきである。ユーザーが移動プロファイルを持っている場合は、そのパスを
PROFILEINFO の lpProfilePath メンバーに指定する。ユーザーの移動プロファイルパスは NetUserGetInfo
関数で情報レベル 3 または 4 を指定して取得できる。成功して戻ると、PROFILEINFO の hProfile
メンバーはユーザーのハイブのルートに対して開かれたレジストリキーハンドルとなり、フルアクセス (KEY_ALL_ACCESS)
で開かれている。ユーザーを偽装しているサービスがユーザーのレジストリファイルを読み書きする必要がある場合、HKEY_CURRENT_USER
の代わりにこのハンドルを使うべきである。hProfile ハンドルは閉じず、UnloadUserProfile
関数に渡すこと。同関数がハンドルを閉じる。ユーザーのレジストリハイブ内のすべてのキーハンドルが閉じられていることを確認する必要がある。すべての開いているレジストリハンドルを閉じないと、ユーザープロファイルのアンロードに失敗する。詳細は
Registry Key Security and Access Rights および Registry Hives
を参照。CreateProcessAsUser を呼び出す前に、LoadUserProfile 関数でユーザーのレジストリハイブを
HKEY_USERS レジストリキーに読み込むのは呼び出し側の責任である点に注意。CreateProcessAsUser
は指定したユーザーのプロファイルを HKEY_USERS に読み込まないためである。これは、HKEY_CURRENT_USER
レジストリキー内の情報へのアクセスが通常の対話的ログオンと一致する結果を生成しない可能性があることを意味する。呼び出しプロセスは
SE_RESTORE_NAME および SE_BACKUP_NAME 特権を持っている必要がある。詳細は Running with
Special Privileges を参照。Windows XP Service Pack 2 (SP2) および Windows
Server 2003 以降では、呼び出し側は管理者または LocalSystem アカウントでなければならない。単に管理者または
LocalSystem アカウントを偽装するだけでは不十分である。
> [!NOTE] > userenv.h ヘッダーは LoadUserProfile をエイリアスとして定義しており、UNICODE
プリプロセッサ定数の定義に応じて ANSI 版または Unicode
版を自動的に選択する。エンコーディング非依存のエイリアスと、エンコーディング非依存でないコードを混在して使うと、コンパイルエラーや実行時エラーの原因になる可能性がある。詳細は
[Conventions for Function
Prototypes](/windows/win32/intl/conventions-for-function-prototypes)
を参照。

情報

プラグイン / モジュールuserenv.dll
バージョン1.0
作成日2026/04/16
著作者IronHSP / CsWin32 bridge
URLhttps://github.com/inovia/IronHSP
備考Win32 API の userenv.dll 関数群。CsWin32 + win32metadata から自動生成。
hsp3net 専用 (intptr / NSTRUCT / wstr を使用)。
タイプ拡張命令
グループWin32API
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\win32_userenv_gen2.hs