Compartir a través de


Función MmMapLockedPagesWithReservedMapping (wdm.h)

La rutina MmMapLockedPagesWithReservedMapping asigna todo o parte de un intervalo de direcciones reservado previamente por la rutina MmAllocateMappingAddress .

Sintaxis

PVOID MmMapLockedPagesWithReservedMapping(
  [in] PVOID                                                    MappingAddress,
  [in] ULONG                                                    PoolTag,
  [in] PMDL                                                     MemoryDescriptorList,
  [in] __drv_strictTypeMatch(__drv_typeCond)MEMORY_CACHING_TYPE CacheType
);

Parámetros

[in] MappingAddress

Puntero al principio del intervalo de memoria virtual reservado. Debe ser una dirección devuelta previamente por MmAllocateMappingAddress.

[in] PoolTag

Especifica la etiqueta de grupo para el búfer de memoria reservada. Debe ser idéntico al valor especificado en el parámetro PoolTag de la llamada a MmAllocateMappingAddress que reservó el búfer.

[in] MemoryDescriptorList

Puntero al MDL que se va a asignar. Esta MDL debe describir las páginas físicas bloqueadas. Un MDL bloqueado se puede compilar mediante la rutina MmProbeAndLockPages o MmAllocatePagesForMdlEx .

[in] CacheType

Especifica el valor de MEMORY_CACHING_TYPE que se va a usar para crear la asignación.

Valor devuelto

MmMapLockedPagesWithReservedMapping devuelve un puntero al principio de la memoria asignada o NULL si el sistema no pudo asignar la memoria. Esta rutina devuelve NULL solo si hay un error en los parámetros de función (por ejemplo, la dirección de asignación del controlador no es lo suficientemente grande como para abarcar la MDL proporcionada). Esta función está pensada para permitir que los controladores realicen un progreso hacia delante incluso en escenarios de pocos recursos.

Comentarios

El autor de la llamada puede usar MmMapLockedPagesWithReservedMapping para asignar un subrango del intervalo de memoria virtual reservado por MmAllocateMappingAddress de la siguiente manera:

  • Use IoAllocateMdl para asignar una MDL. El MDL devuelto se crea con la dirección inicial y el tamaño especificados del subrango del intervalo de memoria virtual que se va a asignar.

  • Use MmProbeAndLockPages para bloquear las páginas físicas descritas por la MDL obtenida en el paso 1.

  • Use MmMapLockedPagesWithReservedMapping para asignar realmente la memoria virtual a la memoria física bloqueada en el paso 2. Tenga en cuenta que la dirección virtual devuelta por esta función incluye el desplazamiento de bytes que especifica MDL. Sin embargo, el campo MappedSystemVa de mdL establecido por esta función no incluye el desplazamiento de bytes.

  • Una vez que el autor de la llamada no necesita acceder a la memoria, desasignación de la memoria con MmUnmapReservedMapping. El autor de la llamada puede asignar y desasignar el búfer de memoria según sea necesario, y debe desasignarlo antes de liberar el intervalo de asignación con MmFreeMappingAddress.

Tenga en cuenta que el parámetro MappingAddress especifica el principio del intervalo de memoria reservado previamente por el autor de la llamada, no el principio del subrango de memoria que se va a asignar. El autor de la llamada especifica la dirección inicial y la longitud del búfer cuando asigna mdL con IoAllocateMdl. El búfer debe caber dentro del intervalo de memoria reservado, pero puede ser un subconjunto estricto.

La rutina usa el parámetro CacheType solo si las páginas descritas por MDL aún no tienen un tipo de caché asociado. Sin embargo, en casi todos los casos, las páginas ya tienen un tipo de caché asociado y este tipo de caché lo usa la nueva asignación. Una excepción a esta regla es para las páginas asignadas por MmAllocatePagesForMdl, que no tienen un tipo de caché específico asociado. Para estas páginas, el parámetro CacheType determina el tipo de caché de la asignación.

Requisitos

Requisito Value
Cliente mínimo compatible Disponible en Windows XP y versiones posteriores de Windows.
Plataforma de destino Universal
Encabezado wdm.h (incluya Wdm.h, Ntddk.h, Ntifs.h)
Library NtosKrnl.lib
Archivo DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Reglas de cumplimiento de DDI HwStorPortProhibitedDDIs(storport)

Consulte también

IoAllocateMdl

MEMORY_CACHING_TYPE

MmAllocateMappingAddress

MmAllocatePagesForMdl

MmAllocatePagesForMdlEx

MmFreeMappingAddress

MmProbeAndLockPages

MmUnmapReservedMapping