我们有一个java进程作为本地系统用户在Windows上运行,需要访问系统中另一个用户拥有的文件。据我所知,本地系统用户应该有权模拟该用户。为此,我们传递正在访问文件的程序的tid和pid,并从中获取用户信息(令牌)。然后我们在当前线程上设置标记。像这样:java模拟
DuplicateTokenEx(hToken,MAXIMUM_ALLOWED,NULL,SecurityImpersonation,TokenImpersonation,&hTokenDup);
SetThreadToken(NULL, hTokenDup);
其中hToken是通过打开线程,然后通过他们的ID进行处理获得。 问题是当我试图访问一个只能被用户访问的文件而没有其他人无法读取它时。我得到一个拒绝访问错误。所以问题是我是否应该能够通过模拟访问这个文件,如果是的话,这是正确的冒充另一个用户给定一个threadid和PID。我想我也会看到Windows 7和Windows XP之间的不同行为。
我对Java的知识接近于零,所以我认为如果我说废话,但...我的第一个想法是1)与其他用户一起运行2)修改文件权限 –
我们不能那样做。我们事先没有这些信息。 – noahd