我正在使用Java
JNA
以访问Windows
. 我的代码如下所示:
static WinNT.HANDLE openProcessHandle(int processId)
{
val processAccessRights = PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE | PROCESS_TERMINATE
| PROCESS_NAME_NATIVE | PROCESS_SUSPEND_RESUME | PROCESS_QUERY_INFORMATION | PROCESS_QUERY_LIMITED_INFORMATION;
val processHandle = Kernel32.INSTANCE.OpenProcess(processAccessRights, false, processId);
if (processHandle == null)
{
val lastError = Native.getLastError();
val formatMessageFromLastErrorCode = Kernel32Util.formatMessageFromLastErrorCode(lastError);
val message = "OpenProcess() failed to open process id "
+ processId + ": " + formatMessageFromLastErrorCode;
throw new IllegalStateException(message);
}
return processHandle;
}
PROCESS_ALL_ACCESS
由于它引起的问题,我已经不使用了。
根据这个答案,我还需要为我的进程启用调试权限。然而,尽管之前成功调用了这段代码(例如所有返回值都表示成功)OpenProcess()
,一些用户仍然会收到错误消息OpenProcess() failed to open process id xxxx: Access denied
。我的应用程序没有以管理员身份运行。为什么它适用于我和大多数没有管理员权限的用户,但不适用于所有用户?究竟是什么导致了这种不一致?我更愿意专门了解和解决这个问题,而不是让所有用户以管理员身份运行我的软件,因为我的软件通常不需要那些额外的权限。