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_LARGE_PAGES, MEM_RESERVE e MEM_TOP_DOWN. 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 da rotina VirtualAlloc .

[in] Win32Protect

Especifica o tipo de proteção para a região de páginas inicialmente confirmadas. Os drivers intermediários e de dispositivo devem definir esse valor como PAGE_READWRITE.

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 de endereços já reservado ou o tipo de atributo de cache especificado entra em conflito com o atributo de cache existente do intervalo de endereços. Por exemplo, se a memória que está sendo mapeada estiver dentro de uma página grande que já está mapeada como totalmente armazenada em cache, será inválido solicitar o mapeamento dessa memória como não armazenado em cache ou com gravação combinada.
STATUS_INVALID_PAGE_PROTECTION O valor especificado para o parâmetro Protect é inválido.
STATUS_SECTION_PROTECTION O valor especificado para o parâmetro AllocationType é incompatível com o tipo de proteção especificado 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.

Se a seção especificada não existir ou o acesso solicitado não for permitido, ZwMapViewOfSection retornará um erro.

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

MEMORY_CACHING_TYPE

MmAllocatePagesForMdl

Usando versões Nt e Zw das rotinas de serviços do sistema nativo

Virtualalloc

ZwCurrentProcess

ZwOpenSection

ZwUnmapViewOfSection