MEMORY_BASIC_INFORMATION结构包含有关进程的虚拟地址空间中的一系列页面的信息。VirtualQuery和VirtualQueryEx函数使用此结构。
typedef struct _MEMORY_BASIC_INFORMATION { //对
PVOID BaseAddress; //区域的基地址
PVOID AllocationBase; //分配基地址
DWORD AllocationProtect; //初始访问保护
DWORD RegionSize; //大小,以字节为单位
DWORD State; //承诺,保留,免费
DWORD Protect; //当前访问保护
DWORD Type; //页面类型
} MEMORY_BASIC_INFORMATION;
typedef MEMORY_BASIC_INFORMATION *PMEMORY_BASIC_INFORMATION;
会员
BaseAddress
指向页面的基地址。
AllocationBase
指向由VirtualAlloc功能分配的一系列页面的基址。BaseAddress成员指向的页面包含在此分配范围内。
AllocationProtect
指定最初分配区域时给出的访问保护。可以存在以下标志之一,以及PAGE_GUARD和PAGE_NOCACHE保护修饰符标志:
旗 | 含义 |
PAGE_READONLY | 启用对提交的页面区域的读取访问。尝试写入承诺的区域导致访问冲突。如果系统区分只读访问权限和执行访问权限,则在承诺域中执行代码的尝试导致访问冲突。 |
PAGE_READWRITE | 启用对提交的页面区域的读取和写入访问。 |
PAGE_WRITECOPY | 给予承诺的页面区域的写时拷贝访问权限。 |
PAGE_EXECUTE | 启用对页面的承诺区域的执行访问。尝试读取或写入承诺的区域导致访问冲突。 |
PAGE_EXECUTE_READ | 启用对页面的提交区域的执行和读取访问。尝试写入承诺的区域导致访问冲突。 |
PAGE_EXECUTE_READWRITE | 对页面的提交区域执行,读取和写入访问。 |
PAGE_EXECUTE_WRITECOPY | 对页面的提交区域执行,读取和写入访问。页面是共享的读写和写时复制。 |
PAGE_GUARD | 使用底层页面保护来保护页面。但是,访问该区域会导致在主题进程中引发“保护页面输入”条件。此标志是页面保护修饰符,仅当与PAGE_NOACCESS之外的页面保护之一使用时才有效。 |
PAGE_NOACCESS | 禁用对提交的页面区域的所有访问。在承诺区域中读取,写入或执行的尝试导致访问冲突异常,称为通用保护(GP)故障。 |
PAGE_NOCACHE | 不允许缓存已提交的页面区域。物理内存的硬件属性应设置为无缓存。这是不推荐一般用途。它对于设备驱动程序是有用的;例如,映射没有缓存的视频帧缓冲区。此标志是页面保护修饰符,仅当与PAGE_NOACCESS之外的页面保护之一使用时才有效。 |
RegionSize
指定从所有页面具有相同属性的基地址开始的区域的大小(以字节为单位)。
州
指定区域中页面的状态。指出以下状态之一:
州 | 含义 |
MEM_COMMIT | 表示已分配物理存储的已提交页面,位于内存中或磁盘上的页面文件中。 |
MEM_FREE | 表示呼叫进程无法访问的可用页面,可以分配。对于免费页面,AllocationBase,AllocationProtect,保护和类型成员中的信息未定义。 |
MEM_RESERVE | 表示在不分配任何物理存储的情况下保留进程的虚拟地址空间范围的保留页面。对于保留页面,保护成员中的信息未定义。 |
保护
指定区域中页面的访问保护。指定了AllocationProtect成员列出的一个标志。
类型
指定区域中的页面类型。定义了以下类型:
类型 | 含义 |
MEM_IMAGE | 表示区域内的内存页映射到图像部分的视图。 |
MEM_MAPPED | 表示区域内的内存页面被映射到部分的视图。 |
MEM_PRIVATE | 表示该区域内的内存页是私有的(不由其他进程共享)。 |
也可以看看