Функция 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 (включая Wdm.h, Ntddk.h, Ntifs.h) |
Библиотека | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |