2009-09-30 58 views
0

我希望能够从服务中检索用户帐户的Windows“特殊路径”(例如临时文件文件夹,桌面)。如何从服务中获取用户帐户的Windows特殊路径

我知道这样做的正常方法是使用SHGetFolderPath和相应的CSIDL作为文件夹类型。有没有办法让每个用户获得这种类型的信息,而服务却不必以每个用户的身份登录?

回答

1

我不是这方面的专家,但似乎你可以使用hToken参数SHGetFolderPath传递另一个用户的令牌。我认为你可以使用impersonation创建这样一个令牌。

如果这样不起作用:这些文件夹位于HKEY_USERS/<user's-sid>/Software/Microsoft/Windows/CurrentVersion/Explorer/Shell Folders的注册表中。如何获得SID在this question中有解释。它是用C#编写的,但我认为它在C++中会更容易。

+0

我不认为模拟会为我工作,因为(AFAIK)用户需要在当时登录,我想在一次扫描中为所有用户执行此操作。不过,我会检查注册表方法,看起来很有前途,谢谢。 – snowcrash09 2009-10-01 09:00:30

+0

令人遗憾的是,注册表方法无法正常工作 - 在这些用户登录之前,其他用户的HKEY_USERS下的分支不会被安装。感谢这个想法。 – snowcrash09 2009-10-01 16:26:53

+0

在这种情况下,您将别无选择,只能以每个用户的身份登录服务,因为即使API函数无法从注册表项读取它们也无法访问...... – Thomas 2009-10-01 16:44:12

相关问题