Función MmLockPagableDataSection (wdm.h)

La rutina MmLockPagableDataSection bloquea una sección completa de los datos del controlador en el espacio del sistema.

Sintaxis

PVOID MmLockPagableDataSection(
  [in] PVOID AddressWithinSection
);

Parámetros

[in] AddressWithinSection

Especifica la dirección simbólica de un elemento de datos dentro de la sección paginable.

Valor devuelto

MmLockPagableDataSection devuelve un valor opaco que identifica la sección. Este valor se debe pasar posteriormente a MmLockPagableSectionByHandle o a MmUnlockPagableImageSection.

Comentarios

Los controladores pueden usar esta rutina, MmLockPagableSectionByHandle y MmUnlockPagableImageSection para que sus datos privados normalmente se puedan paginar bloqueados en la memoria.

Los datos se pueden bloquear si:

  • Normalmente se accede a los datos en <= APC_LEVEL, pero es posible que sea necesario acceder a ellos en niveles irQL superiores durante períodos cortos.

  • El controlador usa los datos con poca frecuencia y de forma predecible.

Por ejemplo, los controladores de los dispositivos mezcladores usan secciones de datos paginables. Dado que el controlador usa datos suficientes para crear una sección de datos paginable y el controlador sabe cuándo se necesitan los datos, este controlador usa MmLockPagableDataSection, MmLockPagableSectionByHandle y MmUnlockPagableImageSection para poner una sección de datos en el espacio del sistema cuando sea necesario y hacer que esté disponible para paginarse cuando no sea necesario.

Una sola llamada a MmLockPagableDataSection hace que toda la sección, que contiene los datos a los que se hace referencia, se bloquee en el espacio del sistema.

Es una operación costosa bloquear una sección. Si un controlador bloquea una sección de datos paginables en más de un lugar, use MmLockPagableDataSection para la primera solicitud. Realice solicitudes de bloqueo posteriores mediante una llamada a MmLockPagableSectionByHandle y pase el identificador devuelto por MmLockPagableDataSection. El bloqueo mediante el controlador mejora significativamente el rendimiento del controlador. Se desbloquea una sección bloqueada llamando a MmUnlockPagableImageSection.

El administrador de memoria mantiene un recuento de referencias en la sección . Una sección de datos paginables solo está disponible para paginarse cuando el recuento de referencias es cero. Cada solicitud de bloqueo incrementa el recuento; cada solicitud de desbloqueo disminuye el recuento. Un controlador debe desbloquear una sección tantas veces como bloquee una sección para asegurarse de que dicha sección estará disponible para paginarse cuando no se necesite la sección. Un identificador siempre es válido, independientemente del recuento. Si el recuento de un identificador es cero y se realiza una llamada a MmLockPagableSectionByHandle, el recuento se establece en uno y, si la sección se ha paginado, se paginará.

Los datos de una sección de datos paginables se marcan mediante una directiva del compilador. Para crear una sección de datos paginable, use #pragma data_seg ("PAGE") al principio del módulo de datos y #pragma data_seg () al final del módulo. La palabra clave PAGE distingue mayúsculas de minúsculas, es decir, PAGE debe escribirse en mayúsculas.

Tenga en cuenta que también hay un #pragma data_seg("INIT") que se usa para hacer que los datos se puedan descartar después de la inicialización del sistema. Excepto para el uso de INIT en lugar de PAGE, la sintaxis es la misma. Sin embargo, el resultado no es; el uso de la directiva PAGE hace que la sección de datos se pueda paginar. Cuando se usa la directiva INIT , los datos de la sección se descartan en cuanto el controlador vuelve de su rutina de entrada del controlador o su rutina de reinicialización si el controlador tiene uno.

Para obtener más información sobre la paginación de 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 wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <=APC_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDIs(storport), IrqlMmApcLte(wdm)

Consulte también

MmLockPagableCodeSection

MmLockPagableSectionByHandle

MmPageEntireDriver

MmResetDriverPaging

MmUnlockPagableImageSection