Función MmProtectDriverSection (wdm.h)

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

Sintaxis

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 no debe ser ya 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, por lo que la función no puede 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 espacios, 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.

Comentarios

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 ninguna manera de quitar la protección. Esto es así 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 MmProtectDriverSection . Además, los autores de llamadas de esta API no pueden solicitar proteger una sección descartable ni 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 MmProtectDriverSection deben ejecutarse en IRQL <= APC_LEVEL.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows Insider 19548.
Plataforma de destino Universal
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= APC_LEVEL