MmProtectDriverSection 函数 (wdm.h)
mmProtectDriverSection 只读,通过使用虚拟安全模式(VSM)提供的服务来保护加载的驱动程序的一部分。
语法
NTSTATUS MmProtectDriverSection(
[in] PVOID AddressWithinSection,
[in] SIZE_T Size,
[in] ULONG Flags
);
参数
[in] AddressWithinSection
指向属于驱动程序映像的有效数据部分的指针。 数据部分不应已经可执行,否则 API 将失败并STATUS_INVALID_PAGE_PROTECTION。
[in] Size
此参数目前保留供将来使用,应设置为 0。
[in] Flags
指定控制作的标志:MM_PROTECT_DRIVER_SECTION_ALLOW_UNLOAD – 用于指定在保护节后仍可卸载驱动程序。
返回值
mmProtectDriverSection 返回一个 NTSTATUS 值,该值指示作的结果:
返回值 | 描述 |
---|---|
|
作已成功完成,驱动程序部分已成功保护 |
|
虚拟安全模式(VSM)当前处于禁用状态,因此该函数无法保护驱动程序部分。 |
|
指定了无效标志位掩码(或非零大小)。 |
|
由包含的地址指定的驱动程序部分通过无效的保护进行映射(不支持可执行部分) |
|
指定的节属于此 API 不支持的驱动程序(请参阅备注)。 |
|
指定的节是可丢弃的,或包含不由任何物理内存支持的间隙。 当分区对齐大于页面大小时,通常会发生这种情况。 |
|
指定的节已被保护。 |
言论
该例程使用 VSM 管理的 SLAT 表(二级地址转换)保护驱动程序部分的物理内存。 将对整个作系统进行只读保护的内存。
请注意,在节受保护后,无法删除保护。 这是设计:此规则的唯一例外是调用方指定MM_PROTECT_DRIVER_SECTION_ALLOW_UNLOAD标志。 在这种情况下,当目标驱动程序卸载时,将释放受保护的节并释放。
mmProtectDriverSection API 不支持使用大型页面和会话驱动程序映射的驱动程序。 此外,此 API 的调用方无法请求保护可丢弃的部分或包含 IAT(导入地址表)的部分。
请注意,如果调用方指定不属于任何已加载驱动程序映像的地址,系统将崩溃并出现MEMORY_MANAGEMENT bug 检查(类型0x1100)。
mmProtectDriverSection API 的调用方应在 IRQL <= APC_LEVEL执行。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 从 Windows 预览体验成员 19548 开始可用。 |
目标平台 | 普遍 |
标头 | wdm.h (包括 Wdm.h、Ntddk.h、Ntifs.h) |
库 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |