LoadUserProfileA 関数 (userenv.h)
指定したユーザーのプロファイルを読み込みます。 プロファイルには、 ローカル ユーザー プロファイル または ローミング ユーザー プロファイルを指定できます。
構文
USERENVAPI BOOL LoadUserProfileA(
[in] HANDLE hToken,
[in, out] LPPROFILEINFOA lpProfileInfo
);
パラメーター
[in] hToken
型: HANDLE
LogonUser、CreateRestrictedToken、DuplicateToken、OpenProcessToken、または OpenThreadToken 関数によって返されるユーザーのトークン。 トークンには 、TOKEN_QUERY、 TOKEN_IMPERSONATE、 およびTOKEN_DUPLICATEアクセス権が 必要です。 詳細については、「 Access-Token オブジェクトのアクセス権」を参照してください。
[in, out] lpProfileInfo
種類: LPPROFILEINFO
PROFILEINFO 構造体へのポインター。 LoadUserProfile は失敗し、構造体 のdwSize メンバーが に sizeof(PROFILEINFO)
設定されていない場合、または lpUserName メンバーが NULL の場合、ERROR_INVALID_PARAMETERを返します。 詳細については、「解説」を参照してください。
戻り値
種類: BOOL
成功した場合は TRUE。それ以外の場合は FALSE。 詳細なエラー情報を得るには、GetLastError を呼び出します。
lpProfileInfo の構造体の dwSize メンバーが に設定されていない場合、または lpUserName メンバーが NULL の場合、関数は失敗しsizeof(PROFILEINFO)
、ERROR_INVALID_PARAMETERを返します。
解説
ユーザーが対話形式でログオンすると、システムによってユーザーのプロファイルが自動的に読み込まれます。 サービスまたはアプリケーションがユーザーを偽装した場合、システムはユーザーのプロファイルを読み込まない。 そのため、サービスまたはアプリケーションは LoadUserProfile を使用してユーザーのプロファイルを 読み込む必要があります。
LoadUserProfile を呼び出すサービスとアプリケーションは、ユーザーがローミング プロファイルを持っているかどうかを確認するためにチェックする必要があります。 ユーザーがローミング プロファイルを持っている場合は、そのパスを PROFILEINFO の lpProfilePath メンバーとして指定します。 ユーザーのローミング プロファイル パスを取得するには、情報レベル 3 または 4 を指定して NetUserGetInfo 関数を呼び出します。
正常に戻ると、PROFILEINFOの hProfile メンバーは、ユーザーのハイブのルートに対して開かれたレジストリ キー ハンドルです。 フル アクセス (KEY_ALL_ACCESS) で開かれています。 ユーザーを偽装しているサービスがユーザーのレジストリ ファイルの読み取りまたは書き込みを行う必要がある場合は、HKEY_CURRENT_USERの代わりにこのハンドル を使用します。 hProfile ハンドルを閉じないでください。 代わりに、 UnloadUserProfile 関数に渡します。 この関数はハンドルを閉じます。 ユーザーのレジストリ ハイブ内のキーに対するすべてのハンドルが閉じられるようにする必要があります。 開いているレジストリ ハンドルをすべて閉じていない場合、ユーザーのプロファイルはアンロードに失敗します。 詳細については、「レジストリ キーのセキュリティとアクセス権」および「レジストリ ハイブ」を参照してください。
CreateProcessAsUser を呼び出す前に、LoadUserProfile 関数を使用してユーザーのレジストリ ハイブをHKEY_USERSレジストリ キーに読み込む必要があることに注意してください。 これは、 CreateProcessAsUser が指定したユーザーのプロファイルを HKEY_USERSに読み込まないためです。 つまり、 HKEY_CURRENT_USER レジストリ キー内の情報にアクセスしても、通常の対話型ログオンと一致する結果が得られない可能性があります。
呼び出し元プロセスには、 SE_RESTORE_NAME と SE_BACKUP_NAME の特権が必要です。 詳細については、「特別な特権を使用して実行する」を参照してください。
Windows XP Service Pack 2 (SP2) および Windows Server 2003 以降では、呼び出し元は管理者または LocalSystem アカウントである必要があります。 呼び出し元が管理者または LocalSystem アカウントを偽装するだけでは不十分です。
注意
userenv.h ヘッダーは、LoadUserProfile をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 エンコードに依存しないエイリアスをエンコードニュートラルでないコードと組み合わせて使用すると、コンパイルまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。
要件
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | userenv.h |
Library | Userenv.lib |
[DLL] | Userenv.dll |