Função ZwMapViewOfSectionEx (wdm.h)
A rotina ZwMapViewOfSectionEx mapeia uma exibição de uma seção para o espaço de endereço virtual de um processo de assunto.
Sintaxe
NTSYSAPI NTSTATUS ZwMapViewOfSectionEx(
[in] HANDLE SectionHandle,
[in] HANDLE ProcessHandle,
[in, out] PVOID *BaseAddress,
[in, out, optional] PLARGE_INTEGER SectionOffset,
[in, out] PSIZE_T ViewSize,
[in] ULONG AllocationType,
[in] ULONG PageProtection,
[in, out, optional] PMEM_EXTENDED_PARAMETER ExtendedParameters,
[in] ULONG ExtendedParameterCount
);
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, 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, ZwMapViewOfSectionEx 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. ZwMapViewOfSectionEx 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] 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] PageProtection
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 PageProtection 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 PageProtection deve ser definido como PAGE_READONLY.
Para seções que não são de imagem, o valor do parâmetro PageProtection deve ser compatível com a proteção de página da seção especificada quando ZwCreateSection foi chamado.
ZwMapViewOfSectionEx sempre 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, ZwMapViewOfSectionEx mapeará as páginas sem cache, independentemente de o parâmetro PageProtection incluir o sinalizador PAGE_NOCACHE ou não.
[in, out, optional] ExtendedParameters
Um ponteiro opcional para um ou mais parâmetros estendidos do tipo MEM_EXTENDED_PARAMETER. Para obter mais informações sobre parâmetros estendidos, consulte a descrição da rotina MapViewOfFile3 .
[in] ExtendedParameterCount
Especifica o número de elementos na matriz ExtendedParameters.
Retornar valor
ZwMapViewOfSectionEx 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 PageProtection é inválido. |
STATUS_SECTION_PROTECTION | O valor especificado para o parâmetro PageProtection é 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 ZwMapViewOfSectionEx 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 "NtMapViewOfSectionEx" em vez de "ZwMapViewOfSectionEx".
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 |
---|---|
Cliente mínimo com suporte | Windows 11, versão 24H2 |
Cabeçalho | wdm.h |
Confira também
Usando versões Nt e Zw das rotinas de serviços do sistema nativo