windwos核心编程--5、虚拟内存相关函数及其应用
一、前言
该系列前几篇文章:
windows核心编程--1、使用vs2019编写第一个win32项目
windows核心编程--2、windows的画笔画刷以及一些简单的应用
windows核心编程--3、有关进程的三个函数
windows核心编程--4、线程和线程同步
二、相关工具
IDE:Visual Studio 2019
三、相关函数
1、VirtualAlloc
函数,作用为分配一个虚拟内存,第一个参数为首地址,第二个参数为预分配内存大小,第三个参数表示是预定地址空间还是分配物理存储器,最后一个参数保护模式,若分配成功,则返回类型为LPVOID
的首地址。
2、VirtualFree
函数,作用为释放虚拟内存,第一个参数为要释放的地址首地址,第二个参数为释放内存大小,第三个参数一般设置为MEM_DECOMMIT
。
3、VirtualQuery
函数,作用为查询虚拟内存属性,第一个参数为VirtualAlloc
函数的返回值,第二个参数为一个类型为MEMORY_BASIC_INFORMATION
的结果体,用来存放结果,第三个参数为结构体的大小。
4、VirtualProtect
函数用来修改该虚拟内存的保护模式,第一个参数为虚拟内存句柄,第二个参数为虚拟内存大小,第三个参数为要修改后的保护模式,第四个参数为用来保存老的保护模式,这里值得注意的是,在win32程序中,该参数必须使用new
的方式来初始化,例如PDWORD oldProtect = new DWORD;
四、实验要求
1、采用虚拟内存函数VirtualAlloc,从地址“0x100000FF”分配一个n字节地址预订和物理调拨(其中n为各自学号),最开始地址页属性设置为只读。
2、采用VirtualQuery进行查询虚拟内存情况,并展示出来。
3、采用VirtualProtect函数把该地址页属性进行修改,修改为可读可写,然后将字符串“20170111”(各自学号)赋值到虚拟内存;并然后调用VirtualFree释放虚拟内存。
五、实验步骤
这个没什么好说的,调用函数即可,结果如下: