Función MmProtectDriverSection (wdm.h)

El MmProtectDriverSection de solo lectura protege una sección de un controlador cargado mediante los servicios proporcionados por el modo seguro virtual (VSM).

Sintaxis

C++
NTSTATUS MmProtectDriverSection(
  [in] PVOID  AddressWithinSection,
  [in] SIZE_T Size,
  [in] ULONG  Flags
);

Parámetros

[in] AddressWithinSection

Puntero a una sección de datos válida que pertenece a una imagen de controlador. La sección de datos aún no debe ser ejecutable; de lo contrario, se producirá un error en la API con STATUS_INVALID_PAGE_PROTECTION.

[in] Size

Este parámetro está reservado actualmente para uso futuro y debe establecerse en 0.

[in] Flags

Especifique las marcas que controlan la operación: MM_PROTECT_DRIVER_SECTION_ALLOW_UNLOAD : se usa para especificar que el controlador todavía se puede descargar una vez protegida la sección.

Valor devuelto

MmProtectDriverSection devuelve un valor NTSTATUS que indica el resultado de la operación:

Valor devuelto Descripción
STATUS_SUCCESS
La operación se ha completado correctamente y la sección del controlador se ha protegido correctamente.
STATUS_INVALID_DEVICE_STATE
El modo seguro virtual (VSM) está deshabilitado actualmente para que la función no pueda proteger la sección del controlador.
STATUS_INVALID_PARAMETER
Se ha especificado una máscara de bits de marcas no válidas (o un tamaño distinto de cero).
STATUS_INVALID_PAGE_PROTECTION
La sección del controlador especificada por una dirección contenida en ella se asigna a través de una protección no válida (no se admiten secciones ejecutables)
STATUS_NOT_SUPPORTED
La sección especificada pertenece a un controlador que no es compatible con esta API (consulte comentarios).
STATUS_ACCESS_VIOLATION
La sección especificada se puede descartar o contiene huecos, que no están respaldados por ninguna memoria física. Esto suele ocurrir cuando una alineación de sección es mayor que un tamaño de página.
STATUS_ALREADY_COMMITTED
La sección especificada ya está protegida.

Observaciones

La rutina protege la memoria física que respalda la sección del controlador mediante la tabla SLAT (traducción de direcciones de segundo nivel) administrada por VSM. La memoria protegida se convertirá en de solo lectura para todo el sistema operativo. 

Tenga en cuenta que, una vez protegida la sección, no hay forma de quitar la protección. Esto es por diseño: la única excepción de esta regla es cuando el autor de la llamada especifica la marca MM_PROTECT_DRIVER_SECTION_ALLOW_UNLOAD. En ese caso, cuando se descarga el controlador de destino, la sección protegida se libera y libera.

Los controladores asignados con páginas grandes y controladores de sesión no son compatibles con la API de MmProtectDriverSection. Además, los autores de llamadas de esta API no pueden solicitar proteger una sección descartable o una sección que contenga la IAT (Tabla de direcciones de importación).

Tenga en cuenta que si el autor de la llamada especifica una dirección que no pertenece a ninguna imagen de controlador cargada, el sistema se bloqueará con la comprobación de errores de MEMORY_MANAGEMENT (tipo 0x1100).

Los autores de llamadas de la API de MmProtectDriverSection deben ejecutarse en IRQL <= APC_LEVEL.

Requisitos

Requisito Valor
cliente mínimo admitido Disponible a partir de Windows Insider 19548.
de la plataforma de destino de Universal
encabezado de wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL <= APC_LEVEL