Compartilhar via


Gerenciando seções de memória

Um driver pode criar um objeto de seção chamando ZwCreateSection, que retorna um identificador para o objeto de seção. Use o parâmetro FileHandle para especificar o arquivo de backup ou NULL se a seção não tiver suporte de arquivo. Identificadores adicionais para o objeto de seção podem ser abertos usando ZwOpenSection.

Para tornar os dados que pertencem a um objeto de seção acessíveis dentro do espaço de endereço do processo atual, uma exibição da seção deve ser mapeada. Os drivers podem mapear uma exibição de uma seção para o espaço de endereço do processo atual usando a rotina ZwMapViewOfSection . O parâmetro SectionOffset especifica o deslocamento de bytes em que a exibição começa dentro da seção e ViewSize especifica o número de bytes a serem mapeados.

O parâmetro Protect especifica as operações permitidas na exibição. Especifique PAGE_READONLY para um modo de exibição somente leitura, PAGE_READWRITE para um modo de exibição de leitura/gravação e PAGE_WRITECOPY para um modo de exibição de cópia na gravação.

Nenhuma memória física é alocada para uma exibição até que o intervalo de memória virtual seja acessado. O primeiro acesso do intervalo de memória causa uma falha de página; em seguida, o sistema aloca uma página para manter esse local de memória. Se a seção tiver suporte para arquivo, o sistema lerá o conteúdo do arquivo que corresponde a essa página e o copiará para a memória. (Observe que os objetos e exibições de seção não utilizados usam algum pool paginado e não paginado para fins de contabilidade.)

Depois que um driver não estiver mais usando um modo de exibição, ele o desmapea fazendo uma chamada para ZwUnmapViewOfSection. Depois que o driver não estiver mais usando o objeto section, ele fechará o identificador de seção com ZwClose. Observe que, depois que a exibição for mapeada e nenhuma outra exibição for mapeada, é seguro chamar imediatamente ZwClose no identificador de seção; a exibição (e o objeto de seção) continuam a existir até que a exibição seja não mapeada. Essa é a prática recomendada porque reduz o risco de o driver não fechar o identificador.