我正在尝试使用 Windows API 查询内存信息。我想同时针对 x86 和 x64。因此,我阅读了有关 MEMORY_BASIC_INFORMATION 的文档,发现我需要两个来根据目标进程“位数”进行不同的查询。
但是当我查询 x86 进程并使用 MEMORY_BASIC_INFORMATION32 结构时,我得到系统错误代码 24。这表示命令的长度不合法。
但是当我使用 MEMORY_BASIC_INFORMATION64 版本时,该调用适用于 x86 和 x64 进程。那是怎么回事。这不是我理解的文档告诉我的。 https://msdn.microsoft.com/en-us/library/windows/desktop/aa366775(v=vs.85).aspx
这种行为是否可以跨版本移植。任何人都可以解释这种行为。还是只是我的系统完全搞砸了?
这是我使用的代码:
class Process {
HANDLE m_handle;
bool Process::query_impl(RemotePointer address, void *info, size_t size) {
return VirtualQueryEx(m_handle, address.get(), (MEMORY_BASIC_INFORMATION*) info, size);
}
public:
bool Process::query(RemotePointer address, MEMORY_BASIC_INFORMATION64 &info) {
return query_impl(address, &info, sizeof(MEMORY_BASIC_INFORMATION64));
}
bool Process::query(RemotePointer address, MEMORY_BASIC_INFORMATION32 &info) {
return query_impl(address, &info, sizeof(MEMORY_BASIC_INFORMATION32));
}
}
谢谢是提前。