Compartir a través de


Función MmLockPagableSectionByHandle (ntddk.h)

El MmLockPagableSectionByHandle rutina bloquea una sección de datos o código paginable 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 autor de la llamada obtuvo este identificador de una llamada anterior a la MmLockPagableCodeSection o rutina de MmLockPagableDataSection.

Valor devuelto

Ninguno

Observaciones

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

El MmLockPagableCodeSection o MmLockPagableDataSection llama 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 a uno. MmLockPagableSectionByHandle incrementa el recuento de referencias por uno y MmUnlockPagableImageSection disminuye el recuento de referencias por uno.

Si el recuento de referencias del identificador es distinto de cero, la sección paginable está bloqueada. 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 de la sección. Si la sección no está residente, MmLockPagableSectionByHandle páginas de la sección, la 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 disminuir 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 los IRP. Use mmProbeAndLockPages en su lugar.

Para obtener más información sobre la paginación de código y los datos, vea Hacer que los controladores se puedan paginar.

Requisitos

Requisito Valor
cliente mínimo admitido Disponible a partir de Windows 2000.
de la plataforma de destino de Universal
encabezado de ntddk.h (incluya Ntddk.h)
biblioteca de NtosKrnl.lib
DLL de NtosKrnl.exe
irQL <= APC_LEVEL
reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport), IrqlMmApcLte(wdm)

Consulte también

MmLockPagableCodeSection

MmLockPagableDataSection

MmPageEntireDriver

mmProbeAndLockPages

MmResetDriverPaging

MmUnlockPagableImageSection