SHGetFolderPath()用于特定用户

时间:2009-06-29 17:25:05

标签: registry appdata application-data

我正在寻找一种获取特定用户的本地应用程序数据文件夹的好方法 - 无需输入该用户的登录详细信息。

SHGetFolderPath()可以接受我想要获取本地appdata文件夹的任何用户的访问令牌,但是要获取访问令牌,您必须提供用户的密码。此外,根据docs,< = Windows 2000。

不支持此功能

注册表项 HKCU \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Shell Folder 包含AppData值,其中包含当前用户的本地appdata文件夹的位置...所以我可以在技术上为特定用户安装HKCU配置单元并访问该值;但是,微软似乎强烈反对使用这个密钥,我听说它有时也可能不准确。

具有讽刺意味的是,在Windows上,管理员帐户可以轻松访问和修改任何用户的appdata文件夹中的所有数据,如果他们只是打开资源管理器并浏览到正确的位置...但似乎没有以编程方式获取特定用户的appdata文件夹位置的简便方法。

我还有其他选择吗?现在,访问注册表(喘气)似乎是最好的选择,但我想使用官方的东西,如果可能的话,不要被微软劝阻。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:4)

如果没有令牌AFAIK,没有记录的方法可以做到这一点,但最好的办法是:

  1. 查找个人资料:HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ ProfileList(Win9x上%windir%\ Profiles)
  2. SE_RESTORE_NAME
  3. 的AdjustTokenPrivileges
  4. RegLoadKey NTUSER.DAT(9x上的USER.DAT)
  5. 查询... \ CurrentVersion \ Explorer \用户外壳文件夹
  6. 请注意,要检查的正确注册表项是用户外壳文件夹而不是外壳文件夹(并且您可能必须展开路径),有关详细信息,请参阅The long and sad story of the Shell Folders key

    我还想指出,如果可能,您应该将数据存储在程序文件或公共文件夹中,然后在程序第一次为每个用户运行时复制到配置文件中