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

相关文章

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

使用SpringBoot创建一个RESTful API的详细步骤

《使用SpringBoot创建一个RESTfulAPI的详细步骤》使用Java的SpringBoot创建RESTfulAPI可以满足多种开发场景,它提供了快速开发、易于配置、可扩展、可维护的优点,尤... 目录一、创建 Spring Boot 项目二、创建控制器类(Controller Class)三、运行

Windows自动化Python pyautogui RPA操作实现

《Windows自动化PythonpyautoguiRPA操作实现》本文详细介绍了使用Python的pyautogui库进行Windows自动化操作的实现方法,文中通过示例代码介绍的非常详细,对大... 目录依赖包睡眠:鼠标事件:杀死进程:获取所有窗口的名称:显示窗口:根据图片找元素:输入文字:打开应用:依

javafx 如何将项目打包为 Windows 的可执行文件exe

《javafx如何将项目打包为Windows的可执行文件exe》文章介绍了三种将JavaFX项目打包为.exe文件的方法:方法1使用jpackage(适用于JDK14及以上版本),方法2使用La... 目录方法 1:使用 jpackage(适用于 JDK 14 及更高版本)方法 2:使用 Launch4j(

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化

SpringBoot如何访问jsp页面

《SpringBoot如何访问jsp页面》本文介绍了如何在SpringBoot项目中进行Web开发,包括创建项目、配置文件、添加依赖、控制层修改、测试效果以及在IDEA中进行配置的详细步骤... 目录SpringBoot如何访问JSP页python面简介实现步骤1. 首先创建的项目一定要是web项目2. 在

windows端python版本管理工具pyenv-win安装使用

《windows端python版本管理工具pyenv-win安装使用》:本文主要介绍如何通过git方式下载和配置pyenv-win,包括下载、克隆仓库、配置环境变量等步骤,同时还详细介绍了如何使用... 目录pyenv-win 下载配置环境变量使用 pyenv-win 管理 python 版本一、安装 和

Python使用pysmb库访问Windows共享文件夹的详细教程

《Python使用pysmb库访问Windows共享文件夹的详细教程》本教程旨在帮助您使用pysmb库,通过SMB(ServerMessageBlock)协议,轻松连接到Windows共享文件夹,并列... 目录前置条件步骤一:导入必要的模块步骤二:配置连接参数步骤三:实例化SMB连接对象并尝试连接步骤四:

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件: 2.调用utility bar api的方式有两种: 方法一,通过lwc调用: import {LightningElement,api ,wire } from 'lwc';import { publish, MessageContext } from 'lightning/messageService';import Ca

在 Windows 上部署 gitblit

在 Windows 上部署 gitblit 在 Windows 上部署 gitblit 缘起gitblit 是什么安装JDK部署 gitblit 下载 gitblit 并解压配置登录注册为 windows 服务 修改 installService.cmd 文件运行 installService.cmd运行 gitblitw.exe查看 services.msc 缘起