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).
NTSTATUS MmProtectDriverSection(
[in] PVOID AddressWithinSection,
[in] SIZE_T Size,
[in] ULONG Flags
);
[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.
MmProtectDriverSection devuelve un valor NTSTATUS que indica el resultado de la operación:
Valor devuelto | Descripción |
---|---|
|
La operación se ha completado correctamente y la sección del controlador se ha protegido correctamente. |
|
El modo seguro virtual (VSM) está deshabilitado actualmente para que la función no pueda proteger la sección del controlador. |
|
Se ha especificado una máscara de bits de marcas no válidas (o un tamaño distinto de cero). |
|
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) |
|
La sección especificada pertenece a un controlador que no es compatible con esta API (consulte comentarios). |
|
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. |
|
La sección especificada ya está protegida. |
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.
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 |