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