java模拟

标签 java windows java-native-interface impersonation

我们有一个在 Windows 上以本地系统用户身份运行的 java 进程,它需要访问系统上另一个用户拥有的文件。据我了解,本地系统用户应该有权模拟该用户。为此,我们传递正在访问该文件的程序的 tid 和 pid,并从中获取用户信息( token )。然后我们在当前线程上设置 token 。像这样的事情:

DuplicateTokenEx(hToken,MAXIMUM_ALLOWED,NULL,SecurityImpersonation,TokenImpersonation,&hTokenDup);
SetThreadToken(NULL, hTokenDup);

其中hToken是通过打开线程获得的,然后通过它们的id进行处理。 问题是当我尝试访问一个只能由用户访问而其他人无法读取的文件时。我收到访问被拒绝错误。所以问题是我是否应该能够通过模拟访问这个文件,如果是的话,在给定 threadid 和 pid 的情况下模拟另一个用户是否正确。我想我也会看到 Windows 7 和 Windows XP 之间的不同行为。

最佳答案

对于初学者,您应该始终测试 Windows API 调用的返回值。 只有这样,您才能确定 token 确实已被复制并分配给您的进程。

模拟需要一些权限,如果您是一个简单的用户,我不确定您是否拥有这些权限。我怀疑 DuplicateTokenEx 函数失败。 使用管理员权限重试(使用“运行方式...”工具),并让我们知道情况如何。

关于java模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7109878/

相关文章:

java - 如何在 Primefaces tabView 中设置 Activity 选项卡?

java - RabbitMQ 批量确认

java - 从每个 Rest Assured 测试中获取 "CURL"操作,未通过测试时在控制台打印

c++ - Windows下获取当前窗口位置

java - OpenCV 作为 JBoss——作为全局模块

java - 外部在 Response 对象中添加内容

c++ - 带有两个 dwDesiredAccess 的 OpenProcess 函数

windows - 是否有用于 Windows 10 即时分辨率更改的 API?

如果我使用 C 代码,Android Studio 无法调试

android - 在 android ndk 中定义 sem_t