繁体   English   中英

从流程ID获取流程可执行文件名称

[英]Get a process executable name from process ID

我目前正在尝试获取具有pid的程序列表的名称。

该程序以管理员身份运行,但是GetModuleFileNameEx失败,错误代码为5。

我使用OpenProcess(PROCESS_TERMINATE,PROCESS_QUERY_INFORMATION)打开程序,并且启用了SE_DEBUG_PRIVILEGE

传递给GetModuleFileNameEx()的进程句柄需要PROCESS_QUERY_INFORMATIONPROCESS_VM_READ访问权限。

这对我有用:

HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
                       FALSE,
                       6088);
if (0 == h)
{
    std::cerr << "OpenProcess() failed: " << GetLastError() << "\n";
}
else
{
    char exe_path[2048] = {};

    if (GetModuleFileNameEx(h, 0, exe_path, sizeof(exe_path) - 1))
    {
        std::cout << exe_path << "\n";
    }
    else
    {
        std::cerr << "GetModuleFileNameEx() failed: " <<
            GetLastError() << "\n";
    }
    CloseHandle(h);
}

但是,正如其他人指出的那样(并且在GetModuleFileNameEx()的文档中也有说明),有更安全的方法来获取此信息:

根据该线程 ,当没有足够的信息返回文件名时,将返回错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM