Windows 上の任意のユーザーの CSIDL_LOCAL_APPDATA パスを取得する
-
02-07-2019 - |
質問
を取得するための Win32/MFC API はありますか? CSIDL_LOCAL_APPDATA
のために どれでも 必要なユーザー (現在ログオンしているユーザーだけでなく)?「ドメイン\ユーザー」の形式でユーザーのリストがあり、そのパスのリストを取得したいとします。それは可能ですか?
解決
ユーザーの SID を取得し、HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList で検索して、ProfileImagePath 値を取得します。
このパスを取得したら、ユーザーの CLSID_LOCAL_APPDATA を取得し、絶対パスをプロファイルへの相対パスに変換し、その相対パスを他のユーザー プロファイル パスに追加できます。
ただし、これは文書化されていないレジストリ キーに依存しており、OS の将来のバージョンでは破損する可能性があることに注意してください。(あるいは、レイモンド・チャンなら次のように言います。「やり方は分かったので、なぜこの方法でやるべきではないのか説明しましょう...」 :-))
ユーザーを表すトークンがある場合は、SHGetFolderPath または SHGetKnownFolderPath (Vista 以降) を使用できます。ただし、特定のセキュリティ制限があるため、詳細については MSDN を参照してください。
SHGetFolderPath - http://msdn.microsoft.com/en-us/library/bb762181(VS.85).aspxSHGetKnownFolderPath - http://msdn.microsoft.com/en-us/library/bb762188(VS.85).aspx