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

Windows 从32位进程上的64位进程调用VirtualQueryEx函数,windows,winapi,32bit-64bit,Windows,Winapi,32bit 64bit,TL;DR:如果我从64位进程调用32位进程上的VirtualQueryEx,我应该使用MEMORY\u BASIC\u INFORMATION还是MEMORY\u BASIC\u INFORMATION32 嗨 我有一个64位的应用程序,可以读取其他进程的内存(OpenProcess,VirtualQueryEx,然后ReadProcessMemory)。我想知道我是否应该做一个特殊的检查,看看另一个进程是否是32位的 我的代码是这样的: MEMORY_BASIC_INFORMATION in

TL;DR:如果我从64位进程调用32位进程上的
VirtualQueryEx
,我应该使用
MEMORY\u BASIC\u INFORMATION
还是
MEMORY\u BASIC\u INFORMATION32

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

我的代码是这样的:

MEMORY_BASIC_INFORMATION info;

SIZE_T r = VirtualQueryEx((HANDLE) handle,
(void *) 0x0,
&info,
sizeof(info));
事情是这样说的:

使调试器能够调试在其他计算机上运行的目标 体系结构(32位与64位),使用 这个结构

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

我已经在64位Windows8中测试了这个应用程序,它适用于我的测试用例(在32位进程内存中搜索特定字符串),但我不希望以后它会适得其反


注意:我知道,这就是为什么我首先要问这个问题。我使用32位二进制文件进行了测试,它可以正常工作。

因此,总而言之,我只是个傻瓜,通过一个简单的测试就解决了这个问题:

如果我尝试使用
内存基本信息32
而不是
内存基本信息,则
虚拟查询程序将失败,并出现错误24(错误\u错误\u长度)

答案是,始终使用
内存\u基本信息

这就是我调用VirtualQueryEx的方式

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

不,他们谈论的调试器功能是。无法可靠地将VirtualQueryEx()用于32位程序中的64位进程。因此,
VirtualQueryEx
不被视为调试器?文档看起来模棱两可:(这不可能是正确的,因为当您使用32位指针时,如何在64位进程中以内存为目标?链接到的答案是正确的(并告诉您不要这样做)。(我的答案是错误的-已删除)。请记住,这个问题询问如果目标是32位,是否有问题(源进程是64位的),所以指针大小没有问题。对。从另一个方向来说,这将是一个问题。