2012-03-09 69 views
1

我试图通过各种版本的Windows检索配置文件目录的路径。在较旧的版本中可能是[drive]:\ Documents and Settings,在较新的版本中它是[drive]:\ Users。有几种方法可以在没有问题的情况下在本地执行此操作,但是我需要在已连接到的远程计算机上查找路径。如何远程检索Windows配置文件目录路径?

  • Remote Registry已启用。
  • 我有一个模拟令牌,并通过网络API可以成功地收集从远程主机信息等
  • 我可以访问管理共享,因此远程驱动器上的所有文件。

下面是一些其他重要的注意事项。

  • 这是一个C++项目。
  • GetProfilesDirectory或GetUserProfileDirectory似乎不可能在远程上下文中运行。如果我对此有误,请告诉我,但是在我所有的实验中,函数都从本地机器返回了一些东西。
  • 我无法使用WMI,我们多次尝试将WMI功能集成到我们的项目中,但它无法正常工作。
  • 我宁愿尽可能少做“屏幕抓取”。如果你有一个不涉及阅读某些文本文件并解析结果的想法,我很乐意听到它。但我真的很感激任何有用的答案。
  • 注册表中的配置文件目录信息似乎并不有用,因为它包含环境变量,并且与GetProfilesDirectory一样,环境变量扩展功能似乎并不适用于使用远程主机。这意味着如果我从较新的Windows机器拨打较旧的Windows机器或从Windows机器拨打电话,解决方案将无法工作。
  • 的解决方案应该是足够通用可能正在运行从Windows Server 2003任何版本的Windows到Windows 7

由于主机之间的工作提前进行,你可能有什么想法。理想情况下,我希望能够强制GetProfilesDirectory在远程主机上运行,​​所以如果你知道如何做到这一点,我会永远爱你。

+0

请界定“远程机器”,以及“我已连接到“。您的本地Intranet或其他地方是否为“远程机器”?你以什么方式“连接”到该机器?你提供了很多细节,但似乎省略了最重要的细节。谢谢。 :) – 2012-03-09 03:13:40

+0

您可以访问:HKEY_USERS/*/Software/Microsoft/Windows/CurrentVersion/Explorer/Shell Folders?不建议使用这个键,但我已经看到它被使用。 – akhisp 2012-03-09 03:17:38

+0

在这种情况下,“远程机器”是本地网络上的一台机器,我可以通过将其地址指定为LogonUser可接受的凭证信息的一部分来识别。用于建立连接的实际调用是:WNetAddConnection2,LogonUser,ImpersonateLoggedOnUser,RegConnectRegistry – ShiggityShiggityShwa 2012-03-09 03:45:25

回答

1

如果您有访问远程注册表,你应该能够看到在配置文件目录和文件列表中保持的关键:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList 
+0

我相信这些键包含环境变量。值看起来像%SystemDrive%\ Users等等。从技术上讲,我可以抓住这些信息,并用它来构建我想要的东西,但之后我还需要一个可靠的方法来确定正确的驱动器。 – ShiggityShiggityShwa 2012-03-09 03:43:14

+0

根据[this](https://groups.google.com/d/msg/microsoft.public.win2000.registry/hP7RAuNMfZ8/xwK2BfLbsUwJ),您可以从HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft中SystemRoot的值中获取%SystemDrive% \ Windows NT \ CurrentVersion \。 – alexisdm 2012-03-09 04:00:07

+0

嗯,是的,我的Windows Server 2003和Windows 7测试安装都在相同的位置使用相同的信息。我会对此做更多的研究,看看可能会有多少变化。这不会是最干净的解决方案,但它是有益的,谢谢。 – ShiggityShiggityShwa 2012-03-09 04:08:46

相关问题