我试图从通过NtQueryObject获取的句柄列表中查找拥有句柄的进程的名称。我正在遍历每个句柄以检查其进程名称,有时会抛出“ com.sun.jna.platform.win32.win32exception:连接至系统的设备无法正常工作”。错误。这通常可以正常工作,但是当确实发生时,似乎会在多个进程中将其扔给大量句柄。我正在使用JNA从Windows 10上运行的Java程序进行所有调用。
我试图尽可能缩小范围,但是我不知道为什么有时会抛出此错误。
NtDllX.SYSTEM_HANDLE_INFORMATION info = getSystemHandleInfo();
for(int i = 0; i < info.HandleCount; i++) {
//For each handle check for target handle
NtDllX.SYSTEM_HANDLE sh = info.Handles[i];
HANDLE sHandle = new HANDLE(new Pointer(sh.Handle));
HANDLE rProcess = Kernel32.INSTANCE.openprocess(Kernel32.PROCESS_DUP_HANDLE | Kernel32.PROCESS_QUERY_INFORMATION | Kernel32.PROCESS_VM_READ,false,sh.ProcessId);
//Check for target process
if(rProcess != null) {
String p = "";
try {
p = Kernel32Util.QueryFullProcessImageName(rProcess,0); //Throwing Error Occasionally
} catch (Exception e) {
...
所引发的错误:
com.sun.jna.platform.win32.win32exception:连接到 系统无法运行。在 com.sun.jna.platform.win32.Kernel32Util.QueryFullProcessImageName(Kernel32Util.java:842)