*《精通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

相关文章

SpringBoot全局异常拦截与自定义错误页面实现过程解读

《SpringBoot全局异常拦截与自定义错误页面实现过程解读》本文介绍了SpringBoot中全局异常拦截与自定义错误页面的实现方法,包括异常的分类、SpringBoot默认异常处理机制、全局异常拦... 目录一、引言二、Spring Boot异常处理基础2.1 异常的分类2.2 Spring Boot默

SpringBoo WebFlux+MongoDB实现非阻塞API过程

《SpringBooWebFlux+MongoDB实现非阻塞API过程》本文介绍了如何使用SpringBootWebFlux和MongoDB实现非阻塞API,通过响应式编程提高系统的吞吐量和响应性能... 目录一、引言二、响应式编程基础2.1 响应式编程概念2.2 响应式编程的优势2.3 响应式编程相关技术

java中4种API参数传递方式统一说明

《java中4种API参数传递方式统一说明》在Java中,我们可以使用不同的方式来传递参数给方法或函数,:本文主要介绍java中4种API参数传递方式的相关资料,文中通过代码介绍的非常详细,需要的... 目录1. 概述2. 参数传递方式分类2.1 Query Parameters(查询参数)2.2 Path

Java调用DeepSeek API的8个高频坑与解决方法

《Java调用DeepSeekAPI的8个高频坑与解决方法》现在大模型开发特别火,DeepSeek因为中文理解好、反应快、还便宜,不少Java开发者都用它,本文整理了最常踩的8个坑,希望对... 目录引言一、坑 1:Token 过期未处理,鉴权异常引发服务中断问题本质典型错误代码解决方案:实现 Token

windows下安装Nginx全过程

《windows下安装Nginx全过程》文章介绍了HTTP和反向代理服务器的概念,包括正向代理和反向代理的区别,并详细描述了如何安装和配置Nginx作为反向代理服务器... 目录概念代理正向代理反向代理安装基本属性nginx.conf查询结构属性使用运行重启停止总结概念是一个高性能的HTTP和反向代理we

Python结合Free Spire.PDF for Python实现PDF页面旋转

《Python结合FreeSpire.PDFforPython实现PDF页面旋转》在日常办公或文档处理中,我们经常会遇到PDF页面方向错误的问题,本文将分享如何用Python结合FreeSpir... 目录基础实现:单页PDF精准旋转完整代码代码解析进阶操作:覆盖多场景旋转需求1. 旋转指定角度(90/27

在C#中调用Windows防火墙界面的常见方式

《在C#中调用Windows防火墙界面的常见方式》在C#中调用Windows防火墙界面(基础设置或高级安全设置),可以使用进程启动(Process.Start)或Win32API来实现,所以本文给大家... 目录引言1. 直接启动防火墙界面(1) 打开基本防火墙设置(firewall.cpl)(2) 打开高

基于Python实现局域网内Windows桌面文件传输

《基于Python实现局域网内Windows桌面文件传输》这篇文章介绍了如何使用Python实现一个局域网文件传输系统,包括发送端和接收端的代码示例,发送端和接收端都需要在同一局域网内运行,并且确保防... 目录发送端代码 (sender.py)接收端代码 (receiver.py)图形界面版本 (可选)使

使用Python实现在PDF中添加、导入、复制、移动与删除页面

《使用Python实现在PDF中添加、导入、复制、移动与删除页面》在日常办公和自动化任务中,我们经常需要对PDF文件进行页面级的编辑,使用Python,你可以轻松实现这些操作,而无需依赖AdobeAc... 目录1. 向 PDF 添加空白页2. 从另一个 PDF 导入页面3. 删除 PDF 中的页面4. 在

MySQL索引踩坑合集从入门到精通

《MySQL索引踩坑合集从入门到精通》本文详细介绍了MySQL索引的使用,包括索引的类型、创建、使用、优化技巧及最佳实践,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录mysql索引完整教程:从入门到入土(附实战踩坑指南)一、索引是什么?为什么需要它?1.1 什么