当应用程序需要管理员权限并在admin下启动时,获取受限用户文件夹



有一个Windows应用程序需要管理员权限,并在其清单中声明。当受限制的用户启动它时,她必须输入管理员凭据。这是OK的,应用程序工作得很好,但它不能再获得原始用户文件夹(ShellAPI返回管理员的)。

由于应用程序最初是在admin下启动的,因此我无法存储原始用户的文件夹路径以供以后使用。

是否有办法获得初始受限用户凭据?

认为,

由于您的manifest,您的应用程序以admin用户运行,而不是当前登录的受限制用户。正如David Heffernan所提到的,你应该重新设计你的应用,不要要求整个应用都在高架状态下运行。将您的管理任务委托给一个单独的进程,该进程在需要时提升运行。

话虽如此,如果你必须高架运行你的整个应用程序,一切都不会失去,但你将不得不做一些额外的工作。

  1. 首先获取您的提升应用程序正在运行的会话ID。您可以使用WTSQuerySessionInformation()WTS_CURRENT_SESSION,或ProcessIdToSessionId()GetCurrentProcessId(),或使用OpenProcessToken()打开当前进程的令牌,然后使用GetTokenInformation()

  2. 一旦你有了会话ID,使用EnumProcesses(), GetProcessImageFileName()(或同等),OpenProcessToken()GetTokenInformation()来找到explorer.exe的实例(或无论PC的注册壳应用程序是什么,你可以在注册表中找到),它运行在与你的应用程序相同的会话ID。

  3. 找到后,您就拥有了OpenProcessToken()中该进程的用户令牌。使用DuplicateTokenEx()复制它以获得其主令牌,然后您可以根据需要将该令牌与LoadUserProfile(), SHGetFolderPath()SHGetKnownFolderPath()等api一起使用。

相关内容

  • 没有找到相关文章

最新更新