标准MDL方法修改Page、NonPage内存的属性
- typedef struct _REPROTECT_CONTEXT
- {
- PMDL Mdl;
- PUCHAR LockedVa;
- } REPROTECT_CONTEXT, * PREPROTECT_CONTEXT;
- NTSTATUS
- MmLockVaForWrite(
- __in PVOID Va,
- __in ULONG Length,
- __out PREPROTECT_CONTEXT ReprotectContext
- )
- {
- NTSTATUS Status;
- Status = STATUS_SUCCESS;
- ReprotectContext->Mdl = 0;
- ReprotectContext->LockedVa = 0;
- ReprotectContext->Mdl = IoAllocateMdl(
- Va,
- Length,
- FALSE,
- FALSE,
- 0
- );
- if (!ReprotectContext->Mdl)
- {
- return STATUS_INSUFFICIENT_RESOURCES;
- }
- //
- // Retrieve a locked VA mapping.
- //
- __try
- {
- MmProbeAndLockPages(
- ReprotectContext->Mdl,
- KernelMode,
- IoModifyAccess
- );
- }
- __except (EXCEPTION_EXECUTE_HANDLER)
- {
- return GetExceptionCode();
- }
- ReprotectContext->LockedVa = (PUCHAR)MmMapLockedPagesSpecifyCache(
- ReprotectContext->Mdl,
- KernelMode,
- MmCached,
- 0,
- FALSE,
- NormalPagePriority
- );
- if (!ReprotectContext->LockedVa)
- {
- IoFreeMdl(
- ReprotectContext->Mdl
- );
- ReprotectContext->Mdl = 0;
- return STATUS_ACCESS_VIOLATION;
- }
- //
- // Reprotect.
- //
- Status = MmProtectMdlSystemAddress(
- ReprotectContext->Mdl,
- PAGE_EXECUTE_READWRITE
- );
- if (!NT_SUCCESS(Status))
- {
- MmUnmapLockedPages(
- ReprotectContext->LockedVa,
- ReprotectContext->Mdl
- );
- MmUnlockPages(
- ReprotectContext->Mdl
- );
- IoFreeMdl(
- ReprotectContext->Mdl
- );
- ReprotectContext->LockedVa = 0;
- ReprotectContext->Mdl = 0;
- }
- return Status;
- }
- NTSTATUS
- MmUnlockVaForWrite(
- __in PREPROTECT_CONTEXT ReprotectContext
- )
- {
- if (ReprotectContext->LockedVa)
- {
- MmUnmapLockedPages(
- ReprotectContext->LockedVa,
- ReprotectContext->Mdl
- );
- MmUnlockPages(
- ReprotectContext->Mdl
- );
- IoFreeMdl(
- ReprotectContext->Mdl
- );
- ReprotectContext->LockedVa = 0;
- ReprotectContext->Mdl = 0;
- }
- return STATUS_SUCCESS;
- }
标准MDL方法修改Page、NonPage内存的属性的更多相关文章
- Linux内存描述之内存页面page–Linux内存管理(四)
服务器体系与共享存储器架构 日期 内核版本 架构 作者 GitHub CSDN 2016-06-14 Linux-4.7 X86 & arm gatieme LinuxDeviceDriver ...
- [置顶] IOS7状态栏StatusBar官方标准适配方法
IOS7状态栏StatusBar官方标准适配方法 hello,大家好,ios7正式版已经发布,相信大家都在以各种方式来适配ios7. 如果你已经下载了xcode5,正准备使用,你会发现各种布局的改变. ...
- 修改linux共享内存大小
这是实际linux系统显示的实际数据: beijibing@bjb-desktop:/proc/sys/kernel$ cat shmmax 33554432 beijibing@bjb-deskt ...
- ObjC如何通过runtime修改Ivar的内存管理方式
ObjC如何通过runtime修改Ivar的内存管理方式 为什么要这么做? 在iOS 9之前,UITableView(或者更确切的说是 UIScrollView)有一个众所周知的问题: propert ...
- ORACLE_修改实例的内存大小
注:本文来源于:星火spark <Oracle的实例占用内存调整> ORACLE_修改实例的内存大小 一:修改oracle数据库实例内存大小脚本 ---- 1.操作 (oracle使用内 ...
- Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象。
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. 语法EDIT Object.defineProperty(obj, ...
- IOS7状态栏StatusBar官方标准适配方法
IOS7状态栏StatusBar官方标准适配方法 hello,大家好,ios7正式版已经发布,相信大家都在以各种方式来适配ios7. 如果你已经下载了xcode5,正准备使用,你会发现各种布局的改变. ...
- Virtualbox修改虚拟机分配内存的大小
起因:因为虚拟机刚开始分配的内存太小,导致太卡, 解决方法:修改虚拟机分配内存的大小 方法一:必须在关闭ubuntu的前提下进行,否则无法修改 点击设置 系统选项 主板中的内存大小 之后开启即可 方法 ...
- JVM存储位置分配——java中局部变量、实例变量和静态变量在方法区、栈内存、堆内存中的分配
Java中的变量根据不同的标准可以分为两类,以其引用的数据类型的不同来划分可分为“原始数据类型变量和引用数据类型变量”,以其作用范围的不同来区分可分为“局部变量,实例变量和静态变量”. 根据“Java ...
随机推荐
- python模块介绍- collections(5)-OrderedDict 有序字典
1.3.5 OrderedDict 有序字典 OrderedDict是dict的子类,它记住了内容添加的顺序. import collections print 'Regular dictionary ...
- Zookeeper服务常用的操作命令
Zookeeper服务安装之后,一般会在这个服务的基础之上安装其他的大数据平台,其他的框架一般会提供很多接口对Zookeeper中的内容进行一定的操作,但是功能相对单一,所以有些时候,有必要我们自己登 ...
- C#小知识特殊的DefaultValueAttribute
今天看别人写的源码发现一个特殊的DefaultValueAttribute.使用如下. 原始代码: public class People { private string _Name = " ...
- Effective C++ -----条款17:以独立语句将newed对象置入智能指针
以独立语句将newed对象存储于(置入)智能指针内.如果不这样做,一旦异常被抛出,有可能导致难以察觉的资源泄露.
- css 命名规范
网站头部: head/header(头部) top(顶部) 导航: nanv 导航具体区分:topnav(顶部导航).mainnav(主导航).mininav(迷你导航).textna ...
- 在Eclipse中手动安装pydev插件,eclipse开发python环境配置
最近在学习Python,因为我是做java的,用惯了eclipse,所以就想用eclipse开发python,但是配置开发环境的时候发现按照网上的配置大多不行,而且都是用的在线安装,很垃圾,没办法,自 ...
- ios cell展示可滑动的图片
需求: 点击cell上的图片.图片以原图显示出来,可以放大或缩小.再次点击图片移除图片显示原来界面.(和QQ空间看图片类似) 点击图片实现效果: 1. 自定义一个 UITableView (KDIma ...
- 查询局域网内在线电脑IP
COLOR 0A CLS @ECHO Off Title 查询局域网内在线电脑IP :send @ECHO off&setlocal enabledelayedexpansion ECHO 正 ...
- merge
当两个DataFrame相加的时候,如果,其中一个不全则会相加产生NA,所以必须一次性将数据的索引索引确定下来,然后对所有数据重建索引然后,填充0,再相加.否则有数据的和没数据的相加结果都变为了NA, ...
- 数据存储-CoreData总结
CoreData /*英译 Entity:实体 Attributes:属性 binary:二进制 persistent:持续化 coordinator:协调者 meging:合并 configura ...