0

我正在运行一个名为 VMdriver5.exe 的程序(我附加的图像的左侧),它创建了另一个名为 VMmapper.exe 的程序的进程。在 VMdriver5.c 代码中,它获取其 PID(使用 GetCurrentProcessId())并在创建时将其 PID 传递给 VMmapper.exe,这样 VMmapper 会显示 VMdriver5.exe 的内存布局,以便我可以看到虚拟内存选项。

VirtualAlloc 在可用内存区域上失败

我想知道是否可以得到一些帮助,因为当我在某些内存地址上调用 VirtualAlloc() 时,它工作正常。但是,如下图所示,有一个内存区域有 503,808 字节的空闲空间,我尝试使用 VirtualAlloc()保留该空间的 65,536 字节,但由于某种原因它失败了。我将内存地址 00185000 作为参数之一传递。

我正在使用的代码是这样的:

lpvAddr = VirtualAlloc(vmAddress, units << 16, MEM_RESERVE, flProtect); // only works with PAGE_READONLY
            if(lpvAddr == NULL) {
               printf("Case 1: Reserve a region, VirtualAlloc() failed. Error: %ld\n", GetLastError());
            }
            else {
               printf("Committed %lu bytes at address 0x%lp\n",dwPageSize, lpvAddr); // %lu = long unsigned decimal integer
            }
            break;

如果需要,我将不胜感激,并可以提供更多代码或信息。谢谢大家,复活节快乐。

4

0 回答 0