【问题标题】:Not able to get executable path for process id 4 (ntoskrnl.exe)无法获取进程 ID 4 (ntoskrnl.exe) 的可执行路径
【发布时间】:2018-08-23 12:22:46
【问题描述】:

我一直在尝试通过枚举所有进程来获取可执行路径。我同时使用了 GetModuleFileNameExAQueryFullProcessImageNameA 来获取可执行文件的路径。

它适用于几乎所有东西,除了少数像 ntoskrnl.exe(系统,进程 ID:4)。当我使用这些方法时,获得的 HANDLENOT NULL 但函数 fail

GetLastError 结果是 31

代码是否有任何问题或必须采取任何解决方法? 注意:我的 EXE 是 32 位 EXE,我有 64 位操作系统。这有关系吗?

INT32 GetFileNameAndPath(DWORD processId,string &filePath,string &fileName)
{
CHAR path[MAX_PATH];
DWORD size=MAX_PATH;
smatch match;

HANDLE hProcess = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION,FALSE,processId);

if(hProcess != NULL)
{
    regex regx("[^\\\\]+$");

    if(GetModuleFileNameExA(hProcess,NULL,path,size) != 0)
    {
        filePath = path;

        if(regex_search(filePath,match,regx))
            fileName = match.str();
    }
    else if(QueryFullProcessImageNameA(hProcess,0,path,&size) != 0)
    {
        filePath = path;

        if(regex_search(filePath,match,regx))
            fileName = match.str();
    }
    else
    {
        cout<<GetLastError();
    }
}

CloseHandle(hProcess);

return SUCCESS;
}

【问题讨论】:

    标签: c++ winapi visual-c++ getmodulefilename


    【解决方案1】:

    是的!答案是无法获取ntoskrnl.exe的路径。我想知道任务管理器是如何做到的。经过几个小时的检查,我找到了它! :P(不应该花那么多钱)。

    Task Manager Screenshot

    如果您看到该屏幕截图,您可以看到进程 系统的图像路径名称C:\WINDOWS 而对于 conhost.exe 它是 C:\Windows。

    甚至窗口都为该 Exe 进行了硬编码。他们将其硬编码为 %Systemroot%\system32\ntoskrnl.exe。只有当您展开 Systemroot 时,您才会获得 C:\WINDOWS 的值。当您使用诸如 GetModuleFileNameEx 之类的 API 时,您将获得路径为 C:\Windows。所以技术上没有办法。根据我的假设,出于安全原因,他们不允许任何用户获取 Exe 的路径。

    【讨论】:

    • 这与安全无关。
    • @Keshav 人们在这里投反对票对我来说太疯狂了。严肃地说,这个社区当然需要规则和指导方针,以实现和维护所需的结构。但敌意不在名单上。没有明显的理由这应该被否决。尽管其中一位评论员的自我...
    • 我只是在内存中更改了这个硬编码字符串并在 ui 中获得了另一个名称 - 所以这真的是硬编码
    • @Kehsav 这与安全无关。否则具有正确权限的系统进程会看到它。问题是,ntoskrnl.exe 不是一个实际的可执行映像。引导加载程序将其复制到内存并跳转到它。它实际上没有GetModuleFileName 意义上的图像,因为它从未作为“模块”加载。有了适当的权限,您甚至应该能够删除该文件,因为它不应该在使用中。
    • 好的,我明白了。这不是出于安全考虑。就像你说的@SkepticalEmpiricist,我不知道为什么我对这个帖子投了反对票! :D 谢谢大家! :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2019-01-17
    • 2012-06-18
    • 1970-01-01
    相关资源
    最近更新 更多