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 |