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) |