Función MmLockPagableSectionByHandle (ntddk.h)

La rutina MmLockPagableSectionByHandle bloquea un código paginable o una sección de datos en la memoria del sistema incrementando el recuento de referencias en el identificador de la sección.

Sintaxis

void MmLockPagableSectionByHandle(
  [in] PVOID ImageSectionHandle
);

Parámetros

[in] ImageSectionHandle

Identificador de una sección de datos o código paginable. El llamador obtuvo este identificador de una llamada anterior a la rutina MmLockPagableCodeSection o MmLockPagableDataSection .

Valor devuelto

None

Observaciones

Un controlador llama inicialmente a MmLockPagableCodeSection o MmLockPagableDataSection para obtener un identificador de una sección de datos o código paginable. A partir de entonces, el controlador puede llamar a MmLockPagableSectionByHandle y MmUnlockPagableImageSection para incrementar y disminuir el recuento de referencias en el identificador.

La llamada MmLockPagableCodeSection o MmLockPagableDataSection bloquea la sección paginable en la memoria del sistema, devuelve un identificador a la sección e inicializa el recuento de referencias en el identificador en uno. MmLockPagableSectionByHandle incrementa el recuento de referencias en uno y MmUnlockPagableImageSection disminuye el recuento de referencias en uno.

Si el recuento de referencias del identificador es distinto de cero, la sección paginable se bloquea. Si el recuento de referencias es cero, se desbloquea la sección.

El identificador de la sección paginable sigue siendo válido siempre que el controlador permanezca cargado en la memoria. El controlador puede usar el mismo controlador para bloquear y desbloquear repetidamente la sección. Es decir, el controlador puede reutilizar un identificador cuyo recuento de referencias es cero. MmLockPagableSectionByHandle comprueba si la sección a la que se hace referencia reside en el espacio de direcciones del autor de la llamada y, si es así, simplemente incrementa el recuento de referencias en la sección. Si la sección no es residente, las páginas MmLockPagableSectionByHandle de la sección, las bloquea en el espacio del sistema y establece el recuento de referencias en uno.

Para evitar la pérdida de memoria del sistema, el recuento de referencias del identificador debe ser cero cuando el controlador se descarga de la memoria. De lo contrario, la sección paginable permanecerá bloqueada en la memoria del sistema después de que el controlador se descargue.

Si el controlador se prepara para descargar y el recuento de referencias del identificador es distinto de cero, el controlador debe llamar a MmUnlockPagableImageSection para reducir el recuento en cero antes de que se produzca la descarga.

Un controlador no puede llamar a MmLockPagableSectionByHandle para bloquear los búferes de usuario pasados en irP. En su lugar, use MmProbeAndLockPages .

Para obtener más información sobre el código de paginación y los datos, vea Hacer que los controladores sean paginables.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible a partir de Windows 2000.
Plataforma de destino Universal
Encabezado ntddk.h (incluya Ntddk.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= APC_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport), IrqlMmApcLte(wdm)

Consulte también

MmLockPagableCodeSection

MmLockPagableDataSection

MmPageEntireDriver

MmProbeAndLockPages

MmResetDriverPaging

MmUnlockPagableImageSection