Я пытаюсь найти имя процесса, которому принадлежит дескриптор, из списка дескрипторов, полученных через NtQueryObject. Я запускаю каждый дескриптор, чтобы проверить его имя процесса, и иногда он выдает «com.sun.jna.platform.win32.Win32Exception: устройство, подключенное к системе, не работает». ошибка. Обычно это работает нормально, но когда это происходит, кажется, что он выбрасывает большое количество дескрипторов для нескольких процессов. Я использую JNA для выполнения всех вызовов из java-программы, работающей в Windows 10.
Я пытался максимально сузить его, но не могу понять, почему иногда возникает эта ошибка.
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)