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

我目前正在试图获得我的pid程序列表的名称。

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

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

Solutions Collecting From Web of "从进程ID获取进程可执行文件的名称"

传递给GetmoduleeFileNameEx()的进程句柄需要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 (GetmoduleeFileNameEx(h, 0, exe_path, sizeof(exe_path) - 1)) { std::cout << exe_path << "\n"; } else { std::cerr << "GetmoduleeFileNameEx() failed: " << GetLastError() << "\n"; } CloseHandle(h); } 

然而,正如其他人所指出的(并且在GetmoduleeFileNameEx()的文档中也有说明),有更安全的方式来获取这些信息:

  • GetProcessImageFileName()
  • QueryFullProcessImageName()

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