-
标准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;
- }
-
-
-
-
-
- __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;
- }
-
-
-
-
-
- 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;
- }
-
相关阅读:
Data Visualisation Cheet Sheet
数据预处理
算法题目
集成方法
Mysql数据库重要知识点(知了堂学习心得)
Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 创建复杂数据模型
Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 排序、筛选、分页以及分组
Working with Data » 使用Visual Studio开发ASP.NET Core MVC and Entity Framework Core初学者教程
ASP.NET Core文档中Work with Data章节的翻译目录
webpages框架中使用Html.TextArea()在前台显示多行信息时,如何进行大小、样式的设置
-
原文地址:https://www.cnblogs.com/kuangke/p/5524443.html
Copyright © 2020-2023
润新知