Как исправить QueryFullProcessImageName, выбрасывающее «Устройство, подключенное к системе, не работает»? - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь найти имя процесса, которому принадлежит дескриптор, из списка дескрипторов, полученных через 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)

...