【发布时间】:2011-10-29 21:46:26
【问题描述】:
我们有一个 java 进程作为 Windows 上的本地系统用户运行,它需要访问系统上另一个用户拥有的文件。据我了解,本地系统用户应该有权模拟该用户。为此,我们传递正在访问文件的程序的 tid 和 pid 并从中获取用户信息(令牌)。然后我们在当前线程上设置令牌。像这样的:
DuplicateTokenEx(hToken,MAXIMUM_ALLOWED,NULL,SecurityImpersonation,TokenImpersonation,&hTokenDup);
SetThreadToken(NULL, hTokenDup);
其中hToken是通过打开线程获得的,然后通过它们的id进行处理。 问题是当我尝试访问一个只能由用户访问而没有其他人我无法读取的文件时。我收到拒绝访问错误。所以问题是我是否应该能够通过模拟访问这个文件,如果可以,那么在给定线程 ID 和 pid 的情况下模拟另一个用户是否正确。我想我也会看到 windows 7 和 windows xp 之间的不同行为。
【问题讨论】:
-
我对 Java 的了解接近于零,所以如果我说的是废话,请耐心等待……我的第一个想法是 1) 与其他用户一起运行 2) 更改文件权限跨度>
-
我们不能这样做。我们事先没有这些信息。
标签: java windows java-native-interface impersonation