Função ZwMapViewOfSection (wdm.h)
A rotina ZwMapViewOfSection mapeia uma exibição de uma seção para o espaço de endereço virtual de um processo de assunto.
Sintaxe
NTSYSAPI NTSTATUS ZwMapViewOfSection(
[in] HANDLE SectionHandle,
[in] HANDLE ProcessHandle,
[in, out] PVOID *BaseAddress,
[in] ULONG_PTR ZeroBits,
[in] SIZE_T CommitSize,
[in, out, optional] PLARGE_INTEGER SectionOffset,
[in, out] PSIZE_T ViewSize,
[in] SECTION_INHERIT InheritDisposition,
[in] ULONG AllocationType,
[in] ULONG Win32Protect
);
Parâmetros
[in] SectionHandle
Manipule para um objeto de seção. Esse identificador é criado por uma chamada bem-sucedida para ZwCreateSection ou ZwOpenSection.
[in] ProcessHandle
Identificador para o objeto que representa o processo no qual a exibição deve ser mapeada. Use a macro ZwCurrentProcess para especificar o processo atual. O identificador deve ter sido aberto com acesso PROCESS_VM_OPERATION .
[in, out] BaseAddress
Ponteiro para uma variável que recebe o endereço base da exibição. Se o valor desse parâmetro não for NULL, a exibição será alocada começando no endereço virtual especificado arredondado para baixo até o próximo limite de endereço de 64 quilobytes.
[in] ZeroBits
Especifica o número de bits de endereço de ordem alta que devem ser zero no endereço base da exibição de seção. O valor desse parâmetro deve ser menor que 21 e é usado somente se BaseAddress for NULL— em outras palavras, quando o chamador permitir que o sistema determine onde alocar a exibição.
[in] CommitSize
Especifica o tamanho, em bytes, da região inicialmente confirmada da exibição. CommitSize é significativo apenas para seções com suporte de arquivo de página e é arredondado para o múltiplo mais próximo de PAGE_SIZE. (Para seções que mapeiam arquivos, os dados e a imagem são confirmados no momento da criação da seção.)
[in, out, optional] SectionOffset
Um ponteiro para uma variável que recebe o deslocamento, em bytes, do início da seção para a exibição. Se esse ponteiro não for NULL, o deslocamento será arredondado para baixo até o próximo limite de tamanho de granularidade de alocação.
[in, out] ViewSize
Um ponteiro para uma variável SIZE_T. Se o valor inicial dessa variável for zero, ZwMapViewOfSection mapeará uma exibição da seção que começa em SectionOffset e continua até o final da seção. Caso contrário, o valor inicial especifica o tamanho da exibição, em bytes. ZwMapViewOfSection sempre arredonda esse valor para cima até o múltiplo mais próximo de PAGE_SIZE antes de mapear a exibição.
No retorno, o valor recebe o tamanho real, em bytes, da exibição.
[in] InheritDisposition
Especifica como a exibição deve ser compartilhada com processos filho. Os valores possíveis são:
ViewShare
A exibição será mapeada em todos os processos filho criados no futuro.
ViewUnmap
A exibição não será mapeada em processos filho.
Os drivers normalmente devem especificar ViewUnmap para esse parâmetro.
[in] AllocationType
Especifica um conjunto de sinalizadores que descreve o tipo de alocação a ser executada para a região de páginas especificada. Os sinalizadores válidos são MEM_RESERVE, MEM_TOP_DOWN, MEM_LARGE_PAGES, MEM_DIFFERENT_IMAGE_BASE_OK e MEM_REPLACE_PLACEHOLDER. Embora MEM_COMMIT não seja permitido, ele estará implícito, a menos que MEM_RESERVE seja especificado. Para obter mais informações sobre os sinalizadores MEM_XXX , consulte a descrição das rotinas VirtualAlloc e MapViewOfFile3 .
[in] Win32Protect
Especifica a proteção de página a ser aplicada ao modo de exibição mapeado.
Para objetos de seção criados com o atributo SEC_IMAGE, o parâmetro Win32Protect não tem efeito e pode ser definido como qualquer valor válido, como PAGE_READONLY.
Para objetos de seção criados com o atributo SEC_IMAGE_NO_EXECUTE, o valor Win32Protect deve ser definido como PAGE_READONLY.
Para seções que não são de imagem, o valor do parâmetro Win32Protect deve ser compatível com a proteção de página da seção especificada quando ZwCreateSection foi chamado.
ZwMapViewOfSection define o tipo de cache das páginas mapeadas para corresponder ao tipo de cache fornecido quando o objeto de seção foi criado. Por exemplo, se ZwCreateSection foi chamado com o sinalizador SEC_NOCACHE, ZwMapViewOfSection mapeará as páginas sem cache, independentemente de o parâmetro Win32Protect incluir o sinalizador PAGE_NOCACHE ou não.
Retornar valor
ZwMapViewOfSection retorna um valor NTSTATUS. Os possíveis valores retornados incluem o seguinte:
Código de retorno | Descrição |
---|---|
STATUS_SUCCESS | A rotina executou com êxito a operação solicitada. |
STATUS_CONFLICTING_ADDRESSES | O intervalo de endereços especificado está em conflito com um intervalo que já está reservado. |
STATUS_INVALID_PAGE_PROTECTION | O valor especificado para o parâmetro Win32Protect é inválido. |
STATUS_SECTION_PROTECTION | O valor especificado para o parâmetro Win32Protect é incompatível com a proteção de página especificada quando a seção foi criada. |
Comentários
Várias exibições diferentes de uma seção podem ser mapeadas simultaneamente para o espaço de endereço virtual de um ou mais processos.
Não use ZwMapViewOfSection para mapear um intervalo de memória de \Device\PhysicalMemory para o modo de usuário, a menos que o driver tenha alocado diretamente o intervalo de memória por meio de MmAllocatePagesForMdlEx ou outro método que garanta que nenhum outro componente do sistema tenha mapeado o mesmo intervalo de memória com um valor de MEMORY_CACHING_TYPE diferente.
Os aplicativos de usuário não podem acessar \Device\PhysicalMemory diretamente a partir do Windows Server 2003 com Service Pack 1 (SP1) e só poderão acessá-lo se o driver passar um identificador para o aplicativo.
Para obter mais informações sobre objetos de seção, consulte Objetos e exibições de seção.
Se a chamada para essa função ocorrer no modo de usuário, você deverá usar o nome "NtMapViewOfSection" em vez de "ZwMapViewOfSection".
Para chamadas de drivers de modo kernel, as versões NtXxx e ZwXxx de uma rotina do Windows Native System Services podem se comportar de forma diferente na maneira como lidam e interpretam parâmetros de entrada. Para obter mais informações sobre a relação entre as versões NtXxx e ZwXxx de uma rotina, consulte Using Nt and Zw Versions of the Native System Services Routines.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Universal |
Cabeçalho | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Biblioteca | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Regras de conformidade da DDI | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |
Confira também
Usando versões Nt e Zw das rotinas de serviços do sistema nativo