我目前正在尝试获取我的pid程序列表的名称。
该程序以管理员身份运行,但GetModuleFileNameEx
失败,错误代码为5。
我使用OpenProcess(PROCESS_TERMINATE,PROCESS_QUERY_INFORMATION)
打开该程序,并启用了SE_DEBUG_PRIVILEGE
。
答案 0 :(得分:10)
传递给GetModuleFileNameEx()的流程句柄需要PROCESS_QUERY_INFORMATION
和PROCESS_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()的文档中也有说明),有更安全的方法来获取这些信息:
答案 1 :(得分:0)
根据this thread,当没有足够的信息返回文件名时,会返回错误。