想知道Windows后台服务(系统配置文件)是否无法使用C ++访问win 10上的用户appData文件夹?似乎Windows服务默认情况下不会通过以下链接加载用户配置文件,并想知道它是否与win 10相同。
谢谢
SYSTEM
帐户具有对本地计算机的完全访问权限,因此它当然可以访问任何用户的AppData文件夹。诀窍将是首先获得给定用户的AppData文件夹的路径。
存在API的目的是获取与用户相关的文件夹路径,请参阅SHGetFolderPath()
和SHGetKnownFolderPath()
,两者均以用户令牌作为输入。服务在与用户不同的会话中运行,并且SYSTEM
帐户在注册表中具有其自己的配置文件,因此您不能使用依赖于调用过程的HKEY_CURRENT_USER
的任何东西来查询路径,因为它将查询路径。 SYSTEM
的路径,而不是用户的路径。您需要获取要查询的所需用户的令牌。
如果用户已登录,则可以使用WTSQueryUserToken()
获取用户的令牌。您只需要用户的会话ID,您可以从ProcessIdToSessionId()
中获取该用户会话上运行的任何进程的ID,也可以通过WTSEnumerateSessions()
/ WTSQuerySessionInformation()
查找该用户的登录用户名。
如果用户尚未登录,但是您具有用户的凭据,则可以使用LogonUser()
获取用户的令牌。然后,您可以使用LoadUserProfile()
直接访问用户的HKEY_CURRENT_USER
注册表配置单元,然后从其"\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
键查询AppData文件夹路径。