MmSecureVirtualMemoryEx 函数 (ntddk.h)

此例程探测请求的地址范围,并保护指定的地址范围,使其保护更加严格并被删除。

语法

HANDLE MmSecureVirtualMemoryEx(
  PVOID  Address,
  SIZE_T Size,
  ULONG  ProbeMode,
  ULONG  Flags
);

参数

Address

指向要探测和保护的基址的指针。

Size

指定要保护的范围的大小(以字节为单位)。

ProbeMode

指定允许的最严格的页面保护。 使用 PAGE_READWRITE 指定地址范围必须同时保持可读性和可写性,或使用 PAGE_READONLY 指定地址范围必须保持可读性。

ProbeMode 含义
PAGE_READWRITE 无法将保护更改为PAGE_NOACCESS或PAGE_READONLY。 允许所有其他保护更改。
PAGE_READONLY 无法将保护更改为PAGE_NOACCESS。 允许所有其他保护更改。

Flags

指定以下一个或多个标志:

标志 描述
MM_SECURE_EXCLUSIVE 仅当没有其他安全项已固定到有问题的 VAD 的任何位置时,保护才会成功。
MM_SECURE_NO_CHANGE 应用后,不允许对提供的虚拟地址区域进行保护更改。 如果进程正在退出,仍可以删除该区域。
MM_SECURE_USER_MODE_ONLY 此安全指定的保护将仅应用于尝试更改保护的用户模式的后续调用, (内核模式调用方将绕过此安全) 。
MM_SECURE_NO_INHERIT 如果克隆了进程,则与父进程不同,子进程的 VAD 将不受保护。

返回值

返回一个类似于句柄的值,该值仅用于取消保护范围。

如果由于保护问题、未提交的内存或参数无效而无法锁定范围,则此例程返回 NULL。

注解

如果需要指定MM_SECURE_NO_CHANGE以便所提供的视图上不允许任何保护更改,请使用 MmSecureVirtualMemoryEx 而不是 MmSecureVirtualMemory

此函数的返回值只能与 MmUnsecureVirtualMemory 一起使用。 驱动程序调用该例程以将范围返回到正常状态。

要求

要求
最低受支持的客户端 Windows 10 版本 1809
标头 ntddk.h
IRQL APC_LEVEL

另请参阅