无法从本地系统帐户检索的流程信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法从本地系统帐户检索的流程信息相关的知识,希望对你有一定的参考价值。

我正在尝试从机器获取进程并收集每个进程的相关信息。

我在JNA的帮助下用Java编写这个功能

public static List<ProcessInfo> getProcessList() throws Exception {
        /* Initialize the empty process list. */
        List<ProcessInfo> processList = new ArrayList<ProcessInfo>();

        /* Create the process snapshot. */
        WinNT.HANDLE snapshot = Kernel32.INSTANCE.CreateToolhelp32Snapshot(Tlhelp32.TH32CS_SNAPPROCESS, new WinDef.DWORD(0));

        Tlhelp32.PROCESSENTRY32.ByReference pe = new Tlhelp32.PROCESSENTRY32.ByReference();
        for (boolean more = Kernel32.INSTANCE.Process32First(snapshot, pe); more; more = Kernel32.INSTANCE.Process32Next(snapshot, pe)) {
            /* Open this process; ignore processes that we cannot open. */
            WinNT.HANDLE hProcess = Kernel32.INSTANCE.OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_QUERY_LIMITED_INFORMATION, /* PROCESS_QUERY_LIMITED_INFORMATION */false, pe.th32ProcessID.intValue());
            if (hProcess == null) {
                continue;
            }

            /* Get the image name. */
            char[] imageNameChars = new char[1024];
            IntByReference imageNameLen = new IntByReference(imageNameChars.length);

            if (!Kernel32.INSTANCE.QueryFullProcessImageName(hProcess, 0, imageNameChars, imageNameLen)) {
                throw new Exception("Couldn't get process image name for "
                        + pe.th32ProcessID.intValue());
            }

            /* Add the process info to our list. */
            processList.add(new ProcessInfo(pe.th32ProcessID.intValue(), pe.th32ParentProcessID.intValue(), new String(imageNameChars, 0, imageNameLen.getValue())));

            /* Close the process handle. */
            Kernel32.INSTANCE.CloseHandle(hProcess);
        }

        /* Close the process snapshot. */
        Kernel32.INSTANCE.CloseHandle(snapshot);

        /* Return the process list. */
        return processList;
    }

现在我在OpenProcess函数上得到错误(87)。这段代码在用户会话中工作,我得到了结果,但是当从本地系统的窗口服务运行这段代码时,它就失败了。

答案

msdn上OpenProcess的文件说:

如果指定的进程是系统进程(0x00000000),则函数将失败,最后一个错误代码为ERROR_INVALID_PARAMETER。

以上是关于无法从本地系统帐户检索的流程信息的主要内容,如果未能解决你的问题,请参考以下文章

如何为系统管理员检索除续订帐户以外的所有帐户

Python - 从系统日志文件中检索信息

如何从 vimeo 帐户检索视频源以在 exoplayer android 中播放?

Google Directory API:使用服务帐户检索用户信息时出现 403

测试 Google 应用内结算时出现“从服务器 RPC S-7 AEC-0 检索信息时出错”

无法从开发者帐户中删除应用信息。版本代码问题