【问题标题】:I don´t know how i can get the pid of an process by process name我不知道如何通过进程名称获取进程的 pid
【发布时间】:2019-05-05 11:41:32
【问题描述】:

我想获取进程 ID,例如进程“notepad.exe”。

我只找到了线程等如何通过 PID 获取进程。但我想通过进程名称(在这种情况下为“notepad.exe”)获取 PID。 这与我的内核驱动程序有关。

【问题讨论】:

    标签: c pid wdk windows-kernel


    【解决方案1】:

    可以有多个进程的进程映像来自文件notepad.exe。您必须枚举所有正在运行的进程并从中检索模块名称。在 MSDN 中有描述:https://docs.microsoft.com/en-us/windows/desktop/psapi/enumerating-all-processes

    然后从进程列表中提取模块名称为 notepad.exe 的所有进程并获取匹配 PID 的列表。

    【讨论】:

    • 感谢您的帮助。记事本只是一个例子,我知道我想要的进程只能运行一次。
    • @NachoModding:这并没有改变这样一个事实,即从操作系统的角度来看,模块名称和 PID 之间通常没有严格的双射映射。而且因为它通常不是双射的,所以根本没有动力拥有“GetSinglePIDByModuleName”API。只需枚举进程并按模块名称进行比较,就像对广义 PID→name 满射映射所做的那样,并获取结果列表的(单个)第一个元素。或者更好的是,执行一个健全性检查,你实际上得到一个只有一个条目的列表;如果该检查失败,则假设您的系统处于错误状态。
    • 内核驱动程序中的@NachoModding 需要使用NtQuerySystemInformationSystemProcessInformation 而不是EnumProcesses。但是通常使用名称不是最佳选择 - 需要询问 - 你这个过程和搜索基于另一个东西
    猜你喜欢
    • 1970-01-01
    • 2014-12-28
    • 2011-05-10
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多