*《精通Windows API》 5.4.2 分配和释放可读可写的虚拟内存页面

2024-01-04 02:32

本文主要是介绍*《精通Windows API》 5.4.2 分配和释放可读可写的虚拟内存页面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/* ************************************
*《精通Windows API》 
* 示例代码
* virtual.c
* 5.4.2  分配和释放可读可写的虚拟内存页面
**************************************//* 头文件 */
#include <windows.h>
#include <stdio.h>/*************************************
* int main(void)
* 功能	演示虚拟内存的使用
*
* 参数	未使用
**************************************/
int main(void)
{	SIZE_T sizeVirtual = 4000;		//大小LPVOID lpRound = (LPVOID)0x100000FF;	//地址MEMORY_BASIC_INFORMATION  mbi;	//内存信息//分配内存,直接分配已提交的内存LPVOID lpAddress = VirtualAlloc(lpRound,sizeVirtual,MEM_COMMIT|MEM_RESERVE,PAGE_READWRITE);if(lpAddress == NULL){printf("VirtualAlloc error: %d\n",GetLastError());return 1;}printf("Alloc:MEM_COMMIT|MEM_RESERVE\n");//复制数据到内存中CopyMemory(lpAddress,"hello",lstrlen("hello"));printf("分配、复制成功,地址:0x%.8x,内容:%s\n",lpAddress,lpAddress);//获取内存信息并打印VirtualQuery(lpAddress,&mbi,sizeof(mbi));printf("使用VirtualQuery获得的信息:\n""BaseAddress:0x%.8x\tAllocationBase:0x%.8x\t""AllocationProtect:0x%.8x\tRegionSize:%u\t""State:0x%.8x\tProtect:0x%.8x\tType:0x%.8x\n",mbi.BaseAddress,mbi.AllocationBase,mbi.AllocationProtect,mbi.RegionSize,mbi.State,mbi.Protect,mbi.Type);设置为READ-ONLY属性//if(!VirtualProtect(lpAddress,0,PAGE_READONLY,NULL))//{//	printf("VirtualProtect error: %d",GetLastError());//	return 1;//}测试READ-ONLY属性,异常//CopyMemory(lpAddress,"read only",lstrlen("read only"));//printf(lpAddress);获取内存信息并打印//VirtualQuery(lpAddress,&mbi,sizeof(mbi));//printf("使用VirtualQuery获得的信息:\n"//	"BaseAddress:0x%.8x\tAllocationBase:0x%.8x\t"//	"AllocationProtect:0x%.8x\tRegionSize:%d\t"//	"State:0x%.8x\tProtect:0x%.8x\tType:0x%.8x\n",//	mbi.BaseAddress,mbi.AllocationBase,//	mbi.AllocationProtect,mbi.RegionSize,//	mbi.State,mbi.Protect,mbi.Type//	);//DECOMMIT释放,页面将变为保留状态printf("Free: DECOMMIT\n");if(!VirtualFree(lpRound,sizeVirtual,MEM_DECOMMIT)){printf("VirtualFree error: %d",GetLastError());return 1;}//获取内存信息并打印VirtualQuery(lpAddress,&mbi,sizeof(mbi));printf("使用VirtualQuery获得的信息:\n""BaseAddress:0x%.8x\tAllocationBase:0x%.8x\t""AllocationProtect:0x%.8x\tRegionSize:%u\t""State:0x%.8x\tProtect:0x%.8x\tType:0x%.8x\n",mbi.BaseAddress,mbi.AllocationBase,mbi.AllocationProtect,mbi.RegionSize,mbi.State,mbi.Protect,mbi.Type);//释放内存printf("Free:RELEASE\n");if(!VirtualFree(lpAddress,0,MEM_RELEASE)){printf("VirtualFree error: %d",GetLastError());return 1;}return 0;
}

这篇关于*《精通Windows API》 5.4.2 分配和释放可读可写的虚拟内存页面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/567886

相关文章

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

Spring WebClient从入门到精通

《SpringWebClient从入门到精通》本文详解SpringWebClient非阻塞响应式特性及优势,涵盖核心API、实战应用与性能优化,对比RestTemplate,为微服务通信提供高效解决... 目录一、WebClient 概述1.1 为什么选择 WebClient?1.2 WebClient 与

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断