gpt4 book ai didi

delphi - 为什么我在 64 位 Windows 8 上从 GetModuleFileNameEx 得到的信息是无意义的?

转载 作者:行者123 更新时间:2023-12-03 15:05:09 36 4
gpt4 key购买 nike

我有这个

function NazwaProcesu(const uchwyt: Thandle): string;
var
pid: DWORD;
hProcess: Thandle;
sciezka: array [0..MAX_PATH - 1] of char;
begin
GetWindowThreadProcessId(uchwyt, pid);
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, FALSE, pid);
if hProcess <> 0 then
try
GetModuleFileNameEx(hProcess, 0, sciezka, MAX_PATH)
finally
Result := sciezka;
CloseHandle(hProcess);
end;
end;

在 Windows 7 32 位上没有问题。在 Win 8 x64 上我有这个:

enter image description here

我猜最后 3 个条目应该是 explorer.exe。感谢您的帮助。

最佳答案

据我所知,当代码在 32 位进程中执行时,这种方法将无法检索 64 位进程信息。在 WOW64 模拟器内部运行时,此类问题很常见,避免此类问题的最简洁方法是在 WOW64 模拟器外部运行代码。也就是说,在 64 位进程中运行代码。

如果您无法重新编译为 64 位,解决此问题的其他可能方法包括:

  1. 使用单独的 64 位进程和一些 IPC 来检索信息。
  2. 使用WMI获取模块文件名。
  3. 使用QueryFullProcessImageName

我总是喜欢强调的另一点是错误检查很重要。调用 GetModuleFileNameEx 时无法检查错误。调用显然失败了,这就是为什么您最终会得到未初始化的文本缓冲区。始终检查 Windows API 调用是否有错误。

关于delphi - 为什么我在 64 位 Windows 8 上从 GetModuleFileNameEx 得到的信息是无意义的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25063530/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com