从32位的64位进程调用VirtualQueryEx函数

TL; DR:如果我从64位进程的32位进程调用VirtualQueryEx ,我应该使用MEMORY_BASIC_INFORMATION还是MEMORY_BASIC_INFORMATION32

嗨!

我有一个64位的应用程序读取其他进程的内存( OpenProcessVirtualQueryEx ,然后ReadProcessMemory )。 我想知道如果我应该做一个特殊的检查,看看其他进程是否是一个32位的。

我的代码是这样的:

 MEMORY_BASIC_INFORMATION info; SIZE_T r = VirtualQueryEx((HANDLE) handle, (void *) 0x0, &info, sizeof(info)); 

问题是, MEMORY_BASIC_INFORMATION的文档说:

要使debugging器能够debugging在不同体系结构(32位与64位)上运行的目标,请使用此结构的显式forms之一。

这两个进程在同一台计算机上运行(相同的体系结构?),但一个是32位进程,另一个是64位。

我已经在64位的Windows 8testing了这个应用程序,它适用于我的testing用例(在32位进程内存中search特定的string),但是我不希望它稍后适得其反。

:我知道这个答案 ,这就是为什么我首先提出这个问题。 我testing了32位二进制文​​件,它只是没有错误的工作。

所以,总而言之,我只是一个小白菜,它是通过一个简单的测试来解决的:

VirtualQueryEx失败,错误24 (ERROR_BAD_LENGTH),如果我尝试使用MEMORY_BASIC_INFORMATION32而不是MEMORY_BASIC_INFORMATION

答案是, 总是使用MEMORY_BASIC_INFORMATION

这就是我打电话给VirtualQueryEx

 MEMORY_BASIC_INFORMATION32 info32; SIZE_T r32 = VirtualQueryEx(hndl, (void *) 0x0, (PMEMORY_BASIC_INFORMATION) &info32, sizeof(info32));