Windows 从进程ID获取进程可执行文件名

Windows 从进程ID获取进程可执行文件名,windows,winapi,Windows,Winapi,我目前正在尝试获取一个程序的pid列表的名称 该程序以管理员身份运行,但GetModuleFileNameEx失败,错误代码为5 我用OpenProcess打开程序(进程\终止,进程\查询\信息)我启用了SE\u DEBUG\u特权。因此,当没有足够的信息返回文件名时,将返回该错误。传递给的进程句柄需要进程查询信息和进程虚拟机读取访问权限 这对我很有用: HANDLE h = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,

我目前正在尝试获取一个程序的pid列表的名称

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


我用
OpenProcess打开程序(进程\终止,进程\查询\信息)
我启用了
SE\u DEBUG\u特权

因此,当没有足够的信息返回文件名时,将返回该错误。

传递给的进程句柄需要
进程查询信息
进程虚拟机读取
访问权限

这对我很有用:

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);
}
handleh=OpenProcess(进程查询信息|进程虚拟机读取,
假,,
6088);
如果(0==h)
{

std::cerr如何打开进程?能否显示周围的代码?哦,为什么不使用?GetProcessImageFileName为每个进程返回“\”,但没有任何错误代码。:/返回“\”的原因是您使用了错误的字符编码-API返回了2个字节,您使用了1个字节。“\”表示路径为:\device\Harddisk0\Partition1\Windows\System32\Ctype.nls的设备形式,如文档中所述-您需要首先对字符编码问题进行排序。GetModuleFilename现在返回一些进程的错误代码299和“C”对于其他人,但不是整个过程name@jgpt,如果二进制调用
GetModuleFileNameEx()
为32位且目标进程为64位,则将返回错误代码299。这就是您正在执行的操作吗?不确定“C”是什么意思:这是exe的名称?如果是,听起来像是传递的缓冲区大小为2字节,即“C”通常是驱动器名。+1但请注意,GetProcessImageFileName()也是如此。虽然OpenProcess()已成功进行同步访问,但将该句柄传递给GetProcessImageFileName()时出现错误5。更改OpenProcess()调用以请求进程_查询|信息|进程_VM _读取导致GetProcessImageFileName()要成功使用结果句柄。