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 de 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 reservaram o buffer.

[in] MemoryDescriptorList

Um ponteiro para o MDL que deve ser mapeado. Este MDL deve descrever páginas físicas bloqueadas. Um MDL bloqueado pode ser criado pelo MmProbeAndLockPages ou rotina de MmAllocatePagesForMdlEx.

[in] CacheType

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

Valor de retorno

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 avancem mesmo em cenários de baixo recurso.

Observações

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

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

  • Use MmProbeAndLockPages para bloquear as páginas físicas descritas pelo MDL obtidas 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á o vírgula da memória com MmUnmapReservedMapping. O chamador pode mapear e cancelar o mapa do buffer de memória conforme necessário e deve desacompactá-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 previamente reservado pelo chamador, e não o início do subconjunto de memória a ser mapeado. O chamador especifica o endereço inicial e o comprimento do buffer quando ele aloca o MDL com IoAllocateMdl. O buffer deve caber dentro do intervalo de memória reservado, mas pode ser um subconjunto estrito.

A rotina usa o parâmetro CacheType somente se as páginas descritas pelo MDL ainda não tiverem um tipo de cache associado a eles. 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
de cliente com suporte mínimo Disponível no Windows XP e versões posteriores do Windows.
da Plataforma de Destino Universal
cabeçalho wdm.h (include Wdm.h, Ntddk.h, Ntifs.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL <= DISPATCH_LEVEL
regras de conformidade de DDI HwStorPortProhibitedDIs(storport)

Consulte também

IoAllocateMdl

MEMORY_CACHING_TYPE

MmAllocateMappingAddress

MmAllocatePagesForMdl

MmAllocatePagesForMdlEx

MmFreeMappingAddress

MmProbeAndLockPages

MmUnmapReservedMapping