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
Usando versões Nt e Zw das rotinas de serviços do sistema nativo
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de