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

ZwCreateSection

ZwOpenSection

ZwMapViewOfSectionEx

ZwUnmapViewOfSection

MapViewOfFile3