Функция 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 (см. примечания). |
|
Указанный раздел можно отменить или содержит пробелы, которые не поддерживаются физической памятью. Обычно это происходит, когда выравнивание разделов больше размера страницы. |
|
Указанный раздел уже защищен. |
Замечания
Подпрограмма защищает физическую память, резервную копию раздела драйвера, используя таблицу SLAT (перевод адресов второго уровня), управляемую VSM. Защищенная память будет доступна только для чтения для всей операционной системы.
Обратите внимание, что после защиты раздела невозможно удалить защиту. Это по дизайну: единственное исключение этого правила заключается в том, что вызывающий указывает флаг MM_PROTECT_DRIVER_SECTION_ALLOW_UNLOAD. В этом случае при выгрузке целевого драйвера защищенный раздел освобождается и освобождается.
Драйверы, сопоставленные с большими страницами и драйверами сеансов, не поддерживаются API MmProtectDriverSection. Кроме того, вызывающие этот API не могут запрашивать защиту отбрасываемого раздела или раздела, содержащего IAT (таблица импорта адресов).
Обратите внимание, что если вызывающий указывает адрес, который не принадлежит ни одному загруженного образа драйвера, система завершится сбоем с ошибкой MEMORY_MANAGEMENT (тип 0x1100).
Вызывающие API MmProtectDriverSection должны выполняться в IRQL <= APC_LEVEL.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Доступно начиная с Программы предварительной оценки Windows 19548. |
целевая платформа | Всеобщий |
заголовка | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
библиотеки | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |