Compartilhar via


Função MmMapLockedPagesWithReservedMapping (wdm.h)

A rotina MmMapLockedPagesWithReservedMapping mapeia todo ou parte de um intervalo de endereços que foi previamente reservado pela rotina MmAllocateMappingAddress .

Sintaxe

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

Parâmetros

[in] MappingAddress

Ponteiro para o início do intervalo de memória virtual reservado. Esse deve ser um endereço retornado anteriormente por MmAllocateMappingAddress.

[in] PoolTag

Especifica a marca de pool para o buffer de memória reservado. Isso deve ser idêntico ao valor especificado no parâmetro PoolTag da chamada para MmAllocateMappingAddress que reservou o buffer.

[in] MemoryDescriptorList

Um ponteiro para o MDL que deve ser mapeado. Esse MDL deve descrever páginas físicas que estão bloqueadas. Um MDL bloqueado pode ser criado pela rotina MmProbeAndLockPages ou MmAllocatePagesForMdlEx .

[in] CacheType

Especifica o valor de MEMORY_CACHING_TYPE a ser usado para criar o mapeamento.

Retornar valor

MmMapLockedPagesWithReservedMapping retorna um ponteiro para o início da memória mapeada ou NULL se o sistema não puder mapear a memória. Essa rotina retornará NULL somente se houver um erro nos parâmetros de função (por exemplo, o endereço de mapeamento do driver não é grande o suficiente para abranger o MDL fornecido). Essa função destina-se a permitir que os drivers progridam, mesmo em cenários de poucos recursos.

Comentários

O chamador pode usar MmMapLockedPagesWithReservedMapping para mapear um subintervalo do intervalo de memória virtual reservado por MmAllocateMappingAddress da seguinte maneira:

  • Use IoAllocateMdl para alocar um MDL. O MDL retornado é criado usando o endereço inicial e o tamanho especificados do subintervalo do intervalo de memória virtual a ser mapeado.

  • Use MmProbeAndLockPages para bloquear as páginas físicas descritas pelo MDL obtido na etapa 1.

  • Use MmMapLockedPagesWithReservedMapping para realmente mapear a memória virtual para a memória física que foi bloqueada na etapa 2. Observe que o endereço virtual retornado por essa função inclui o deslocamento de bytes especificado pelo MDL. No entanto, o campo MappedSystemVa do MDL definido por essa função não inclui o deslocamento de bytes.

  • Depois que o chamador não precisar acessar a memória, ele removerá a memória com MmUnmapReservedMapping. O chamador pode mapear e desmapear o buffer de memória conforme necessário e deve desmapeá-lo antes de liberar o intervalo de mapeamento com MmFreeMappingAddress.

Observe que o parâmetro MappingAddress especifica o início do intervalo de memória anteriormente reservado pelo chamador, não o início do subrange de memória a ser mapeado. O chamador especifica o endereço inicial e o comprimento do buffer quando aloca o MDL com IoAllocateMdl. O buffer deve caber dentro do intervalo de memória reservado, mas pode ser um subconjunto estrito.

A rotina usará o parâmetro CacheType somente se as páginas descritas pelo MDL ainda não tiverem um tipo de cache associado a elas. No entanto, em quase todos os casos, as páginas já têm um tipo de cache associado e esse tipo de cache é usado pelo novo mapeamento. Uma exceção a essa regra é para páginas alocadas por MmAllocatePagesForMdl, que não têm um tipo de cache específico associado a elas. Para essas páginas, o parâmetro CacheType determina o tipo de cache do mapeamento.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível no Windows XP e versões posteriores do Windows.
Plataforma de Destino Universal
Cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
Biblioteca NtosKrnl.lib
DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
Regras de conformidade da DDI HwStorPortProhibitedDDIs(storport)

Confira também

IoAllocateMdl

MEMORY_CACHING_TYPE

MmAllocateMappingAddress

MmAllocatePagesForMdl

MmAllocatePagesForMdlEx

MmFreeMappingAddress

MmProbeAndLockPages

MmUnmapReservedMapping