如何在电脑上获取SHGetKnownFolderPath的每个用户令牌



我正在使用System权限(清理实用程序(处理一个系统服务项目。。。它不与任何用户界面交互

我的目标是检查"桌面"one_answers"AppData"文件夹中的文件,以查找电脑上存在的任何用户。

我正在使用NetUserEnum()获取PC上的用户列表。然后我想使用SHGetKnownFolderPath()获取每个用户的Desktop和AppData的路径,但我找不到获取每个用户对SHGetKnownFolderPath()的访问令牌的方法。如果没有在SHGetKnownFolderPath()中定义的令牌,它将返回SYSTEM的路径,而不是特定用户的路径。

Q1.如何获取SHGetKnownFolderPath()的每个用户的令牌?

Q2.如果Q1没有答案,是否有任何文档化的方式来获得桌面&PC中每个用户的appdata路径?

我知道这可以用肮脏的方式来实现--->用一些字符串替换注册表项。但是,注册表项方法是未记录的,这可能很容易在将来的Windows更新中中断。


编辑更新:@RaymondChen感谢您指出某些用户配置文件可能不存在。此外,

关于Q1:@Remy Lebeau提供了一个LogonUser/Ex()解决方案,使用每个用户的凭据登录,这可能是满足Q1需求的唯一答案。

关于第二季度:可能没有记录在案的方式来实现这一点。正如@Remy Lebeau和@Olaf Hess所说,唯一的方法可能必须坚持使用Windows注册表(SoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders(。我试图在微软社区论坛上挖掘更多信息,我得到了微软出于安全原因永远不允许使用他们的本地API访问其他用户的个人资料。它们不提供可能违反安全规则的API。每个用户配置文件只能通过其凭据进行访问。

顺便说一句,我完全理解"清理工具",也就是"Windows破解工具",尤其是当工具没有被很好地编码时(例如兼容性问题(。为了避免让它成为一个完全的Windows-Destroyer,我尽量使用更多文档化的API。

对于带有SP1/Server 2008及更好版本的Windows Vista,您可以使用WMI类Win32_UserProfile查询现有用户配置文件。这允许您检索配置文件路径,检查它是本地配置文件还是漫游配置文件,并获取状态信息。其余部分(检索到APPDATA、DESKTOP等的路径(可能涉及直接从注册表读取值(HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerUser Shell FoldersHKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionExplorerShell Folders(。

最新更新